DirectVariableAccess: Avoid creating access with no indices

Check if the chain is empty before creating an access instruction.

Bug: 370743660
Change-Id: Ie9430d31e17d6d64e0580de7e613d37225fa2964
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/211096
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/tint/lang/core/ir/transform/direct_variable_access.cc b/src/tint/lang/core/ir/transform/direct_variable_access.cc
index 9ed4f09..24a396a 100644
--- a/src/tint/lang/core/ir/transform/direct_variable_access.cc
+++ b/src/tint/lang/core/ir/transform/direct_variable_access.cc
@@ -596,10 +596,15 @@
                         auto* access = b.Access(ty.u32(), indices_param, u32(index_index++));
                         return access->Result(0);
                     });
-                    auto* access = b.Access(old_param->Type(), root_ptr, std::move(chain));
+
+                    auto* new_ptr = root_ptr;
+                    if (!chain.IsEmpty()) {
+                        new_ptr =
+                            b.Access(old_param->Type(), root_ptr, std::move(chain))->Result(0);
+                    }
 
                     // Replace the now removed parameter value with the access instruction
-                    old_param->ReplaceAllUsesWith(access->Result(0));
+                    old_param->ReplaceAllUsesWith(new_ptr);
                 } else if (HandleNeedsTransforming(old_param)) {
                     auto* load = b.Load(root_ptr);
 
diff --git a/src/tint/lang/core/ir/transform/direct_variable_access_test.cc b/src/tint/lang/core/ir/transform/direct_variable_access_test.cc
index 60dcedd..3cca4ac 100644
--- a/src/tint/lang/core/ir/transform/direct_variable_access_test.cc
+++ b/src/tint/lang/core/ir/transform/direct_variable_access_test.cc
@@ -837,14 +837,13 @@
 
 %a = func(%pre:i32, %post:i32):i32 {
   $B2: {
-    %5:ptr<uniform, i32, read> = access %U
-    %6:i32 = load %5
-    ret %6
+    %5:i32 = load %U
+    ret %5
   }
 }
 %b = func():void {
   $B3: {
-    %8:i32 = call %a, 10i, 20i
+    %7:i32 = call %a, 10i, 20i
     ret
   }
 }
@@ -2703,14 +2702,13 @@
 
 %a = func(%pre:i32, %post:i32):i32 {
   $B2: {
-    %5:ptr<private, i32, read_write> = access %P
-    %6:i32 = load %5
-    ret %6
+    %5:i32 = load %P
+    ret %5
   }
 }
 %b = func():void {
   $B3: {
-    %8:i32 = call %a, 10i, 20i
+    %7:i32 = call %a, 10i, 20i
     ret
   }
 }
@@ -2774,14 +2772,13 @@
 
 %a = func(%pre:i32, %post:i32):void {
   $B2: {
-    %5:ptr<private, i32, read_write> = access %P
-    store %5, 42i
+    store %P, 42i
     ret
   }
 }
 %b = func():void {
   $B3: {
-    %7:void = call %a, 10i, 20i
+    %6:void = call %a, 10i, 20i
     ret
   }
 }
@@ -3168,33 +3165,32 @@
 
 %a = func(%pre:i32, %post:i32):i32 {
   $B2: {
-    %7:ptr<private, i32, read_write> = access %Pi
-    %8:i32 = load %7
-    ret %8
+    %7:i32 = load %Pi
+    ret %7
   }
 }
 %a_1 = func(%pre_1:i32, %post_1:i32):i32 {  # %a_1: 'a', %pre_1: 'pre', %post_1: 'post'
   $B3: {
-    %12:ptr<private, i32, read_write> = access %Ps, 0u
-    %13:i32 = load %12
-    ret %13
+    %11:ptr<private, i32, read_write> = access %Ps, 0u
+    %12:i32 = load %11
+    ret %12
   }
 }
 %a_2 = func(%pre_2:i32, %p_indices:array<u32, 1>, %post_2:i32):i32 {  # %a_2: 'a', %pre_2: 'pre', %post_2: 'post'
   $B4: {
-    %18:u32 = access %p_indices, 0u
-    %19:ptr<private, i32, read_write> = access %Pa, %18
-    %20:i32 = load %19
-    ret %20
+    %17:u32 = access %p_indices, 0u
+    %18:ptr<private, i32, read_write> = access %Pa, %17
+    %19:i32 = load %18
+    ret %19
   }
 }
 %b = func():void {
   $B5: {
-    %22:i32 = call %a, 10i, 20i
-    %23:i32 = call %a_1, 30i, 40i
-    %24:u32 = convert 2i
-    %25:array<u32, 1> = construct %24
-    %26:i32 = call %a_2, 50i, %25, 60i
+    %21:i32 = call %a, 10i, 20i
+    %22:i32 = call %a_1, 30i, 40i
+    %23:u32 = convert 2i
+    %24:array<u32, 1> = construct %23
+    %25:i32 = call %a_2, 50i, %24, 60i
     ret
   }
 }
@@ -4058,15 +4054,14 @@
     auto* expect = R"(
 %a = func(%pre:i32, %p_root:ptr<function, i32, read_write>, %post:i32):i32 {
   $B1: {
-    %5:ptr<function, i32, read_write> = access %p_root
-    %6:i32 = load %5
-    ret %6
+    %5:i32 = load %p_root
+    ret %5
   }
 }
 %b = func():void {
   $B2: {
     %F:ptr<function, i32, read_write> = var
-    %9:i32 = call %a, 10i, %F, 20i
+    %8:i32 = call %a, 10i, %F, 20i
     ret
   }
 }
@@ -4118,15 +4113,14 @@
     auto* expect = R"(
 %a = func(%pre:i32, %p_root:ptr<function, i32, read_write>, %post:i32):void {
   $B1: {
-    %5:ptr<function, i32, read_write> = access %p_root
-    store %5, 42i
+    store %p_root, 42i
     ret
   }
 }
 %b = func():void {
   $B2: {
     %F:ptr<function, i32, read_write> = var
-    %8:void = call %a, 10i, %F, 20i
+    %7:void = call %a, 10i, %F, 20i
     ret
   }
 }
@@ -4351,24 +4345,23 @@
 
 %a = func(%pre:i32, %p_root:ptr<function, i32, read_write>, %post:i32):i32 {
   $B1: {
-    %5:ptr<function, i32, read_write> = access %p_root
-    %6:i32 = load %5
-    ret %6
+    %5:i32 = load %p_root
+    ret %5
   }
 }
 %a_1 = func(%pre_1:i32, %p_root_1:ptr<function, str, read_write>, %post_1:i32):i32 {  # %a_1: 'a', %pre_1: 'pre', %p_root_1: 'p_root', %post_1: 'post'
   $B2: {
-    %11:ptr<function, i32, read_write> = access %p_root_1, 0u
-    %12:i32 = load %11
-    ret %12
+    %10:ptr<function, i32, read_write> = access %p_root_1, 0u
+    %11:i32 = load %10
+    ret %11
   }
 }
 %a_2 = func(%pre_2:i32, %p_root_2:ptr<function, array<i32, 4>, read_write>, %p_indices:array<u32, 1>, %post_2:i32):i32 {  # %a_2: 'a', %pre_2: 'pre', %p_root_2: 'p_root', %post_2: 'post'
   $B3: {
-    %18:u32 = access %p_indices, 0u
-    %19:ptr<function, i32, read_write> = access %p_root_2, %18
-    %20:i32 = load %19
-    ret %20
+    %17:u32 = access %p_indices, 0u
+    %18:ptr<function, i32, read_write> = access %p_root_2, %17
+    %19:i32 = load %18
+    ret %19
   }
 }
 %b = func():void {
@@ -4376,11 +4369,11 @@
     %Fi:ptr<function, i32, read_write> = var
     %Fs:ptr<function, str, read_write> = var
     %Fa:ptr<function, array<i32, 4>, read_write> = var
-    %25:i32 = call %a, 10i, %Fi, 20i
-    %26:i32 = call %a_1, 30i, %Fs, 40i
-    %27:u32 = convert 2i
-    %28:array<u32, 1> = construct %27
-    %29:i32 = call %a_2, 50i, %Fa, %28, 60i
+    %24:i32 = call %a, 10i, %Fi, 20i
+    %25:i32 = call %a_1, 30i, %Fs, 40i
+    %26:u32 = convert 2i
+    %27:array<u32, 1> = construct %26
+    %28:i32 = call %a_2, 50i, %Fa, %27, 60i
     ret
   }
 }
@@ -5808,14 +5801,13 @@
 
 %len = func():u32 {
   $B2: {
-    %3:ptr<storage, array<f32>, read_write> = access %S
-    %4:u32 = arrayLength %3
-    ret %4
+    %3:u32 = arrayLength %S
+    ret %3
   }
 }
 %b = func():void {
   $B3: {
-    %6:u32 = call %len
+    %5:u32 = call %len
     ret
   }
 }
@@ -5875,14 +5867,13 @@
 
 %load = func():i32 {
   $B2: {
-    %3:ptr<workgroup, atomic<i32>, read_write> = access %W
-    %4:i32 = atomicLoad %3
-    ret %4
+    %3:i32 = atomicLoad %W
+    ret %3
   }
 }
 %b = func():void {
   $B3: {
-    %6:i32 = call %load
+    %5:i32 = call %load
     ret
   }
 }
@@ -6155,95 +6146,92 @@
 
 %fn_u = func():vec4<i32> {
   $B2: {
-    %14:ptr<uniform, vec4<i32>, read> = access %U
-    %15:vec4<i32> = load %14
-    ret %15
+    %14:vec4<i32> = load %U
+    ret %14
   }
 }
 %fn_u_1 = func():vec4<i32> {  # %fn_u_1: 'fn_u'
   $B3: {
-    %17:ptr<uniform, vec4<i32>, read> = access %U_str, 0u
-    %18:vec4<i32> = load %17
-    ret %18
+    %16:ptr<uniform, vec4<i32>, read> = access %U_str, 0u
+    %17:vec4<i32> = load %16
+    ret %17
   }
 }
 %fn_u_2 = func(%p_indices:array<u32, 1>):vec4<i32> {  # %fn_u_2: 'fn_u'
   $B4: {
-    %21:u32 = access %p_indices, 0u
-    %22:ptr<uniform, vec4<i32>, read> = access %U_arr, %21
-    %23:vec4<i32> = load %22
-    ret %23
+    %20:u32 = access %p_indices, 0u
+    %21:ptr<uniform, vec4<i32>, read> = access %U_arr, %20
+    %22:vec4<i32> = load %21
+    ret %22
   }
 }
 %fn_u_3 = func(%p_indices_1:array<u32, 2>):vec4<i32> {  # %fn_u_3: 'fn_u', %p_indices_1: 'p_indices'
   $B5: {
-    %26:u32 = access %p_indices_1, 0u
-    %27:u32 = access %p_indices_1, 1u
-    %28:ptr<uniform, vec4<i32>, read> = access %U_arr_arr, %26, %27
-    %29:vec4<i32> = load %28
-    ret %29
+    %25:u32 = access %p_indices_1, 0u
+    %26:u32 = access %p_indices_1, 1u
+    %27:ptr<uniform, vec4<i32>, read> = access %U_arr_arr, %25, %26
+    %28:vec4<i32> = load %27
+    ret %28
   }
 }
 %fn_s = func():vec4<i32> {
   $B6: {
-    %31:ptr<storage, vec4<i32>, read> = access %S
-    %32:vec4<i32> = load %31
-    ret %32
+    %30:vec4<i32> = load %S
+    ret %30
   }
 }
 %fn_s_1 = func():vec4<i32> {  # %fn_s_1: 'fn_s'
   $B7: {
-    %34:ptr<storage, vec4<i32>, read> = access %S_str, 0u
-    %35:vec4<i32> = load %34
-    ret %35
+    %32:ptr<storage, vec4<i32>, read> = access %S_str, 0u
+    %33:vec4<i32> = load %32
+    ret %33
   }
 }
 %fn_s_2 = func(%p_indices_2:array<u32, 1>):vec4<i32> {  # %fn_s_2: 'fn_s', %p_indices_2: 'p_indices'
   $B8: {
-    %38:u32 = access %p_indices_2, 0u
-    %39:ptr<storage, vec4<i32>, read> = access %S_arr, %38
-    %40:vec4<i32> = load %39
-    ret %40
+    %36:u32 = access %p_indices_2, 0u
+    %37:ptr<storage, vec4<i32>, read> = access %S_arr, %36
+    %38:vec4<i32> = load %37
+    ret %38
   }
 }
 %fn_s_3 = func(%p_indices_3:array<u32, 2>):vec4<i32> {  # %fn_s_3: 'fn_s', %p_indices_3: 'p_indices'
   $B9: {
-    %43:u32 = access %p_indices_3, 0u
-    %44:u32 = access %p_indices_3, 1u
-    %45:ptr<storage, vec4<i32>, read> = access %S_arr_arr, %43, %44
-    %46:vec4<i32> = load %45
-    ret %46
+    %41:u32 = access %p_indices_3, 0u
+    %42:u32 = access %p_indices_3, 1u
+    %43:ptr<storage, vec4<i32>, read> = access %S_arr_arr, %41, %42
+    %44:vec4<i32> = load %43
+    ret %44
   }
 }
 %fn_w = func():vec4<i32> {
   $B10: {
-    %48:ptr<workgroup, vec4<i32>, read_write> = access %W
-    %49:vec4<i32> = load %48
-    ret %49
+    %46:vec4<i32> = load %W
+    ret %46
   }
 }
 %fn_w_1 = func():vec4<i32> {  # %fn_w_1: 'fn_w'
   $B11: {
-    %51:ptr<workgroup, vec4<i32>, read_write> = access %W_str, 0u
-    %52:vec4<i32> = load %51
-    ret %52
+    %48:ptr<workgroup, vec4<i32>, read_write> = access %W_str, 0u
+    %49:vec4<i32> = load %48
+    ret %49
   }
 }
 %fn_w_2 = func(%p_indices_4:array<u32, 1>):vec4<i32> {  # %fn_w_2: 'fn_w', %p_indices_4: 'p_indices'
   $B12: {
-    %55:u32 = access %p_indices_4, 0u
-    %56:ptr<workgroup, vec4<i32>, read_write> = access %W_arr, %55
-    %57:vec4<i32> = load %56
-    ret %57
+    %52:u32 = access %p_indices_4, 0u
+    %53:ptr<workgroup, vec4<i32>, read_write> = access %W_arr, %52
+    %54:vec4<i32> = load %53
+    ret %54
   }
 }
 %fn_w_3 = func(%p_indices_5:array<u32, 2>):vec4<i32> {  # %fn_w_3: 'fn_w', %p_indices_5: 'p_indices'
   $B13: {
-    %60:u32 = access %p_indices_5, 0u
-    %61:u32 = access %p_indices_5, 1u
-    %62:ptr<workgroup, vec4<i32>, read_write> = access %W_arr_arr, %60, %61
-    %63:vec4<i32> = load %62
-    ret %63
+    %57:u32 = access %p_indices_5, 0u
+    %58:u32 = access %p_indices_5, 1u
+    %59:ptr<workgroup, vec4<i32>, read_write> = access %W_arr_arr, %57, %58
+    %60:vec4<i32> = load %59
+    ret %60
   }
 }
 %b = func():void {
@@ -6252,85 +6240,85 @@
     %J:i32 = let 4i
     %u:vec4<i32> = call %fn_u
     %u_str:vec4<i32> = call %fn_u_1
-    %69:u32 = convert 0i
+    %66:u32 = convert 0i
+    %67:array<u32, 1> = construct %66
+    %u_arr0:vec4<i32> = call %fn_u_2, %67
+    %69:u32 = convert 1i
     %70:array<u32, 1> = construct %69
-    %u_arr0:vec4<i32> = call %fn_u_2, %70
-    %72:u32 = convert 1i
+    %u_arr1:vec4<i32> = call %fn_u_2, %70
+    %72:u32 = convert %I
     %73:array<u32, 1> = construct %72
-    %u_arr1:vec4<i32> = call %fn_u_2, %73
-    %75:u32 = convert %I
-    %76:array<u32, 1> = construct %75
-    %u_arrI:vec4<i32> = call %fn_u_2, %76
-    %78:u32 = convert 1i
-    %79:u32 = convert 0i
-    %80:array<u32, 2> = construct %78, %79
-    %u_arr1_arr0:vec4<i32> = call %fn_u_3, %80
-    %82:u32 = convert 2i
+    %u_arrI:vec4<i32> = call %fn_u_2, %73
+    %75:u32 = convert 1i
+    %76:u32 = convert 0i
+    %77:array<u32, 2> = construct %75, %76
+    %u_arr1_arr0:vec4<i32> = call %fn_u_3, %77
+    %79:u32 = convert 2i
+    %80:u32 = convert %I
+    %81:array<u32, 2> = construct %79, %80
+    %u_arr2_arrI:vec4<i32> = call %fn_u_3, %81
     %83:u32 = convert %I
-    %84:array<u32, 2> = construct %82, %83
-    %u_arr2_arrI:vec4<i32> = call %fn_u_3, %84
-    %86:u32 = convert %I
-    %87:u32 = convert 2i
-    %88:array<u32, 2> = construct %86, %87
-    %u_arrI_arr2:vec4<i32> = call %fn_u_3, %88
-    %90:u32 = convert %I
-    %91:u32 = convert %J
-    %92:array<u32, 2> = construct %90, %91
-    %u_arrI_arrJ:vec4<i32> = call %fn_u_3, %92
+    %84:u32 = convert 2i
+    %85:array<u32, 2> = construct %83, %84
+    %u_arrI_arr2:vec4<i32> = call %fn_u_3, %85
+    %87:u32 = convert %I
+    %88:u32 = convert %J
+    %89:array<u32, 2> = construct %87, %88
+    %u_arrI_arrJ:vec4<i32> = call %fn_u_3, %89
     %s:vec4<i32> = call %fn_s
     %s_str:vec4<i32> = call %fn_s_1
-    %96:u32 = convert 0i
+    %93:u32 = convert 0i
+    %94:array<u32, 1> = construct %93
+    %s_arr0:vec4<i32> = call %fn_s_2, %94
+    %96:u32 = convert 1i
     %97:array<u32, 1> = construct %96
-    %s_arr0:vec4<i32> = call %fn_s_2, %97
-    %99:u32 = convert 1i
+    %s_arr1:vec4<i32> = call %fn_s_2, %97
+    %99:u32 = convert %I
     %100:array<u32, 1> = construct %99
-    %s_arr1:vec4<i32> = call %fn_s_2, %100
-    %102:u32 = convert %I
-    %103:array<u32, 1> = construct %102
-    %s_arrI:vec4<i32> = call %fn_s_2, %103
-    %105:u32 = convert 1i
-    %106:u32 = convert 0i
-    %107:array<u32, 2> = construct %105, %106
-    %s_arr1_arr0:vec4<i32> = call %fn_s_3, %107
-    %109:u32 = convert 2i
+    %s_arrI:vec4<i32> = call %fn_s_2, %100
+    %102:u32 = convert 1i
+    %103:u32 = convert 0i
+    %104:array<u32, 2> = construct %102, %103
+    %s_arr1_arr0:vec4<i32> = call %fn_s_3, %104
+    %106:u32 = convert 2i
+    %107:u32 = convert %I
+    %108:array<u32, 2> = construct %106, %107
+    %s_arr2_arrI:vec4<i32> = call %fn_s_3, %108
     %110:u32 = convert %I
-    %111:array<u32, 2> = construct %109, %110
-    %s_arr2_arrI:vec4<i32> = call %fn_s_3, %111
-    %113:u32 = convert %I
-    %114:u32 = convert 2i
-    %115:array<u32, 2> = construct %113, %114
-    %s_arrI_arr2:vec4<i32> = call %fn_s_3, %115
-    %117:u32 = convert %I
-    %118:u32 = convert %J
-    %119:array<u32, 2> = construct %117, %118
-    %s_arrI_arrJ:vec4<i32> = call %fn_s_3, %119
+    %111:u32 = convert 2i
+    %112:array<u32, 2> = construct %110, %111
+    %s_arrI_arr2:vec4<i32> = call %fn_s_3, %112
+    %114:u32 = convert %I
+    %115:u32 = convert %J
+    %116:array<u32, 2> = construct %114, %115
+    %s_arrI_arrJ:vec4<i32> = call %fn_s_3, %116
     %w:vec4<i32> = call %fn_w
     %w_str:vec4<i32> = call %fn_w_1
-    %123:u32 = convert 0i
+    %120:u32 = convert 0i
+    %121:array<u32, 1> = construct %120
+    %w_arr0:vec4<i32> = call %fn_w_2, %121
+    %123:u32 = convert 1i
     %124:array<u32, 1> = construct %123
-    %w_arr0:vec4<i32> = call %fn_w_2, %124
-    %126:u32 = convert 1i
+    %w_arr1:vec4<i32> = call %fn_w_2, %124
+    %126:u32 = convert %I
     %127:array<u32, 1> = construct %126
-    %w_arr1:vec4<i32> = call %fn_w_2, %127
-    %129:u32 = convert %I
-    %130:array<u32, 1> = construct %129
-    %w_arrI:vec4<i32> = call %fn_w_2, %130
-    %132:u32 = convert 1i
-    %133:u32 = convert 0i
-    %134:array<u32, 2> = construct %132, %133
-    %w_arr1_arr0:vec4<i32> = call %fn_w_3, %134
-    %136:u32 = convert 2i
+    %w_arrI:vec4<i32> = call %fn_w_2, %127
+    %129:u32 = convert 1i
+    %130:u32 = convert 0i
+    %131:array<u32, 2> = construct %129, %130
+    %w_arr1_arr0:vec4<i32> = call %fn_w_3, %131
+    %133:u32 = convert 2i
+    %134:u32 = convert %I
+    %135:array<u32, 2> = construct %133, %134
+    %w_arr2_arrI:vec4<i32> = call %fn_w_3, %135
     %137:u32 = convert %I
-    %138:array<u32, 2> = construct %136, %137
-    %w_arr2_arrI:vec4<i32> = call %fn_w_3, %138
-    %140:u32 = convert %I
-    %141:u32 = convert 2i
-    %142:array<u32, 2> = construct %140, %141
-    %w_arrI_arr2:vec4<i32> = call %fn_w_3, %142
-    %144:u32 = convert %I
-    %145:u32 = convert %J
-    %146:array<u32, 2> = construct %144, %145
-    %w_arrI_arrJ:vec4<i32> = call %fn_w_3, %146
+    %138:u32 = convert 2i
+    %139:array<u32, 2> = construct %137, %138
+    %w_arrI_arr2:vec4<i32> = call %fn_w_3, %139
+    %141:u32 = convert %I
+    %142:u32 = convert %J
+    %143:array<u32, 2> = construct %141, %142
+    %w_arrI_arrJ:vec4<i32> = call %fn_w_3, %143
     ret
   }
 }
diff --git a/test/tint/access/ptr.wgsl.expected.spvasm b/test/tint/access/ptr.wgsl.expected.spvasm
index 06a417d..32031e4 100644
--- a/test/tint/access/ptr.wgsl.expected.spvasm
+++ b/test/tint/access/ptr.wgsl.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 124
+; Bound: 121
 ; Schema: 0
                OpCapability Shader
-         %61 = OpExtInstImport "GLSL.std.450"
+         %58 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint GLCompute %main "main" %main_local_invocation_index_Input
                OpExecutionMode %main LocalSize 1 1 1
@@ -60,31 +60,31 @@
          %17 = OpTypeFunction %int %_ptr_Function_int
           %S = OpTypeStruct %int %int
 %_ptr_Function_S = OpTypePointer Function %S
-         %35 = OpTypeFunction %int %_ptr_Function_S
+         %33 = OpTypeFunction %int %_ptr_Function_S
      %uint_0 = OpConstant %uint 0
      %uint_1 = OpConstant %uint 1
       %int_2 = OpConstant %int 2
       %float = OpTypeFloat 32
     %v3float = OpTypeVector %float 3
 %_ptr_Function_v3float = OpTypePointer Function %v3float
-         %55 = OpTypeFunction %int %_ptr_Function_v3float
+         %53 = OpTypeFunction %int %_ptr_Function_v3float
 %_ptr_Function_float = OpTypePointer Function %float
-         %70 = OpTypeFunction %int
+         %67 = OpTypeFunction %int
      %uint_2 = OpConstant %uint 2
        %void = OpTypeVoid
-         %77 = OpTypeFunction %void %uint
+         %74 = OpTypeFunction %void %uint
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
-         %89 = OpConstantNull %S
-         %91 = OpConstantNull %v3float
+         %86 = OpConstantNull %S
+         %88 = OpConstantNull %v3float
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-        %108 = OpTypeFunction %int %float
+        %105 = OpTypeFunction %int %float
 %float_n2_14748365e_09 = OpConstant %float -2.14748365e+09
 %int_n2147483648 = OpConstant %int -2147483648
 %float_2_14748352e_09 = OpConstant %float 2.14748352e+09
 %int_2147483647 = OpConstant %int 2147483647
-        %120 = OpTypeFunction %void
+        %117 = OpTypeFunction %void
 %accept_value = OpFunction %int None %12
         %val = OpFunctionParameter %int
          %13 = OpLabel
@@ -93,107 +93,104 @@
 %accept_ptr_deref_call_func = OpFunction %int None %17
    %val_root = OpFunctionParameter %_ptr_Function_int
          %18 = OpLabel
-         %19 = OpAccessChain %_ptr_Function_int %val_root
-         %20 = OpLoad %int %19 None
-         %21 = OpLoad %int %19 None
-         %22 = OpFunctionCall %int %accept_value %21
-         %23 = OpIAdd %int %20 %22
-               OpReturnValue %23
+         %19 = OpLoad %int %val_root None
+         %20 = OpLoad %int %val_root None
+         %21 = OpFunctionCall %int %accept_value %20
+         %22 = OpIAdd %int %19 %21
+               OpReturnValue %22
                OpFunctionEnd
 %accept_ptr_deref_pass_through = OpFunction %int None %17
  %val_root_0 = OpFunctionParameter %_ptr_Function_int
-         %26 = OpLabel
-         %27 = OpAccessChain %_ptr_Function_int %val_root_0
-         %28 = OpLoad %int %27 None
-         %29 = OpFunctionCall %int %accept_ptr_deref_call_func %val_root_0
-         %30 = OpIAdd %int %28 %29
-               OpReturnValue %30
+         %25 = OpLabel
+         %26 = OpLoad %int %val_root_0 None
+         %27 = OpFunctionCall %int %accept_ptr_deref_call_func %val_root_0
+         %28 = OpIAdd %int %26 %27
+               OpReturnValue %28
                OpFunctionEnd
-%accept_ptr_to_struct_and_access = OpFunction %int None %35
+%accept_ptr_to_struct_and_access = OpFunction %int None %33
  %val_root_1 = OpFunctionParameter %_ptr_Function_S
-         %36 = OpLabel
-         %37 = OpAccessChain %_ptr_Function_int %val_root_1 %uint_0
-         %39 = OpLoad %int %37 None
-         %40 = OpAccessChain %_ptr_Function_int %val_root_1 %uint_1
-         %42 = OpLoad %int %40 None
-         %43 = OpIAdd %int %39 %42
-               OpReturnValue %43
+         %34 = OpLabel
+         %35 = OpAccessChain %_ptr_Function_int %val_root_1 %uint_0
+         %37 = OpLoad %int %35 None
+         %38 = OpAccessChain %_ptr_Function_int %val_root_1 %uint_1
+         %40 = OpLoad %int %38 None
+         %41 = OpIAdd %int %37 %40
+               OpReturnValue %41
                OpFunctionEnd
-%accept_ptr_to_struct_access_pass_ptr = OpFunction %int None %35
+%accept_ptr_to_struct_access_pass_ptr = OpFunction %int None %33
  %val_root_2 = OpFunctionParameter %_ptr_Function_S
-         %46 = OpLabel
+         %44 = OpLabel
           %b = OpAccessChain %_ptr_Function_int %val_root_2 %uint_0
                OpStore %b %int_2 None
-         %49 = OpLoad %int %b None
-               OpReturnValue %49
+         %47 = OpLoad %int %b None
+               OpReturnValue %47
                OpFunctionEnd
-%accept_ptr_vec_access_elements = OpFunction %int None %55
+%accept_ptr_vec_access_elements = OpFunction %int None %53
     %v1_root = OpFunctionParameter %_ptr_Function_v3float
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_v3float %v1_root
-         %58 = OpLoad %v3float %57 None
-         %59 = OpLoad %v3float %57 None
-         %60 = OpExtInst %v3float %61 Cross %58 %59
-         %62 = OpCompositeExtract %float %60 0
-         %63 = OpAccessChain %_ptr_Function_float %57 %uint_0
-               OpStore %63 %62 None
-         %65 = OpAccessChain %_ptr_Function_float %57 %uint_0
-         %66 = OpLoad %float %65 None
-         %67 = OpFunctionCall %int %tint_f32_to_i32 %66
-               OpReturnValue %67
+         %54 = OpLabel
+         %55 = OpLoad %v3float %v1_root None
+         %56 = OpLoad %v3float %v1_root None
+         %57 = OpExtInst %v3float %58 Cross %55 %56
+         %59 = OpCompositeExtract %float %57 0
+         %60 = OpAccessChain %_ptr_Function_float %v1_root %uint_0
+               OpStore %60 %59 None
+         %62 = OpAccessChain %_ptr_Function_float %v1_root %uint_0
+         %63 = OpLoad %float %62 None
+         %64 = OpFunctionCall %int %tint_f32_to_i32 %63
+               OpReturnValue %64
                OpFunctionEnd
-%call_builtin_with_mod_scope_ptr = OpFunction %int None %70
-         %71 = OpLabel
-         %72 = OpAtomicLoad %int %g1 %uint_2 %uint_0
-               OpReturnValue %72
+%call_builtin_with_mod_scope_ptr = OpFunction %int None %67
+         %68 = OpLabel
+         %69 = OpAtomicLoad %int %g1 %uint_2 %uint_0
+               OpReturnValue %69
                OpFunctionEnd
- %main_inner = OpFunction %void None %77
+ %main_inner = OpFunction %void None %74
 %tint_local_index = OpFunctionParameter %uint
-         %78 = OpLabel
+         %75 = OpLabel
          %v1 = OpVariable %_ptr_Function_int Function
          %v2 = OpVariable %_ptr_Function_S Function
          %v4 = OpVariable %_ptr_Function_v3float Function
-         %79 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %81
-         %82 = OpLabel
+         %76 = OpIEqual %bool %tint_local_index %uint_0
+               OpSelectionMerge %78 None
+               OpBranchConditional %76 %79 %78
+         %79 = OpLabel
                OpAtomicStore %g1 %uint_2 %uint_0 %int_0
-               OpBranch %81
-         %81 = OpLabel
+               OpBranch %78
+         %78 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %v1 %int_0
-               OpStore %v2 %89
-               OpStore %v4 %91
+               OpStore %v2 %86
+               OpStore %v4 %88
          %t1 = OpAtomicLoad %int %g1 %uint_2 %uint_0
-         %93 = OpFunctionCall %int %accept_ptr_deref_pass_through %v1
-         %94 = OpFunctionCall %int %accept_ptr_to_struct_and_access %v2
-         %95 = OpIAdd %int %93 %94
-         %96 = OpFunctionCall %int %accept_ptr_to_struct_and_access %v2
-         %97 = OpIAdd %int %95 %96
-         %98 = OpFunctionCall %int %accept_ptr_vec_access_elements %v4
-         %99 = OpIAdd %int %97 %98
-        %100 = OpFunctionCall %int %accept_ptr_to_struct_access_pass_ptr %v2
-        %101 = OpIAdd %int %99 %100
-        %102 = OpFunctionCall %int %call_builtin_with_mod_scope_ptr
-        %103 = OpIAdd %int %101 %102
-        %104 = OpIAdd %int %103 %t1
-        %105 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %105 %104 None
+         %90 = OpFunctionCall %int %accept_ptr_deref_pass_through %v1
+         %91 = OpFunctionCall %int %accept_ptr_to_struct_and_access %v2
+         %92 = OpIAdd %int %90 %91
+         %93 = OpFunctionCall %int %accept_ptr_to_struct_and_access %v2
+         %94 = OpIAdd %int %92 %93
+         %95 = OpFunctionCall %int %accept_ptr_vec_access_elements %v4
+         %96 = OpIAdd %int %94 %95
+         %97 = OpFunctionCall %int %accept_ptr_to_struct_access_pass_ptr %v2
+         %98 = OpIAdd %int %96 %97
+         %99 = OpFunctionCall %int %call_builtin_with_mod_scope_ptr
+        %100 = OpIAdd %int %98 %99
+        %101 = OpIAdd %int %100 %t1
+        %102 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %102 %101 None
                OpReturn
                OpFunctionEnd
-%tint_f32_to_i32 = OpFunction %int None %108
+%tint_f32_to_i32 = OpFunction %int None %105
       %value = OpFunctionParameter %float
-        %109 = OpLabel
-        %110 = OpConvertFToS %int %value
-        %111 = OpFOrdGreaterThanEqual %bool %value %float_n2_14748365e_09
-        %113 = OpSelect %int %111 %110 %int_n2147483648
-        %115 = OpFOrdLessThanEqual %bool %value %float_2_14748352e_09
-        %117 = OpSelect %int %115 %113 %int_2147483647
-               OpReturnValue %117
+        %106 = OpLabel
+        %107 = OpConvertFToS %int %value
+        %108 = OpFOrdGreaterThanEqual %bool %value %float_n2_14748365e_09
+        %110 = OpSelect %int %108 %107 %int_n2147483648
+        %112 = OpFOrdLessThanEqual %bool %value %float_2_14748352e_09
+        %114 = OpSelect %int %112 %110 %int_2147483647
+               OpReturnValue %114
                OpFunctionEnd
-       %main = OpFunction %void None %120
-        %121 = OpLabel
-        %122 = OpLoad %uint %main_local_invocation_index_Input None
-        %123 = OpFunctionCall %void %main_inner %122
+       %main = OpFunction %void None %117
+        %118 = OpLabel
+        %119 = OpLoad %uint %main_local_invocation_index_Input None
+        %120 = OpFunctionCall %void %main_inner %119
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/1086.wgsl.expected.spvasm b/test/tint/bug/tint/1086.wgsl.expected.spvasm
index c9c0f17..732cc87 100644
--- a/test/tint/bug/tint/1086.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/1086.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 17
+; Bound: 16
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,17 +20,16 @@
     %float_0 = OpConstant %float 0
           %x = OpFunction %void None %7
           %8 = OpLabel
-          %9 = OpAccessChain %_ptr_Private_float %v
-               OpStore %9 %float_0 None
+               OpStore %v %float_0 None
                OpReturn
                OpFunctionEnd
           %g = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %x
+         %11 = OpLabel
+         %12 = OpFunctionCall %void %x
                OpReturn
                OpFunctionEnd
           %f = OpFunction %void None %7
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %g
+         %14 = OpLabel
+         %15 = OpFunctionCall %void %g
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/2054.wgsl.expected.spvasm b/test/tint/bug/tint/2054.wgsl.expected.spvasm
index be75e4d..81b02d1 100644
--- a/test/tint/bug/tint/2054.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/2054.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 35
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -33,35 +33,34 @@
     %float_0 = OpConstant %float 0
        %bool = OpTypeBool
       %false = OpConstantFalse %bool
-         %25 = OpTypeFunction %void
-         %28 = OpConstantNull %float
+         %24 = OpTypeFunction %void
+         %27 = OpConstantNull %float
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
        %uint = OpTypeInt 32 0
      %uint_0 = OpConstant %uint 0
         %bar = OpFunction %void None %9
      %p_root = OpFunctionParameter %_ptr_Function_float
          %10 = OpLabel
-         %11 = OpAccessChain %_ptr_Function_float %p_root
-         %14 = OpFOrdGreaterThanEqual %bool %a %float_0
-               OpSelectionMerge %17 None
-               OpBranchConditional %14 %18 %19
-         %18 = OpLabel
-         %20 = OpFOrdGreaterThanEqual %bool %b %float_0
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %17
+         %13 = OpFOrdGreaterThanEqual %bool %a %float_0
+               OpSelectionMerge %16 None
+               OpBranchConditional %13 %17 %18
          %17 = OpLabel
-       %cond = OpPhi %bool %20 %18 %false %19
-         %23 = OpSelect %float %cond %b %a
-               OpStore %11 %23 None
+         %19 = OpFOrdGreaterThanEqual %bool %b %float_0
+               OpBranch %16
+         %18 = OpLabel
+               OpBranch %16
+         %16 = OpLabel
+       %cond = OpPhi %bool %19 %17 %false %18
+         %22 = OpSelect %float %cond %b %a
+               OpStore %p_root %22 None
                OpReturn
                OpFunctionEnd
-        %foo = OpFunction %void None %25
-         %26 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %28
-         %29 = OpFunctionCall %void %bar %param
-         %30 = OpLoad %float %param None
-         %31 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
-               OpStore %31 %30 None
+        %foo = OpFunction %void None %24
+         %25 = OpLabel
+      %param = OpVariable %_ptr_Function_float Function %27
+         %28 = OpFunctionCall %void %bar %param
+         %29 = OpLoad %float %param None
+         %30 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+               OpStore %30 %29 None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/219.spvasm.expected.spvasm b/test/tint/bug/tint/219.spvasm.expected.spvasm
index 292f782..4f6e36b 100644
--- a/test/tint/bug/tint/219.spvasm.expected.spvasm
+++ b/test/tint/bug/tint/219.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 24
+; Bound: 23
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,24 +22,23 @@
        %uint = OpTypeInt 32 0
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-         %19 = OpConstantNull %v2float
+         %15 = OpTypeFunction %void
+         %18 = OpConstantNull %v2float
       %x_200 = OpFunction %float None %6
  %x_201_root = OpFunctionParameter %_ptr_Function_v2float
           %7 = OpLabel
-          %8 = OpAccessChain %_ptr_Function_v2float %x_201_root
-          %9 = OpAccessChain %_ptr_Function_float %8 %uint_0
-      %x_212 = OpLoad %float %9 None
+          %8 = OpAccessChain %_ptr_Function_float %x_201_root %uint_0
+      %x_212 = OpLoad %float %8 None
                OpReturnValue %x_212
                OpFunctionEnd
-     %main_1 = OpFunction %void None %16
-         %17 = OpLabel
-       %x_11 = OpVariable %_ptr_Function_v2float Function %19
+     %main_1 = OpFunction %void None %15
+         %16 = OpLabel
+       %x_11 = OpVariable %_ptr_Function_v2float Function %18
        %x_12 = OpFunctionCall %float %x_200 %x_11
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %16
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
+       %main = OpFunction %void None %15
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %main_1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/948.wgsl.expected.spvasm b/test/tint/bug/tint/948.wgsl.expected.spvasm
index 069af42..e5037a2 100644
--- a/test/tint/bug/tint/948.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/948.wgsl.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 370
+; Bound: 369
 ; Schema: 0
                OpCapability Shader
-        %134 = OpExtInstImport "GLSL.std.450"
+        %133 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Fragment %main "main" %main_loc2_Input %main_loc5_Input %main_loc4_Input %main_loc3_Input %main_loc0_Input %main_loc1_Input %main_loc0_Output
                OpExecutionMode %main OriginUpperLeft
@@ -242,29 +242,29 @@
      %uint_0 = OpConstant %uint 0
      %uint_7 = OpConstant %uint 7
     %float_0 = OpConstant %float 0
-         %70 = OpTypeSampledImage %13
+         %69 = OpTypeSampledImage %13
  %float_0_25 = OpConstant %float 0.25
   %float_0_5 = OpConstant %float 0.5
        %void = OpTypeVoid
-        %104 = OpTypeFunction %void
+        %103 = OpTypeFunction %void
 %_ptr_Function_v4float = OpTypePointer Function %v4float
 %_ptr_Function_v2float = OpTypePointer Function %v2float
         %int = OpTypeInt 32 1
 %_ptr_Function_int = OpTypePointer Function %int
-        %117 = OpConstantNull %int
+        %116 = OpConstantNull %int
 %_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-        %123 = OpConstantNull %mat4v4float
+        %122 = OpConstantNull %mat4v4float
 %_ptr_Function_v3float = OpTypePointer Function %v3float
      %uint_1 = OpConstant %uint 1
     %float_1 = OpConstant %float 1
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
      %uint_5 = OpConstant %uint 5
-        %148 = OpConstantComposite %v2float %float_1 %float_1
+        %147 = OpConstantComposite %v2float %float_1 %float_1
      %uint_4 = OpConstant %uint 4
       %int_0 = OpConstant %int 0
       %int_2 = OpConstant %int 2
        %bool = OpTypeBool
-        %178 = OpConstantComposite %v2float %float_0_5 %float_0_5
+        %177 = OpConstantComposite %v2float %float_0_5 %float_0_5
      %uint_2 = OpConstant %uint 2
     %float_8 = OpConstant %float 8
      %uint_3 = OpConstant %uint 3
@@ -272,66 +272,65 @@
 %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
      %uint_8 = OpConstant %uint 8
    %main_out = OpTypeStruct %v4float
-        %355 = OpTypeFunction %main_out %v2float %v2float %v2float %v2float %v3float %v2float
+        %354 = OpTypeFunction %main_out %v2float %v2float %v2float %v2float %v3float %v2float
 %getFrameData_f1_ = OpFunction %mat4v4float None %53
 %frameID_root = OpFunctionParameter %_ptr_Function_float
          %54 = OpLabel
          %fX = OpVariable %_ptr_Function_float Function %27
-         %55 = OpAccessChain %_ptr_Function_float %frameID_root
-       %x_15 = OpLoad %float %55 None
-         %58 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
-       %x_25 = OpLoad %float %58 None
-         %63 = OpFDiv %float %x_15 %x_25
-               OpStore %fX %63 None
+       %x_15 = OpLoad %float %frameID_root None
+         %57 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
+       %x_25 = OpLoad %float %57 None
+         %62 = OpFDiv %float %x_15 %x_25
+               OpStore %fX %62 None
        %x_37 = OpLoad %float %fX None
-         %65 = OpLoad %13 %frameMapTexture None
-         %66 = OpLoad %16 %frameMapSampler None
-         %67 = OpCompositeConstruct %v2float %x_37 %float_0
-         %69 = OpSampledImage %70 %65 %66
-       %x_40 = OpImageSampleImplicitLod %v4float %69 %67 Bias %float_0
+         %64 = OpLoad %13 %frameMapTexture None
+         %65 = OpLoad %16 %frameMapSampler None
+         %66 = OpCompositeConstruct %v2float %x_37 %float_0
+         %68 = OpSampledImage %69 %64 %65
+       %x_40 = OpImageSampleImplicitLod %v4float %68 %66 Bias %float_0
        %x_44 = OpLoad %float %fX None
-         %73 = OpLoad %13 %frameMapTexture None
-         %74 = OpLoad %16 %frameMapSampler None
-         %75 = OpCompositeConstruct %v2float %x_44 %float_0_25
-         %77 = OpSampledImage %70 %73 %74
-       %x_47 = OpImageSampleImplicitLod %v4float %77 %75 Bias %float_0
+         %72 = OpLoad %13 %frameMapTexture None
+         %73 = OpLoad %16 %frameMapSampler None
+         %74 = OpCompositeConstruct %v2float %x_44 %float_0_25
+         %76 = OpSampledImage %69 %72 %73
+       %x_47 = OpImageSampleImplicitLod %v4float %76 %74 Bias %float_0
        %x_51 = OpLoad %float %fX None
-         %80 = OpLoad %13 %frameMapTexture None
-         %81 = OpLoad %16 %frameMapSampler None
-         %82 = OpCompositeConstruct %v2float %x_51 %float_0_5
-         %84 = OpSampledImage %70 %80 %81
-       %x_54 = OpImageSampleImplicitLod %v4float %84 %82 Bias %float_0
-         %86 = OpCompositeExtract %float %x_40 0
-         %87 = OpCompositeExtract %float %x_40 1
-         %88 = OpCompositeExtract %float %x_40 2
-         %89 = OpCompositeExtract %float %x_40 3
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-         %91 = OpCompositeExtract %float %x_47 0
-         %92 = OpCompositeExtract %float %x_47 1
-         %93 = OpCompositeExtract %float %x_47 2
-         %94 = OpCompositeExtract %float %x_47 3
-         %95 = OpCompositeConstruct %v4float %91 %92 %93 %94
-         %96 = OpCompositeExtract %float %x_54 0
-         %97 = OpCompositeExtract %float %x_54 1
-         %98 = OpCompositeExtract %float %x_54 2
-         %99 = OpCompositeExtract %float %x_54 3
-        %100 = OpCompositeConstruct %v4float %96 %97 %98 %99
-        %101 = OpCompositeConstruct %mat4v4float %90 %95 %100 %x_217
-               OpReturnValue %101
+         %79 = OpLoad %13 %frameMapTexture None
+         %80 = OpLoad %16 %frameMapSampler None
+         %81 = OpCompositeConstruct %v2float %x_51 %float_0_5
+         %83 = OpSampledImage %69 %79 %80
+       %x_54 = OpImageSampleImplicitLod %v4float %83 %81 Bias %float_0
+         %85 = OpCompositeExtract %float %x_40 0
+         %86 = OpCompositeExtract %float %x_40 1
+         %87 = OpCompositeExtract %float %x_40 2
+         %88 = OpCompositeExtract %float %x_40 3
+         %89 = OpCompositeConstruct %v4float %85 %86 %87 %88
+         %90 = OpCompositeExtract %float %x_47 0
+         %91 = OpCompositeExtract %float %x_47 1
+         %92 = OpCompositeExtract %float %x_47 2
+         %93 = OpCompositeExtract %float %x_47 3
+         %94 = OpCompositeConstruct %v4float %90 %91 %92 %93
+         %95 = OpCompositeExtract %float %x_54 0
+         %96 = OpCompositeExtract %float %x_54 1
+         %97 = OpCompositeExtract %float %x_54 2
+         %98 = OpCompositeExtract %float %x_54 3
+         %99 = OpCompositeConstruct %v4float %95 %96 %97 %98
+        %100 = OpCompositeConstruct %mat4v4float %89 %94 %99 %x_217
+               OpReturnValue %100
                OpFunctionEnd
-     %main_1 = OpFunction %void None %104
-        %105 = OpLabel
+     %main_1 = OpFunction %void None %103
+        %104 = OpLabel
       %color = OpVariable %_ptr_Function_v4float Function %x_217
      %tileUV = OpVariable %_ptr_Function_v2float Function %19
      %tileID = OpVariable %_ptr_Function_v2float Function %19
  %sheetUnits = OpVariable %_ptr_Function_v2float Function %19
 %spriteUnits = OpVariable %_ptr_Function_float Function %27
  %stageUnits = OpVariable %_ptr_Function_v2float Function %19
-          %i = OpVariable %_ptr_Function_int Function %117
+          %i = OpVariable %_ptr_Function_int Function %116
   %frameID_1 = OpVariable %_ptr_Function_float Function %27
 %animationData = OpVariable %_ptr_Function_v4float Function %x_217
           %f = OpVariable %_ptr_Function_float Function %27
-  %frameData = OpVariable %_ptr_Function_mat4v4float Function %123
+  %frameData = OpVariable %_ptr_Function_mat4v4float Function %122
       %param = OpVariable %_ptr_Function_float Function %27
   %frameSize = OpVariable %_ptr_Function_v2float Function %19
    %offset_1 = OpVariable %_ptr_Function_v2float Function %19
@@ -341,297 +340,297 @@
       %mixed = OpVariable %_ptr_Function_v3float Function %38
                OpStore %color %x_217 None
        %x_86 = OpLoad %v2float %tUV None
-        %133 = OpExtInst %v2float %134 Fract %x_86
-               OpStore %tileUV %133 None
-        %135 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
-       %x_91 = OpLoad %float %135 None
-        %138 = OpFSub %float %float_1 %x_91
-        %140 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
-               OpStore %140 %138 None
+        %132 = OpExtInst %v2float %133 Fract %x_86
+               OpStore %tileUV %132 None
+        %134 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
+       %x_91 = OpLoad %float %134 None
+        %137 = OpFSub %float %float_1 %x_91
+        %139 = OpAccessChain %_ptr_Function_float %tileUV %uint_1
+               OpStore %139 %137 None
        %x_95 = OpLoad %v2float %tUV None
-        %142 = OpExtInst %v2float %134 Floor %x_95
-               OpStore %tileID %142 None
-        %143 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_5
-      %x_101 = OpLoad %v2float %143 None
-        %147 = OpFDiv %v2float %148 %x_101
-               OpStore %sheetUnits %147 None
-        %149 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
-      %x_106 = OpLoad %float %149 None
-        %151 = OpFDiv %float %float_1 %x_106
-               OpStore %spriteUnits %151 None
-        %152 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_4
-      %x_111 = OpLoad %v2float %152 None
-        %155 = OpFDiv %v2float %148 %x_111
-               OpStore %stageUnits %155 None
+        %141 = OpExtInst %v2float %133 Floor %x_95
+               OpStore %tileID %141 None
+        %142 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_5
+      %x_101 = OpLoad %v2float %142 None
+        %146 = OpFDiv %v2float %147 %x_101
+               OpStore %sheetUnits %146 None
+        %148 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
+      %x_106 = OpLoad %float %148 None
+        %150 = OpFDiv %float %float_1 %x_106
+               OpStore %spriteUnits %150 None
+        %151 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_4
+      %x_111 = OpLoad %v2float %151 None
+        %154 = OpFDiv %v2float %147 %x_111
+               OpStore %stageUnits %154 None
                OpStore %i %int_0 None
-               OpBranch %159
-        %159 = OpLabel
-               OpLoopMerge %160 %158 None
-               OpBranch %157
-        %157 = OpLabel
+               OpBranch %158
+        %158 = OpLabel
+               OpLoopMerge %159 %157 None
+               OpBranch %156
+        %156 = OpLabel
       %x_122 = OpLoad %int %i None
-        %162 = OpSLessThan %bool %x_122 %int_2
-               OpSelectionMerge %165 None
-               OpBranchConditional %162 %165 %166
-        %166 = OpLabel
-               OpBranch %160
+        %161 = OpSLessThan %bool %x_122 %int_2
+               OpSelectionMerge %164 None
+               OpBranchConditional %161 %164 %165
         %165 = OpLabel
+               OpBranch %159
+        %164 = OpLabel
       %x_126 = OpLoad %int %i None
-               OpSelectionMerge %171 None
-               OpSwitch %x_126 %168 1 %169 0 %170
-        %169 = OpLabel
-      %x_150 = OpLoad %v2float %tileID None
-        %173 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_4
-      %x_154 = OpLoad %v2float %173 None
-        %175 = OpLoad %13 %tileMapsTexture1 None
-        %176 = OpLoad %16 %tileMapsSampler None
-        %177 = OpFAdd %v2float %x_150 %178
-        %179 = OpFDiv %v2float %177 %x_154
-        %180 = OpSampledImage %70 %175 %176
-      %x_156 = OpImageSampleImplicitLod %v4float %180 %179 Bias %float_0
-        %182 = OpCompositeExtract %float %x_156 0
-               OpStore %frameID_1 %182 None
-               OpBranch %171
-        %170 = OpLabel
-      %x_136 = OpLoad %v2float %tileID None
-        %184 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_4
-      %x_140 = OpLoad %v2float %184 None
-        %186 = OpLoad %13 %tileMapsTexture0 None
-        %187 = OpLoad %16 %tileMapsSampler None
-        %188 = OpFAdd %v2float %x_136 %178
-        %189 = OpFDiv %v2float %188 %x_140
-        %190 = OpSampledImage %70 %186 %187
-      %x_142 = OpImageSampleImplicitLod %v4float %190 %189 Bias %float_0
-        %192 = OpCompositeExtract %float %x_142 0
-               OpStore %frameID_1 %192 None
-               OpBranch %171
+               OpSelectionMerge %170 None
+               OpSwitch %x_126 %167 1 %168 0 %169
         %168 = OpLabel
-               OpBranch %171
-        %171 = OpLabel
+      %x_150 = OpLoad %v2float %tileID None
+        %172 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_4
+      %x_154 = OpLoad %v2float %172 None
+        %174 = OpLoad %13 %tileMapsTexture1 None
+        %175 = OpLoad %16 %tileMapsSampler None
+        %176 = OpFAdd %v2float %x_150 %177
+        %178 = OpFDiv %v2float %176 %x_154
+        %179 = OpSampledImage %69 %174 %175
+      %x_156 = OpImageSampleImplicitLod %v4float %179 %178 Bias %float_0
+        %181 = OpCompositeExtract %float %x_156 0
+               OpStore %frameID_1 %181 None
+               OpBranch %170
+        %169 = OpLabel
+      %x_136 = OpLoad %v2float %tileID None
+        %183 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_4
+      %x_140 = OpLoad %v2float %183 None
+        %185 = OpLoad %13 %tileMapsTexture0 None
+        %186 = OpLoad %16 %tileMapsSampler None
+        %187 = OpFAdd %v2float %x_136 %177
+        %188 = OpFDiv %v2float %187 %x_140
+        %189 = OpSampledImage %69 %185 %186
+      %x_142 = OpImageSampleImplicitLod %v4float %189 %188 Bias %float_0
+        %191 = OpCompositeExtract %float %x_142 0
+               OpStore %frameID_1 %191 None
+               OpBranch %170
+        %167 = OpLabel
+               OpBranch %170
+        %170 = OpLabel
       %x_166 = OpLoad %float %frameID_1 None
-        %194 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
-      %x_169 = OpLoad %float %194 None
-        %196 = OpLoad %13 %animationMapTexture None
-        %197 = OpLoad %16 %animationMapSampler None
-        %198 = OpFAdd %float %x_166 %float_0_5
-        %199 = OpFDiv %float %198 %x_169
-        %200 = OpCompositeConstruct %v2float %199 %float_0
-        %201 = OpSampledImage %70 %196 %197
-      %x_172 = OpImageSampleImplicitLod %v4float %201 %200 Bias %float_0
+        %193 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
+      %x_169 = OpLoad %float %193 None
+        %195 = OpLoad %13 %animationMapTexture None
+        %196 = OpLoad %16 %animationMapSampler None
+        %197 = OpFAdd %float %x_166 %float_0_5
+        %198 = OpFDiv %float %197 %x_169
+        %199 = OpCompositeConstruct %v2float %198 %float_0
+        %200 = OpSampledImage %69 %195 %196
+      %x_172 = OpImageSampleImplicitLod %v4float %200 %199 Bias %float_0
                OpStore %animationData %x_172 None
-        %203 = OpAccessChain %_ptr_Function_float %animationData %uint_1
-      %x_174 = OpLoad %float %203 None
-        %205 = OpFOrdGreaterThan %bool %x_174 %float_0
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %206
-        %207 = OpLabel
-        %208 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_0
-      %x_181 = OpLoad %float %208 None
-        %210 = OpAccessChain %_ptr_Function_float %animationData %uint_2
-      %x_184 = OpLoad %float %210 None
-        %213 = OpFMul %float %x_181 %x_184
-        %214 = OpFRem %float %213 %float_1
-               OpStore %mt %214 None
+        %202 = OpAccessChain %_ptr_Function_float %animationData %uint_1
+      %x_174 = OpLoad %float %202 None
+        %204 = OpFOrdGreaterThan %bool %x_174 %float_0
+               OpSelectionMerge %205 None
+               OpBranchConditional %204 %206 %205
+        %206 = OpLabel
+        %207 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_0
+      %x_181 = OpLoad %float %207 None
+        %209 = OpAccessChain %_ptr_Function_float %animationData %uint_2
+      %x_184 = OpLoad %float %209 None
+        %212 = OpFMul %float %x_181 %x_184
+        %213 = OpFRem %float %212 %float_1
+               OpStore %mt %213 None
                OpStore %f %float_0 None
-               OpBranch %217
-        %217 = OpLabel
-               OpLoopMerge %218 %216 None
-               OpBranch %215
-        %215 = OpLabel
-      %x_193 = OpLoad %float %f None
-        %220 = OpFOrdLessThan %bool %x_193 %float_8
-               OpSelectionMerge %222 None
-               OpBranchConditional %220 %222 %223
-        %223 = OpLabel
-               OpBranch %218
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_float %animationData %uint_1
-      %x_197 = OpLoad %float %224 None
-      %x_198 = OpLoad %float %mt None
-        %227 = OpFOrdGreaterThan %bool %x_197 %x_198
-               OpSelectionMerge %228 None
-               OpBranchConditional %227 %229 %228
-        %229 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_float %animationData %uint_0
-      %x_203 = OpLoad %float %230 None
-               OpStore %frameID_1 %x_203 None
-               OpBranch %218
-        %228 = OpLabel
-      %x_208 = OpLoad %float %frameID_1 None
-        %233 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
-      %x_211 = OpLoad %float %233 None
-      %x_214 = OpLoad %float %f None
-               OpStore %animationData %x_217 None
                OpBranch %216
         %216 = OpLabel
-      %x_218 = OpLoad %float %f None
-        %237 = OpFAdd %float %x_218 %float_1
-               OpStore %f %237 None
+               OpLoopMerge %217 %215 None
+               OpBranch %214
+        %214 = OpLabel
+      %x_193 = OpLoad %float %f None
+        %219 = OpFOrdLessThan %bool %x_193 %float_8
+               OpSelectionMerge %221 None
+               OpBranchConditional %219 %221 %222
+        %222 = OpLabel
                OpBranch %217
-        %218 = OpLabel
-               OpBranch %206
-        %206 = OpLabel
+        %221 = OpLabel
+        %223 = OpAccessChain %_ptr_Function_float %animationData %uint_1
+      %x_197 = OpLoad %float %223 None
+      %x_198 = OpLoad %float %mt None
+        %226 = OpFOrdGreaterThan %bool %x_197 %x_198
+               OpSelectionMerge %227 None
+               OpBranchConditional %226 %228 %227
+        %228 = OpLabel
+        %229 = OpAccessChain %_ptr_Function_float %animationData %uint_0
+      %x_203 = OpLoad %float %229 None
+               OpStore %frameID_1 %x_203 None
+               OpBranch %217
+        %227 = OpLabel
+      %x_208 = OpLoad %float %frameID_1 None
+        %232 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_7
+      %x_211 = OpLoad %float %232 None
+      %x_214 = OpLoad %float %f None
+               OpStore %animationData %x_217 None
+               OpBranch %215
+        %215 = OpLabel
+      %x_218 = OpLoad %float %f None
+        %236 = OpFAdd %float %x_218 %float_1
+               OpStore %f %236 None
+               OpBranch %216
+        %217 = OpLabel
+               OpBranch %205
+        %205 = OpLabel
       %x_222 = OpLoad %float %frameID_1 None
-        %239 = OpFAdd %float %x_222 %float_0_5
-               OpStore %param %239 None
+        %238 = OpFAdd %float %x_222 %float_0_5
+               OpStore %param %238 None
       %x_225 = OpFunctionCall %mat4v4float %getFrameData_f1_ %param
                OpStore %frameData %x_225 None
-        %241 = OpAccessChain %_ptr_Function_v4float %frameData %int_0
-      %x_228 = OpLoad %v4float %241 None
-        %243 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_5
-      %x_231 = OpLoad %v2float %243 None
-        %245 = OpCompositeExtract %float %x_228 3
-        %246 = OpCompositeExtract %float %x_228 2
-        %247 = OpCompositeConstruct %v2float %245 %246
-        %248 = OpFDiv %v2float %247 %x_231
-               OpStore %frameSize %248 None
-        %249 = OpAccessChain %_ptr_Function_v4float %frameData %int_0
-      %x_235 = OpLoad %v4float %249 None
+        %240 = OpAccessChain %_ptr_Function_v4float %frameData %int_0
+      %x_228 = OpLoad %v4float %240 None
+        %242 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0 %uint_5
+      %x_231 = OpLoad %v2float %242 None
+        %244 = OpCompositeExtract %float %x_228 3
+        %245 = OpCompositeExtract %float %x_228 2
+        %246 = OpCompositeConstruct %v2float %244 %245
+        %247 = OpFDiv %v2float %246 %x_231
+               OpStore %frameSize %247 None
+        %248 = OpAccessChain %_ptr_Function_v4float %frameData %int_0
+      %x_235 = OpLoad %v4float %248 None
       %x_237 = OpLoad %v2float %sheetUnits None
-        %252 = OpCompositeExtract %float %x_235 0
-        %253 = OpCompositeExtract %float %x_235 1
-        %254 = OpCompositeConstruct %v2float %252 %253
-        %255 = OpFMul %v2float %254 %x_237
-               OpStore %offset_1 %255 None
-        %256 = OpAccessChain %_ptr_Function_v4float %frameData %int_2
-      %x_241 = OpLoad %v4float %256 None
-        %258 = OpAccessChain %_ptr_Function_v4float %frameData %int_0
-      %x_244 = OpLoad %v4float %258 None
-        %260 = OpCompositeExtract %float %x_241 0
-        %261 = OpCompositeExtract %float %x_241 1
-        %262 = OpCompositeConstruct %v2float %260 %261
-        %263 = OpCompositeExtract %float %x_244 3
-        %264 = OpCompositeExtract %float %x_244 2
-        %265 = OpCompositeConstruct %v2float %263 %264
-        %266 = OpFDiv %v2float %262 %265
-               OpStore %ratio %266 None
-        %267 = OpAccessChain %_ptr_Function_v4float %frameData %int_2
-        %268 = OpAccessChain %_ptr_Function_float %267 %uint_2
-      %x_248 = OpLoad %float %268 None
-        %270 = OpFOrdEqual %bool %x_248 %float_1
-               OpSelectionMerge %271 None
-               OpBranchConditional %270 %272 %271
-        %272 = OpLabel
-      %x_252 = OpLoad %v2float %tileUV None
-        %274 = OpCompositeExtract %float %x_252 1
-        %275 = OpCompositeExtract %float %x_252 0
-        %276 = OpCompositeConstruct %v2float %274 %275
-               OpStore %tileUV %276 None
-               OpBranch %271
+        %251 = OpCompositeExtract %float %x_235 0
+        %252 = OpCompositeExtract %float %x_235 1
+        %253 = OpCompositeConstruct %v2float %251 %252
+        %254 = OpFMul %v2float %253 %x_237
+               OpStore %offset_1 %254 None
+        %255 = OpAccessChain %_ptr_Function_v4float %frameData %int_2
+      %x_241 = OpLoad %v4float %255 None
+        %257 = OpAccessChain %_ptr_Function_v4float %frameData %int_0
+      %x_244 = OpLoad %v4float %257 None
+        %259 = OpCompositeExtract %float %x_241 0
+        %260 = OpCompositeExtract %float %x_241 1
+        %261 = OpCompositeConstruct %v2float %259 %260
+        %262 = OpCompositeExtract %float %x_244 3
+        %263 = OpCompositeExtract %float %x_244 2
+        %264 = OpCompositeConstruct %v2float %262 %263
+        %265 = OpFDiv %v2float %261 %264
+               OpStore %ratio %265 None
+        %266 = OpAccessChain %_ptr_Function_v4float %frameData %int_2
+        %267 = OpAccessChain %_ptr_Function_float %266 %uint_2
+      %x_248 = OpLoad %float %267 None
+        %269 = OpFOrdEqual %bool %x_248 %float_1
+               OpSelectionMerge %270 None
+               OpBranchConditional %269 %271 %270
         %271 = OpLabel
+      %x_252 = OpLoad %v2float %tileUV None
+        %273 = OpCompositeExtract %float %x_252 1
+        %274 = OpCompositeExtract %float %x_252 0
+        %275 = OpCompositeConstruct %v2float %273 %274
+               OpStore %tileUV %275 None
+               OpBranch %270
+        %270 = OpLabel
       %x_254 = OpLoad %int %i None
-        %278 = OpIEqual %bool %x_254 %int_0
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
+        %277 = OpIEqual %bool %x_254 %int_0
+               OpSelectionMerge %278 None
+               OpBranchConditional %277 %279 %280
+        %279 = OpLabel
       %x_263 = OpLoad %v2float %tileUV None
       %x_264 = OpLoad %v2float %frameSize None
       %x_266 = OpLoad %v2float %offset_1 None
-        %285 = OpLoad %13 %spriteSheetTexture None
-        %286 = OpLoad %16 %spriteSheetSampler None
-        %287 = OpFMul %v2float %x_263 %x_264
-        %288 = OpFAdd %v2float %287 %x_266
-        %289 = OpSampledImage %70 %285 %286
-      %x_268 = OpImageSampleImplicitLod %v4float %289 %288 None
+        %284 = OpLoad %13 %spriteSheetTexture None
+        %285 = OpLoad %16 %spriteSheetSampler None
+        %286 = OpFMul %v2float %x_263 %x_264
+        %287 = OpFAdd %v2float %286 %x_266
+        %288 = OpSampledImage %69 %284 %285
+      %x_268 = OpImageSampleImplicitLod %v4float %288 %287 None
                OpStore %color %x_268 None
-               OpBranch %279
-        %281 = OpLabel
+               OpBranch %278
+        %280 = OpLabel
       %x_274 = OpLoad %v2float %tileUV None
       %x_275 = OpLoad %v2float %frameSize None
       %x_277 = OpLoad %v2float %offset_1 None
-        %294 = OpLoad %13 %spriteSheetTexture None
-        %295 = OpLoad %16 %spriteSheetSampler None
-        %296 = OpFMul %v2float %x_274 %x_275
-        %297 = OpFAdd %v2float %296 %x_277
-        %298 = OpSampledImage %70 %294 %295
-      %x_279 = OpImageSampleImplicitLod %v4float %298 %297 None
+        %293 = OpLoad %13 %spriteSheetTexture None
+        %294 = OpLoad %16 %spriteSheetSampler None
+        %295 = OpFMul %v2float %x_274 %x_275
+        %296 = OpFAdd %v2float %295 %x_277
+        %297 = OpSampledImage %69 %293 %294
+      %x_279 = OpImageSampleImplicitLod %v4float %297 %296 None
                OpStore %nc %x_279 None
-        %300 = OpAccessChain %_ptr_Function_float %color %uint_3
-      %x_283 = OpLoad %float %300 None
-        %303 = OpAccessChain %_ptr_Function_float %nc %uint_3
-      %x_285 = OpLoad %float %303 None
-        %305 = OpFAdd %float %x_283 %x_285
-        %306 = OpExtInst %float %134 FMin %305 %float_1
-               OpStore %alpha %306 None
+        %299 = OpAccessChain %_ptr_Function_float %color %uint_3
+      %x_283 = OpLoad %float %299 None
+        %302 = OpAccessChain %_ptr_Function_float %nc %uint_3
+      %x_285 = OpLoad %float %302 None
+        %304 = OpFAdd %float %x_283 %x_285
+        %305 = OpExtInst %float %133 FMin %304 %float_1
+               OpStore %alpha %305 None
       %x_290 = OpLoad %v4float %color None
       %x_292 = OpLoad %v4float %nc None
-        %309 = OpAccessChain %_ptr_Function_float %nc %uint_3
-      %x_295 = OpLoad %float %309 None
-        %311 = OpCompositeExtract %float %x_290 0
-        %312 = OpCompositeExtract %float %x_290 1
-        %313 = OpCompositeExtract %float %x_290 2
-        %314 = OpCompositeConstruct %v3float %311 %312 %313
-        %315 = OpCompositeExtract %float %x_292 0
-        %316 = OpCompositeExtract %float %x_292 1
-        %317 = OpCompositeExtract %float %x_292 2
-        %318 = OpCompositeConstruct %v3float %315 %316 %317
-        %319 = OpCompositeConstruct %v3float %x_295 %x_295 %x_295
-        %320 = OpExtInst %v3float %134 FMix %314 %318 %319
-               OpStore %mixed %320 None
+        %308 = OpAccessChain %_ptr_Function_float %nc %uint_3
+      %x_295 = OpLoad %float %308 None
+        %310 = OpCompositeExtract %float %x_290 0
+        %311 = OpCompositeExtract %float %x_290 1
+        %312 = OpCompositeExtract %float %x_290 2
+        %313 = OpCompositeConstruct %v3float %310 %311 %312
+        %314 = OpCompositeExtract %float %x_292 0
+        %315 = OpCompositeExtract %float %x_292 1
+        %316 = OpCompositeExtract %float %x_292 2
+        %317 = OpCompositeConstruct %v3float %314 %315 %316
+        %318 = OpCompositeConstruct %v3float %x_295 %x_295 %x_295
+        %319 = OpExtInst %v3float %133 FMix %313 %317 %318
+               OpStore %mixed %319 None
       %x_298 = OpLoad %v3float %mixed None
       %x_299 = OpLoad %float %alpha None
-        %323 = OpCompositeExtract %float %x_298 0
-        %324 = OpCompositeExtract %float %x_298 1
-        %325 = OpCompositeExtract %float %x_298 2
-        %326 = OpCompositeConstruct %v4float %323 %324 %325 %x_299
-               OpStore %color %326 None
-               OpBranch %279
-        %279 = OpLabel
-               OpBranch %158
-        %158 = OpLabel
+        %322 = OpCompositeExtract %float %x_298 0
+        %323 = OpCompositeExtract %float %x_298 1
+        %324 = OpCompositeExtract %float %x_298 2
+        %325 = OpCompositeConstruct %v4float %322 %323 %324 %x_299
+               OpStore %color %325 None
+               OpBranch %278
+        %278 = OpLabel
+               OpBranch %157
+        %157 = OpLabel
       %x_304 = OpLoad %int %i None
-        %328 = OpIAdd %int %x_304 %int_1
-               OpStore %i %328 None
-               OpBranch %159
-        %160 = OpLabel
-        %330 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0 %uint_8
-      %x_310 = OpLoad %v3float %330 None
+        %327 = OpIAdd %int %x_304 %int_1
+               OpStore %i %327 None
+               OpBranch %158
+        %159 = OpLabel
+        %329 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0 %uint_8
+      %x_310 = OpLoad %v3float %329 None
       %x_311 = OpLoad %v4float %color None
-        %335 = OpCompositeExtract %float %x_311 0
-        %336 = OpCompositeExtract %float %x_311 1
-        %337 = OpCompositeExtract %float %x_311 2
-        %338 = OpCompositeConstruct %v3float %335 %336 %337
-      %x_313 = OpFMul %v3float %338 %x_310
+        %334 = OpCompositeExtract %float %x_311 0
+        %335 = OpCompositeExtract %float %x_311 1
+        %336 = OpCompositeExtract %float %x_311 2
+        %337 = OpCompositeConstruct %v3float %334 %335 %336
+      %x_313 = OpFMul %v3float %337 %x_310
       %x_314 = OpLoad %v4float %color None
-        %341 = OpCompositeExtract %float %x_313 0
-        %342 = OpCompositeExtract %float %x_313 1
-        %343 = OpCompositeExtract %float %x_313 2
-        %344 = OpCompositeExtract %float %x_314 3
-        %345 = OpCompositeConstruct %v4float %341 %342 %343 %344
-               OpStore %color %345 None
+        %340 = OpCompositeExtract %float %x_313 0
+        %341 = OpCompositeExtract %float %x_313 1
+        %342 = OpCompositeExtract %float %x_313 2
+        %343 = OpCompositeExtract %float %x_314 3
+        %344 = OpCompositeConstruct %v4float %340 %341 %342 %343
+               OpStore %color %344 None
       %x_318 = OpLoad %v4float %color None
                OpStore %glFragColor %x_318 None
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %main_out None %355
+ %main_inner = OpFunction %main_out None %354
   %tUV_param = OpFunctionParameter %v2float
 %tileID_1_param = OpFunctionParameter %v2float
 %levelUnits_param = OpFunctionParameter %v2float
 %stageUnits_1_param = OpFunctionParameter %v2float
 %vPosition_param = OpFunctionParameter %v3float
   %vUV_param = OpFunctionParameter %v2float
-        %356 = OpLabel
+        %355 = OpLabel
                OpStore %tUV %tUV_param None
                OpStore %tileID_1 %tileID_1_param None
                OpStore %levelUnits %levelUnits_param None
                OpStore %stageUnits_1 %stageUnits_1_param None
                OpStore %vPosition %vPosition_param None
                OpStore %vUV %vUV_param None
-        %357 = OpFunctionCall %void %main_1
-        %358 = OpLoad %v4float %glFragColor None
-        %359 = OpCompositeConstruct %main_out %358
-               OpReturnValue %359
+        %356 = OpFunctionCall %void %main_1
+        %357 = OpLoad %v4float %glFragColor None
+        %358 = OpCompositeConstruct %main_out %357
+               OpReturnValue %358
                OpFunctionEnd
-       %main = OpFunction %void None %104
-        %361 = OpLabel
-        %362 = OpLoad %v2float %main_loc2_Input None
-        %363 = OpLoad %v2float %main_loc5_Input None
-        %364 = OpLoad %v2float %main_loc4_Input None
-        %365 = OpLoad %v2float %main_loc3_Input None
-        %366 = OpLoad %v3float %main_loc0_Input None
-        %367 = OpLoad %v2float %main_loc1_Input None
-        %368 = OpFunctionCall %main_out %main_inner %362 %363 %364 %365 %366 %367
-        %369 = OpCompositeExtract %v4float %368 0
-               OpStore %main_loc0_Output %369 None
+       %main = OpFunction %void None %103
+        %360 = OpLabel
+        %361 = OpLoad %v2float %main_loc2_Input None
+        %362 = OpLoad %v2float %main_loc5_Input None
+        %363 = OpLoad %v2float %main_loc4_Input None
+        %364 = OpLoad %v2float %main_loc3_Input None
+        %365 = OpLoad %v3float %main_loc0_Input None
+        %366 = OpLoad %v2float %main_loc1_Input None
+        %367 = OpFunctionCall %main_out %main_inner %361 %362 %363 %364 %365 %366
+        %368 = OpCompositeExtract %v4float %367 0
+               OpStore %main_loc0_Output %368 None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/949.wgsl.expected.spvasm b/test/tint/bug/tint/949.wgsl.expected.spvasm
index 2632ab3..71af069 100644
--- a/test/tint/bug/tint/949.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/949.wgsl.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 640
+; Bound: 624
 ; Schema: 0
                OpCapability Shader
-         %89 = OpExtInstImport "GLSL.std.450"
+         %85 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Fragment %main "main" %main_loc1_Input %main_loc0_Input %main_front_facing_Input %main_loc3_Input %main_loc2_Input %main_loc0_Output
                OpExecutionMode %main OriginUpperLeft
@@ -439,31 +439,31 @@
      %uint_0 = OpConstant %uint 0
      %uint_1 = OpConstant %uint 1
 %_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-        %152 = OpTypeFunction %mat3v3float %_ptr_Function_mat3v3float
-        %158 = OpConstantNull %mat3v3float
+        %148 = OpTypeFunction %mat3v3float %_ptr_Function_mat3v3float
+        %154 = OpConstantNull %mat3v3float
         %int = OpTypeInt 32 1
       %int_0 = OpConstant %int 0
       %int_1 = OpConstant %int 1
       %int_2 = OpConstant %int 2
      %uint_2 = OpConstant %uint 2
-        %209 = OpTypeFunction %v3float %_ptr_Function_mat3v3float %_ptr_Function_v3float %_ptr_Function_float
+        %205 = OpTypeFunction %v3float %_ptr_Function_mat3v3float %_ptr_Function_v3float %_ptr_Function_float
     %float_2 = OpConstant %float 2
     %float_1 = OpConstant %float 1
-        %233 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+        %224 = OpConstantComposite %v3float %float_1 %float_1 %float_1
 %lightingInfo = OpTypeStruct %v3float %v3float
 %_ptr_Function_v4float = OpTypePointer Function %v4float
-        %247 = OpTypeFunction %lightingInfo %_ptr_Function_v3float %_ptr_Function_v3float %_ptr_Function_v4float %_ptr_Function_v3float %_ptr_Function_v3float %_ptr_Function_v3float %_ptr_Function_float
+        %238 = OpTypeFunction %lightingInfo %_ptr_Function_v3float %_ptr_Function_v3float %_ptr_Function_v4float %_ptr_Function_v3float %_ptr_Function_v3float %_ptr_Function_v3float %_ptr_Function_float
 %_ptr_Function_lightingInfo = OpTypePointer Function %lightingInfo
-        %259 = OpConstantNull %lightingInfo
+        %243 = OpConstantNull %lightingInfo
   %float_0_5 = OpConstant %float 0.5
     %float_0 = OpConstant %float 0
        %void = OpTypeVoid
-        %302 = OpTypeFunction %void
+        %286 = OpTypeFunction %void
 %_ptr_Function_int = OpTypePointer Function %int
-        %331 = OpConstantNull %int
+        %315 = OpConstantNull %int
   %float_100 = OpConstant %float 100
-        %360 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5
-        %365 = OpTypeSampledImage %11
+        %344 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5
+        %349 = OpTypeSampledImage %11
 %_ptr_Uniform_float = OpTypePointer Uniform %float
      %uint_6 = OpConstant %uint 6
 %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
@@ -477,7 +477,7 @@
 %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
      %uint_3 = OpConstant %uint 3
    %main_out = OpTypeStruct %v4float
-        %626 = OpTypeFunction %main_out %v2float %v4float %bool %v2float %v4float
+        %610 = OpTypeFunction %main_out %v2float %v4float %bool %v2float %v4float
 %cotangent_frame_vf3_vf3_vf2_vf2_ = OpFunction %mat3v3float None %62
 %normal_1_root = OpFunctionParameter %_ptr_Function_v3float
      %p_root = OpFunctionParameter %_ptr_Function_v3float
@@ -493,181 +493,172 @@
     %tangent = OpVariable %_ptr_Function_v3float Function %8
   %bitangent = OpVariable %_ptr_Function_v3float Function %8
      %invmax = OpVariable %_ptr_Function_float Function %4
-         %64 = OpAccessChain %_ptr_Function_v3float %normal_1_root
-         %65 = OpAccessChain %_ptr_Function_v3float %p_root
-         %66 = OpAccessChain %_ptr_Function_v2float %uv_root
-         %67 = OpAccessChain %_ptr_Function_v2float %tangentSpaceParams_root
-      %x_133 = OpLoad %v3float %65 None
-         %79 = OpDPdx %v3float %x_133
-               OpStore %dp1 %79 None
-      %x_136 = OpLoad %v3float %65 None
-         %81 = OpDPdy %v3float %x_136
-               OpStore %dp2 %81 None
-      %x_139 = OpLoad %v2float %66 None
-         %83 = OpDPdx %v2float %x_139
-               OpStore %duv1 %83 None
-      %x_142 = OpLoad %v2float %66 None
-         %85 = OpDPdy %v2float %x_142
-               OpStore %duv2 %85 None
+      %x_133 = OpLoad %v3float %p_root None
+         %75 = OpDPdx %v3float %x_133
+               OpStore %dp1 %75 None
+      %x_136 = OpLoad %v3float %p_root None
+         %77 = OpDPdy %v3float %x_136
+               OpStore %dp2 %77 None
+      %x_139 = OpLoad %v2float %uv_root None
+         %79 = OpDPdx %v2float %x_139
+               OpStore %duv1 %79 None
+      %x_142 = OpLoad %v2float %uv_root None
+         %81 = OpDPdy %v2float %x_142
+               OpStore %duv2 %81 None
       %x_145 = OpLoad %v3float %dp2 None
-      %x_146 = OpLoad %v3float %64 None
-         %88 = OpExtInst %v3float %89 Cross %x_145 %x_146
-               OpStore %dp2perp %88 None
-      %x_149 = OpLoad %v3float %64 None
+      %x_146 = OpLoad %v3float %normal_1_root None
+         %84 = OpExtInst %v3float %85 Cross %x_145 %x_146
+               OpStore %dp2perp %84 None
+      %x_149 = OpLoad %v3float %normal_1_root None
       %x_150 = OpLoad %v3float %dp1 None
-         %92 = OpExtInst %v3float %89 Cross %x_149 %x_150
-               OpStore %dp1perp %92 None
+         %88 = OpExtInst %v3float %85 Cross %x_149 %x_150
+               OpStore %dp1perp %88 None
       %x_153 = OpLoad %v3float %dp2perp None
-         %94 = OpAccessChain %_ptr_Function_float %duv1 %uint_0
-      %x_155 = OpLoad %float %94 None
+         %90 = OpAccessChain %_ptr_Function_float %duv1 %uint_0
+      %x_155 = OpLoad %float %90 None
       %x_157 = OpLoad %v3float %dp1perp None
-         %98 = OpAccessChain %_ptr_Function_float %duv2 %uint_0
-      %x_159 = OpLoad %float %98 None
-        %100 = OpVectorTimesScalar %v3float %x_153 %x_155
-        %101 = OpVectorTimesScalar %v3float %x_157 %x_159
-        %102 = OpFAdd %v3float %100 %101
-               OpStore %tangent %102 None
+         %94 = OpAccessChain %_ptr_Function_float %duv2 %uint_0
+      %x_159 = OpLoad %float %94 None
+         %96 = OpVectorTimesScalar %v3float %x_153 %x_155
+         %97 = OpVectorTimesScalar %v3float %x_157 %x_159
+         %98 = OpFAdd %v3float %96 %97
+               OpStore %tangent %98 None
       %x_163 = OpLoad %v3float %dp2perp None
-        %104 = OpAccessChain %_ptr_Function_float %duv1 %uint_1
-      %x_165 = OpLoad %float %104 None
+        %100 = OpAccessChain %_ptr_Function_float %duv1 %uint_1
+      %x_165 = OpLoad %float %100 None
       %x_167 = OpLoad %v3float %dp1perp None
-        %108 = OpAccessChain %_ptr_Function_float %duv2 %uint_1
-      %x_169 = OpLoad %float %108 None
-        %110 = OpVectorTimesScalar %v3float %x_163 %x_165
-        %111 = OpVectorTimesScalar %v3float %x_167 %x_169
-        %112 = OpFAdd %v3float %110 %111
-               OpStore %bitangent %112 None
-        %113 = OpAccessChain %_ptr_Function_float %67 %uint_0
-      %x_173 = OpLoad %float %113 None
+        %104 = OpAccessChain %_ptr_Function_float %duv2 %uint_1
+      %x_169 = OpLoad %float %104 None
+        %106 = OpVectorTimesScalar %v3float %x_163 %x_165
+        %107 = OpVectorTimesScalar %v3float %x_167 %x_169
+        %108 = OpFAdd %v3float %106 %107
+               OpStore %bitangent %108 None
+        %109 = OpAccessChain %_ptr_Function_float %tangentSpaceParams_root %uint_0
+      %x_173 = OpLoad %float %109 None
       %x_174 = OpLoad %v3float %tangent None
-        %116 = OpVectorTimesScalar %v3float %x_174 %x_173
-               OpStore %tangent %116 None
-        %117 = OpAccessChain %_ptr_Function_float %67 %uint_1
-      %x_177 = OpLoad %float %117 None
+        %112 = OpVectorTimesScalar %v3float %x_174 %x_173
+               OpStore %tangent %112 None
+        %113 = OpAccessChain %_ptr_Function_float %tangentSpaceParams_root %uint_1
+      %x_177 = OpLoad %float %113 None
       %x_178 = OpLoad %v3float %bitangent None
-        %120 = OpVectorTimesScalar %v3float %x_178 %x_177
-               OpStore %bitangent %120 None
+        %116 = OpVectorTimesScalar %v3float %x_178 %x_177
+               OpStore %bitangent %116 None
       %x_181 = OpLoad %v3float %tangent None
       %x_182 = OpLoad %v3float %tangent None
       %x_184 = OpLoad %v3float %bitangent None
       %x_185 = OpLoad %v3float %bitangent None
-        %125 = OpDot %float %x_181 %x_182
-        %126 = OpDot %float %x_184 %x_185
-        %127 = OpExtInst %float %89 FMax %125 %126
-        %128 = OpExtInst %float %89 InverseSqrt %127
-               OpStore %invmax %128 None
+        %121 = OpDot %float %x_181 %x_182
+        %122 = OpDot %float %x_184 %x_185
+        %123 = OpExtInst %float %85 FMax %121 %122
+        %124 = OpExtInst %float %85 InverseSqrt %123
+               OpStore %invmax %124 None
       %x_189 = OpLoad %v3float %tangent None
       %x_190 = OpLoad %float %invmax None
       %x_191 = OpVectorTimesScalar %v3float %x_189 %x_190
       %x_192 = OpLoad %v3float %bitangent None
       %x_193 = OpLoad %float %invmax None
       %x_194 = OpVectorTimesScalar %v3float %x_192 %x_193
-      %x_195 = OpLoad %v3float %64 None
-        %136 = OpCompositeExtract %float %x_191 0
-        %137 = OpCompositeExtract %float %x_191 1
-        %138 = OpCompositeExtract %float %x_191 2
+      %x_195 = OpLoad %v3float %normal_1_root None
+        %132 = OpCompositeExtract %float %x_191 0
+        %133 = OpCompositeExtract %float %x_191 1
+        %134 = OpCompositeExtract %float %x_191 2
+        %135 = OpCompositeConstruct %v3float %132 %133 %134
+        %136 = OpCompositeExtract %float %x_194 0
+        %137 = OpCompositeExtract %float %x_194 1
+        %138 = OpCompositeExtract %float %x_194 2
         %139 = OpCompositeConstruct %v3float %136 %137 %138
-        %140 = OpCompositeExtract %float %x_194 0
-        %141 = OpCompositeExtract %float %x_194 1
-        %142 = OpCompositeExtract %float %x_194 2
+        %140 = OpCompositeExtract %float %x_195 0
+        %141 = OpCompositeExtract %float %x_195 1
+        %142 = OpCompositeExtract %float %x_195 2
         %143 = OpCompositeConstruct %v3float %140 %141 %142
-        %144 = OpCompositeExtract %float %x_195 0
-        %145 = OpCompositeExtract %float %x_195 1
-        %146 = OpCompositeExtract %float %x_195 2
-        %147 = OpCompositeConstruct %v3float %144 %145 %146
-        %148 = OpCompositeConstruct %mat3v3float %139 %143 %147
-               OpReturnValue %148
+        %144 = OpCompositeConstruct %mat3v3float %135 %139 %143
+               OpReturnValue %144
                OpFunctionEnd
-%transposeMat3_mf33_ = OpFunction %mat3v3float None %152
+%transposeMat3_mf33_ = OpFunction %mat3v3float None %148
 %inMatrix_root = OpFunctionParameter %_ptr_Function_mat3v3float
-        %153 = OpLabel
+        %149 = OpLabel
          %i0 = OpVariable %_ptr_Function_v3float Function %8
          %i1 = OpVariable %_ptr_Function_v3float Function %8
          %i2 = OpVariable %_ptr_Function_v3float Function %8
-  %outMatrix = OpVariable %_ptr_Function_mat3v3float Function %158
-        %159 = OpAccessChain %_ptr_Function_v3float %inMatrix_root %int_0
-       %x_60 = OpLoad %v3float %159 None
+  %outMatrix = OpVariable %_ptr_Function_mat3v3float Function %154
+        %155 = OpAccessChain %_ptr_Function_v3float %inMatrix_root %int_0
+       %x_60 = OpLoad %v3float %155 None
                OpStore %i0 %x_60 None
-        %163 = OpAccessChain %_ptr_Function_v3float %inMatrix_root %int_1
-       %x_64 = OpLoad %v3float %163 None
+        %159 = OpAccessChain %_ptr_Function_v3float %inMatrix_root %int_1
+       %x_64 = OpLoad %v3float %159 None
                OpStore %i1 %x_64 None
-        %166 = OpAccessChain %_ptr_Function_v3float %inMatrix_root %int_2
-       %x_68 = OpLoad %v3float %166 None
+        %162 = OpAccessChain %_ptr_Function_v3float %inMatrix_root %int_2
+       %x_68 = OpLoad %v3float %162 None
                OpStore %i2 %x_68 None
-        %169 = OpAccessChain %_ptr_Function_float %i0 %uint_0
-       %x_73 = OpLoad %float %169 None
-        %171 = OpAccessChain %_ptr_Function_float %i1 %uint_0
-       %x_75 = OpLoad %float %171 None
-        %173 = OpAccessChain %_ptr_Function_float %i2 %uint_0
-       %x_77 = OpLoad %float %173 None
+        %165 = OpAccessChain %_ptr_Function_float %i0 %uint_0
+       %x_73 = OpLoad %float %165 None
+        %167 = OpAccessChain %_ptr_Function_float %i1 %uint_0
+       %x_75 = OpLoad %float %167 None
+        %169 = OpAccessChain %_ptr_Function_float %i2 %uint_0
+       %x_77 = OpLoad %float %169 None
        %x_78 = OpCompositeConstruct %v3float %x_73 %x_75 %x_77
-        %176 = OpAccessChain %_ptr_Function_float %i0 %uint_1
-       %x_81 = OpLoad %float %176 None
-        %178 = OpAccessChain %_ptr_Function_float %i1 %uint_1
-       %x_83 = OpLoad %float %178 None
-        %180 = OpAccessChain %_ptr_Function_float %i2 %uint_1
-       %x_85 = OpLoad %float %180 None
+        %172 = OpAccessChain %_ptr_Function_float %i0 %uint_1
+       %x_81 = OpLoad %float %172 None
+        %174 = OpAccessChain %_ptr_Function_float %i1 %uint_1
+       %x_83 = OpLoad %float %174 None
+        %176 = OpAccessChain %_ptr_Function_float %i2 %uint_1
+       %x_85 = OpLoad %float %176 None
        %x_86 = OpCompositeConstruct %v3float %x_81 %x_83 %x_85
-        %183 = OpAccessChain %_ptr_Function_float %i0 %uint_2
-       %x_89 = OpLoad %float %183 None
-        %186 = OpAccessChain %_ptr_Function_float %i1 %uint_2
-       %x_91 = OpLoad %float %186 None
-        %188 = OpAccessChain %_ptr_Function_float %i2 %uint_2
-       %x_93 = OpLoad %float %188 None
+        %179 = OpAccessChain %_ptr_Function_float %i0 %uint_2
+       %x_89 = OpLoad %float %179 None
+        %182 = OpAccessChain %_ptr_Function_float %i1 %uint_2
+       %x_91 = OpLoad %float %182 None
+        %184 = OpAccessChain %_ptr_Function_float %i2 %uint_2
+       %x_93 = OpLoad %float %184 None
        %x_94 = OpCompositeConstruct %v3float %x_89 %x_91 %x_93
-        %191 = OpCompositeExtract %float %x_78 0
-        %192 = OpCompositeExtract %float %x_78 1
-        %193 = OpCompositeExtract %float %x_78 2
+        %187 = OpCompositeExtract %float %x_78 0
+        %188 = OpCompositeExtract %float %x_78 1
+        %189 = OpCompositeExtract %float %x_78 2
+        %190 = OpCompositeConstruct %v3float %187 %188 %189
+        %191 = OpCompositeExtract %float %x_86 0
+        %192 = OpCompositeExtract %float %x_86 1
+        %193 = OpCompositeExtract %float %x_86 2
         %194 = OpCompositeConstruct %v3float %191 %192 %193
-        %195 = OpCompositeExtract %float %x_86 0
-        %196 = OpCompositeExtract %float %x_86 1
-        %197 = OpCompositeExtract %float %x_86 2
+        %195 = OpCompositeExtract %float %x_94 0
+        %196 = OpCompositeExtract %float %x_94 1
+        %197 = OpCompositeExtract %float %x_94 2
         %198 = OpCompositeConstruct %v3float %195 %196 %197
-        %199 = OpCompositeExtract %float %x_94 0
-        %200 = OpCompositeExtract %float %x_94 1
-        %201 = OpCompositeExtract %float %x_94 2
-        %202 = OpCompositeConstruct %v3float %199 %200 %201
-        %203 = OpCompositeConstruct %mat3v3float %194 %198 %202
-               OpStore %outMatrix %203 None
+        %199 = OpCompositeConstruct %mat3v3float %190 %194 %198
+               OpStore %outMatrix %199 None
       %x_110 = OpLoad %mat3v3float %outMatrix None
                OpReturnValue %x_110
                OpFunctionEnd
-%perturbNormalBase_mf33_vf3_f1_ = OpFunction %v3float None %209
+%perturbNormalBase_mf33_vf3_f1_ = OpFunction %v3float None %205
 %cotangentFrame_root = OpFunctionParameter %_ptr_Function_mat3v3float
 %normal_root = OpFunctionParameter %_ptr_Function_v3float
  %scale_root = OpFunctionParameter %_ptr_Function_float
-        %210 = OpLabel
-        %211 = OpAccessChain %_ptr_Function_mat3v3float %cotangentFrame_root
-        %212 = OpAccessChain %_ptr_Function_v3float %normal_root
-      %x_113 = OpLoad %mat3v3float %211 None
-      %x_114 = OpLoad %v3float %212 None
-        %215 = OpMatrixTimesVector %v3float %x_113 %x_114
-        %216 = OpExtInst %v3float %89 Normalize %215
-               OpReturnValue %216
+        %206 = OpLabel
+      %x_113 = OpLoad %mat3v3float %cotangentFrame_root None
+      %x_114 = OpLoad %v3float %normal_root None
+        %209 = OpMatrixTimesVector %v3float %x_113 %x_114
+        %210 = OpExtInst %v3float %85 Normalize %209
+               OpReturnValue %210
                OpFunctionEnd
-%perturbNormal_mf33_vf3_f1_ = OpFunction %v3float None %209
+%perturbNormal_mf33_vf3_f1_ = OpFunction %v3float None %205
 %cotangentFrame_1_root = OpFunctionParameter %_ptr_Function_mat3v3float
 %textureSample_root = OpFunctionParameter %_ptr_Function_v3float
 %scale_1_root = OpFunctionParameter %_ptr_Function_float
-        %221 = OpLabel
-      %param = OpVariable %_ptr_Function_mat3v3float Function %158
+        %215 = OpLabel
+      %param = OpVariable %_ptr_Function_mat3v3float Function %154
     %param_1 = OpVariable %_ptr_Function_v3float Function %8
     %param_2 = OpVariable %_ptr_Function_float Function %4
-        %222 = OpAccessChain %_ptr_Function_mat3v3float %cotangentFrame_1_root
-        %223 = OpAccessChain %_ptr_Function_v3float %textureSample_root
-        %224 = OpAccessChain %_ptr_Function_float %scale_1_root
-      %x_119 = OpLoad %v3float %223 None
-      %x_125 = OpLoad %mat3v3float %222 None
+      %x_119 = OpLoad %v3float %textureSample_root None
+      %x_125 = OpLoad %mat3v3float %cotangentFrame_1_root None
                OpStore %param %x_125 None
-        %230 = OpVectorTimesScalar %v3float %x_119 %float_2
-        %232 = OpFSub %v3float %230 %233
-               OpStore %param_1 %232 None
-      %x_128 = OpLoad %float %224 None
+        %221 = OpVectorTimesScalar %v3float %x_119 %float_2
+        %223 = OpFSub %v3float %221 %224
+               OpStore %param_1 %223 None
+      %x_128 = OpLoad %float %scale_1_root None
                OpStore %param_2 %x_128 None
       %x_129 = OpFunctionCall %v3float %perturbNormalBase_mf33_vf3_f1_ %param %param_1 %param_2
                OpReturnValue %x_129
                OpFunctionEnd
-%computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_ = OpFunction %lightingInfo None %247
+%computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_ = OpFunction %lightingInfo None %238
 %viewDirectionW_root = OpFunctionParameter %_ptr_Function_v3float
 %vNormal_root = OpFunctionParameter %_ptr_Function_v3float
 %lightData_root = OpFunctionParameter %_ptr_Function_v4float
@@ -675,64 +666,57 @@
 %specularColor_root = OpFunctionParameter %_ptr_Function_v3float
 %groundColor_root = OpFunctionParameter %_ptr_Function_v3float
 %glossiness_root = OpFunctionParameter %_ptr_Function_float
-        %248 = OpLabel
+        %239 = OpLabel
         %ndl = OpVariable %_ptr_Function_float Function %4
-     %result = OpVariable %_ptr_Function_lightingInfo Function %259
+     %result = OpVariable %_ptr_Function_lightingInfo Function %243
      %angleW = OpVariable %_ptr_Function_v3float Function %8
    %specComp = OpVariable %_ptr_Function_float Function %4
-        %249 = OpAccessChain %_ptr_Function_v3float %viewDirectionW_root
-        %250 = OpAccessChain %_ptr_Function_v3float %vNormal_root
-        %251 = OpAccessChain %_ptr_Function_v4float %lightData_root
-        %252 = OpAccessChain %_ptr_Function_v3float %diffuseColor_root
-        %253 = OpAccessChain %_ptr_Function_v3float %specularColor_root
-        %254 = OpAccessChain %_ptr_Function_v3float %groundColor_root
-        %255 = OpAccessChain %_ptr_Function_float %glossiness_root
-      %x_212 = OpLoad %v3float %250 None
-      %x_213 = OpLoad %v4float %251 None
-        %264 = OpCompositeExtract %float %x_213 0
-        %265 = OpCompositeExtract %float %x_213 1
-        %266 = OpCompositeExtract %float %x_213 2
-        %267 = OpCompositeConstruct %v3float %264 %265 %266
-        %268 = OpDot %float %x_212 %267
-        %269 = OpFMul %float %268 %float_0_5
-        %271 = OpFAdd %float %269 %float_0_5
-               OpStore %ndl %271 None
-      %x_220 = OpLoad %v3float %254 None
-      %x_221 = OpLoad %v3float %252 None
+      %x_212 = OpLoad %v3float %vNormal_root None
+      %x_213 = OpLoad %v4float %lightData_root None
+        %248 = OpCompositeExtract %float %x_213 0
+        %249 = OpCompositeExtract %float %x_213 1
+        %250 = OpCompositeExtract %float %x_213 2
+        %251 = OpCompositeConstruct %v3float %248 %249 %250
+        %252 = OpDot %float %x_212 %251
+        %253 = OpFMul %float %252 %float_0_5
+        %255 = OpFAdd %float %253 %float_0_5
+               OpStore %ndl %255 None
+      %x_220 = OpLoad %v3float %groundColor_root None
+      %x_221 = OpLoad %v3float %diffuseColor_root None
       %x_222 = OpLoad %float %ndl None
-        %275 = OpAccessChain %_ptr_Function_v3float %result %uint_0
-        %276 = OpCompositeConstruct %v3float %x_222 %x_222 %x_222
-        %277 = OpExtInst %v3float %89 FMix %x_220 %x_221 %276
-               OpStore %275 %277 None
-      %x_227 = OpLoad %v3float %249 None
-      %x_228 = OpLoad %v4float %251 None
-        %280 = OpCompositeExtract %float %x_228 0
-        %281 = OpCompositeExtract %float %x_228 1
-        %282 = OpCompositeExtract %float %x_228 2
-        %283 = OpCompositeConstruct %v3float %280 %281 %282
-        %284 = OpFAdd %v3float %x_227 %283
-        %285 = OpExtInst %v3float %89 Normalize %284
-               OpStore %angleW %285 None
-      %x_233 = OpLoad %v3float %250 None
+        %259 = OpAccessChain %_ptr_Function_v3float %result %uint_0
+        %260 = OpCompositeConstruct %v3float %x_222 %x_222 %x_222
+        %261 = OpExtInst %v3float %85 FMix %x_220 %x_221 %260
+               OpStore %259 %261 None
+      %x_227 = OpLoad %v3float %viewDirectionW_root None
+      %x_228 = OpLoad %v4float %lightData_root None
+        %264 = OpCompositeExtract %float %x_228 0
+        %265 = OpCompositeExtract %float %x_228 1
+        %266 = OpCompositeExtract %float %x_228 2
+        %267 = OpCompositeConstruct %v3float %264 %265 %266
+        %268 = OpFAdd %v3float %x_227 %267
+        %269 = OpExtInst %v3float %85 Normalize %268
+               OpStore %angleW %269 None
+      %x_233 = OpLoad %v3float %vNormal_root None
       %x_234 = OpLoad %v3float %angleW None
-        %288 = OpDot %float %x_233 %x_234
-        %289 = OpExtInst %float %89 FMax %float_0 %288
-               OpStore %specComp %289 None
+        %272 = OpDot %float %x_233 %x_234
+        %273 = OpExtInst %float %85 FMax %float_0 %272
+               OpStore %specComp %273 None
       %x_237 = OpLoad %float %specComp None
-      %x_238 = OpLoad %float %255 None
-        %293 = OpExtInst %float %89 FMax %float_1 %x_238
-        %294 = OpExtInst %float %89 Pow %x_237 %293
-               OpStore %specComp %294 None
+      %x_238 = OpLoad %float %glossiness_root None
+        %277 = OpExtInst %float %85 FMax %float_1 %x_238
+        %278 = OpExtInst %float %85 Pow %x_237 %277
+               OpStore %specComp %278 None
       %x_241 = OpLoad %float %specComp None
-      %x_242 = OpLoad %v3float %253 None
-        %297 = OpAccessChain %_ptr_Function_v3float %result %uint_1
-        %298 = OpVectorTimesScalar %v3float %x_242 %x_241
-               OpStore %297 %298 None
+      %x_242 = OpLoad %v3float %specularColor_root None
+        %281 = OpAccessChain %_ptr_Function_v3float %result %uint_1
+        %282 = OpVectorTimesScalar %v3float %x_242 %x_241
+               OpStore %281 %282 None
       %x_245 = OpLoad %lightingInfo %result None
                OpReturnValue %x_245
                OpFunctionEnd
-     %main_1 = OpFunction %void None %302
-        %303 = OpLabel
+     %main_1 = OpFunction %void None %286
+        %287 = OpLabel
 %tempTextureRead = OpVariable %_ptr_Function_v4float Function %x_397
         %rgb = OpVariable %_ptr_Function_v3float Function %8
     %output5 = OpVariable %_ptr_Function_v3float Function %8
@@ -741,13 +725,13 @@
 %normalScale = OpVariable %_ptr_Function_float Function %4
       %TBNUV = OpVariable %_ptr_Function_v2float Function %18
       %x_299 = OpVariable %_ptr_Function_v2float Function %18
-        %TBN = OpVariable %_ptr_Function_mat3v3float Function %158
+        %TBN = OpVariable %_ptr_Function_mat3v3float Function %154
     %param_3 = OpVariable %_ptr_Function_v3float Function %8
     %param_4 = OpVariable %_ptr_Function_v3float Function %8
     %param_5 = OpVariable %_ptr_Function_v2float Function %18
     %param_6 = OpVariable %_ptr_Function_v2float Function %18
-     %invTBN = OpVariable %_ptr_Function_mat3v3float Function %158
-    %param_7 = OpVariable %_ptr_Function_mat3v3float Function %158
+     %invTBN = OpVariable %_ptr_Function_mat3v3float Function %154
+    %param_7 = OpVariable %_ptr_Function_mat3v3float Function %154
 %parallaxLimit = OpVariable %_ptr_Function_float Function %4
  %vOffsetDir = OpVariable %_ptr_Function_v2float Function %18
  %vMaxOffset = OpVariable %_ptr_Function_v2float Function %18
@@ -758,12 +742,12 @@
 %vLastOffset = OpVariable %_ptr_Function_v2float Function %18
 %lastSampledHeight = OpVariable %_ptr_Function_float Function %4
 %currSampledHeight = OpVariable %_ptr_Function_float Function %4
-          %i = OpVariable %_ptr_Function_int Function %331
+          %i = OpVariable %_ptr_Function_int Function %315
      %delta1 = OpVariable %_ptr_Function_float Function %4
      %delta2 = OpVariable %_ptr_Function_float Function %4
       %ratio = OpVariable %_ptr_Function_float Function %4
 %parallaxOcclusion_0 = OpVariable %_ptr_Function_v2float Function %18
-    %param_8 = OpVariable %_ptr_Function_mat3v3float Function %158
+    %param_8 = OpVariable %_ptr_Function_mat3v3float Function %154
     %param_9 = OpVariable %_ptr_Function_v3float Function %8
    %param_10 = OpVariable %_ptr_Function_float Function %4
     %output6 = OpVariable %_ptr_Function_v2float Function %18
@@ -775,7 +759,7 @@
 %diffuseBase = OpVariable %_ptr_Function_v3float Function %8
 %specularBase = OpVariable %_ptr_Function_v3float Function %8
     %normalW = OpVariable %_ptr_Function_v3float Function %8
-       %info = OpVariable %_ptr_Function_lightingInfo Function %259
+       %info = OpVariable %_ptr_Function_lightingInfo Function %243
    %param_11 = OpVariable %_ptr_Function_v3float Function %8
    %param_12 = OpVariable %_ptr_Function_v3float Function %8
    %param_13 = OpVariable %_ptr_Function_v4float Function %x_397
@@ -787,71 +771,71 @@
 %specularOutput = OpVariable %_ptr_Function_v3float Function %8
     %output3 = OpVariable %_ptr_Function_v3float Function %8
                OpStore %u_Float %float_100 None
-               OpStore %u_Color %360 None
+               OpStore %u_Color %344 None
       %x_261 = OpLoad %v2float %vMainuv None
-        %362 = OpLoad %11 %TextureSamplerTexture None
-        %363 = OpLoad %14 %TextureSamplerSampler None
-        %364 = OpSampledImage %365 %362 %363
-      %x_262 = OpImageSampleImplicitLod %v4float %364 %x_261 None
+        %346 = OpLoad %11 %TextureSamplerTexture None
+        %347 = OpLoad %14 %TextureSamplerSampler None
+        %348 = OpSampledImage %349 %346 %347
+      %x_262 = OpImageSampleImplicitLod %v4float %348 %x_261 None
                OpStore %tempTextureRead %x_262 None
       %x_264 = OpLoad %v4float %tempTextureRead None
-        %368 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_6
-      %x_273 = OpLoad %float %368 None
-        %372 = OpCompositeExtract %float %x_264 0
-        %373 = OpCompositeExtract %float %x_264 1
-        %374 = OpCompositeExtract %float %x_264 2
-        %375 = OpCompositeConstruct %v3float %372 %373 %374
-        %376 = OpVectorTimesScalar %v3float %375 %x_273
-               OpStore %rgb %376 None
-        %377 = OpAccessChain %_ptr_Uniform_v3float %19 %uint_0 %uint_4
-      %x_279 = OpLoad %v3float %377 None
+        %352 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_6
+      %x_273 = OpLoad %float %352 None
+        %356 = OpCompositeExtract %float %x_264 0
+        %357 = OpCompositeExtract %float %x_264 1
+        %358 = OpCompositeExtract %float %x_264 2
+        %359 = OpCompositeConstruct %v3float %356 %357 %358
+        %360 = OpVectorTimesScalar %v3float %359 %x_273
+               OpStore %rgb %360 None
+        %361 = OpAccessChain %_ptr_Uniform_v3float %19 %uint_0 %uint_4
+      %x_279 = OpLoad %v3float %361 None
       %x_282 = OpLoad %v4float %v_output1 None
-        %382 = OpCompositeExtract %float %x_282 0
-        %383 = OpCompositeExtract %float %x_282 1
-        %384 = OpCompositeExtract %float %x_282 2
-        %385 = OpCompositeConstruct %v3float %382 %383 %384
-        %386 = OpFSub %v3float %x_279 %385
-        %387 = OpExtInst %v3float %89 Normalize %386
-               OpStore %output5 %387 None
+        %366 = OpCompositeExtract %float %x_282 0
+        %367 = OpCompositeExtract %float %x_282 1
+        %368 = OpCompositeExtract %float %x_282 2
+        %369 = OpCompositeConstruct %v3float %366 %367 %368
+        %370 = OpFSub %v3float %x_279 %369
+        %371 = OpExtInst %v3float %85 Normalize %370
+               OpStore %output5 %371 None
                OpStore %output4 %x_397 None
                OpStore %uvOffset %18 None
-        %388 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_2
-      %x_292 = OpLoad %float %388 None
-        %390 = OpFDiv %float %float_1 %x_292
-               OpStore %normalScale %390 None
+        %372 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_2
+      %x_292 = OpLoad %float %372 None
+        %374 = OpFDiv %float %float_1 %x_292
+               OpStore %normalScale %374 None
       %x_298 = OpLoad %bool %gl_FrontFacing None
-               OpSelectionMerge %392 None
-               OpBranchConditional %x_298 %393 %394
-        %393 = OpLabel
+               OpSelectionMerge %376 None
+               OpBranchConditional %x_298 %377 %378
+        %377 = OpLabel
       %x_303 = OpLoad %v2float %v_uv None
                OpStore %x_299 %x_303 None
-               OpBranch %392
-        %394 = OpLabel
+               OpBranch %376
+        %378 = OpLabel
       %x_305 = OpLoad %v2float %v_uv None
-        %397 = OpFNegate %v2float %x_305
-               OpStore %x_299 %397 None
-               OpBranch %392
-        %392 = OpLabel
+        %381 = OpFNegate %v2float %x_305
+               OpStore %x_299 %381 None
+               OpBranch %376
+        %376 = OpLabel
       %x_307 = OpLoad %v2float %x_299 None
                OpStore %TBNUV %x_307 None
       %x_310 = OpLoad %v4float %v_output2 None
       %x_312 = OpLoad %float %normalScale None
-        %401 = OpCompositeExtract %float %x_310 0
-        %402 = OpCompositeExtract %float %x_310 1
-        %403 = OpCompositeExtract %float %x_310 2
-        %404 = OpCompositeConstruct %v3float %401 %402 %403
-        %405 = OpVectorTimesScalar %v3float %404 %x_312
-               OpStore %param_3 %405 None
+        %385 = OpCompositeExtract %float %x_310 0
+        %386 = OpCompositeExtract %float %x_310 1
+        %387 = OpCompositeExtract %float %x_310 2
+        %388 = OpCompositeConstruct %v3float %385 %386 %387
+        %389 = OpVectorTimesScalar %v3float %388 %x_312
+               OpStore %param_3 %389 None
       %x_317 = OpLoad %v4float %v_output1 None
-        %407 = OpCompositeExtract %float %x_317 0
-        %408 = OpCompositeExtract %float %x_317 1
-        %409 = OpCompositeExtract %float %x_317 2
-        %410 = OpCompositeConstruct %v3float %407 %408 %409
-               OpStore %param_4 %410 None
+        %391 = OpCompositeExtract %float %x_317 0
+        %392 = OpCompositeExtract %float %x_317 1
+        %393 = OpCompositeExtract %float %x_317 2
+        %394 = OpCompositeConstruct %v3float %391 %392 %393
+               OpStore %param_4 %394 None
       %x_320 = OpLoad %v2float %TBNUV None
                OpStore %param_5 %x_320 None
-        %412 = OpAccessChain %_ptr_Uniform_v2float %19 %uint_0 %uint_8
-      %x_324 = OpLoad %v2float %412 None
+        %396 = OpAccessChain %_ptr_Uniform_v2float %19 %uint_0 %uint_8
+      %x_324 = OpLoad %v2float %396 None
                OpStore %param_6 %x_324 None
       %x_325 = OpFunctionCall %mat3v3float %cotangent_frame_vf3_vf3_vf2_vf2_ %param_3 %param_4 %param_5 %param_6
                OpStore %TBN %x_325 None
@@ -861,290 +845,290 @@
                OpStore %invTBN %x_329 None
       %x_331 = OpLoad %mat3v3float %invTBN None
       %x_332 = OpLoad %v3float %output5 None
-        %421 = OpFNegate %v3float %x_332
-      %x_334 = OpMatrixTimesVector %v3float %x_331 %421
+        %405 = OpFNegate %v3float %x_332
+      %x_334 = OpMatrixTimesVector %v3float %x_331 %405
       %x_337 = OpLoad %mat3v3float %invTBN None
       %x_338 = OpLoad %v3float %output5 None
-        %425 = OpCompositeExtract %float %x_334 0
-        %426 = OpCompositeExtract %float %x_334 1
-        %427 = OpCompositeConstruct %v2float %425 %426
-        %428 = OpExtInst %float %89 Length %427
-        %429 = OpFNegate %v3float %x_338
-        %430 = OpMatrixTimesVector %v3float %x_337 %429
-        %431 = OpCompositeExtract %float %430 2
-        %432 = OpFDiv %float %428 %431
-               OpStore %parallaxLimit %432 None
-        %433 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_5
-      %x_345 = OpLoad %float %433 None
+        %409 = OpCompositeExtract %float %x_334 0
+        %410 = OpCompositeExtract %float %x_334 1
+        %411 = OpCompositeConstruct %v2float %409 %410
+        %412 = OpExtInst %float %85 Length %411
+        %413 = OpFNegate %v3float %x_338
+        %414 = OpMatrixTimesVector %v3float %x_337 %413
+        %415 = OpCompositeExtract %float %414 2
+        %416 = OpFDiv %float %412 %415
+               OpStore %parallaxLimit %416 None
+        %417 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_5
+      %x_345 = OpLoad %float %417 None
       %x_346 = OpLoad %float %parallaxLimit None
-        %437 = OpFMul %float %x_346 %x_345
-               OpStore %parallaxLimit %437 None
+        %421 = OpFMul %float %x_346 %x_345
+               OpStore %parallaxLimit %421 None
       %x_349 = OpLoad %mat3v3float %invTBN None
       %x_350 = OpLoad %v3float %output5 None
-        %440 = OpFNegate %v3float %x_350
-      %x_352 = OpMatrixTimesVector %v3float %x_349 %440
-        %442 = OpCompositeExtract %float %x_352 0
-        %443 = OpCompositeExtract %float %x_352 1
-        %444 = OpCompositeConstruct %v2float %442 %443
-        %445 = OpExtInst %v2float %89 Normalize %444
-               OpStore %vOffsetDir %445 None
+        %424 = OpFNegate %v3float %x_350
+      %x_352 = OpMatrixTimesVector %v3float %x_349 %424
+        %426 = OpCompositeExtract %float %x_352 0
+        %427 = OpCompositeExtract %float %x_352 1
+        %428 = OpCompositeConstruct %v2float %426 %427
+        %429 = OpExtInst %v2float %85 Normalize %428
+               OpStore %vOffsetDir %429 None
       %x_356 = OpLoad %v2float %vOffsetDir None
       %x_357 = OpLoad %float %parallaxLimit None
-        %448 = OpVectorTimesScalar %v2float %x_356 %x_357
-               OpStore %vMaxOffset %448 None
+        %432 = OpVectorTimesScalar %v2float %x_356 %x_357
+               OpStore %vMaxOffset %432 None
       %x_361 = OpLoad %mat3v3float %invTBN None
       %x_362 = OpLoad %v3float %output5 None
       %x_365 = OpLoad %mat3v3float %invTBN None
       %x_366 = OpLoad %v4float %v_output2 None
-        %453 = OpFNegate %v3float %x_362
-        %454 = OpMatrixTimesVector %v3float %x_361 %453
-        %455 = OpCompositeExtract %float %x_366 0
-        %456 = OpCompositeExtract %float %x_366 1
-        %457 = OpCompositeExtract %float %x_366 2
-        %458 = OpCompositeConstruct %v3float %455 %456 %457
-        %459 = OpMatrixTimesVector %v3float %x_365 %458
-        %460 = OpDot %float %454 %459
-        %461 = OpFMul %float %460 %float_n11
-        %463 = OpFAdd %float %float_15 %461
-               OpStore %numSamples %463 None
+        %437 = OpFNegate %v3float %x_362
+        %438 = OpMatrixTimesVector %v3float %x_361 %437
+        %439 = OpCompositeExtract %float %x_366 0
+        %440 = OpCompositeExtract %float %x_366 1
+        %441 = OpCompositeExtract %float %x_366 2
+        %442 = OpCompositeConstruct %v3float %439 %440 %441
+        %443 = OpMatrixTimesVector %v3float %x_365 %442
+        %444 = OpDot %float %438 %443
+        %445 = OpFMul %float %444 %float_n11
+        %447 = OpFAdd %float %float_15 %445
+               OpStore %numSamples %447 None
       %x_374 = OpLoad %float %numSamples None
-        %466 = OpFDiv %float %float_1 %x_374
-               OpStore %stepSize %466 None
+        %450 = OpFDiv %float %float_1 %x_374
+               OpStore %stepSize %450 None
                OpStore %currRayHeight %float_1 None
                OpStore %vCurrOffset %18 None
                OpStore %vLastOffset %18 None
                OpStore %lastSampledHeight %float_1 None
                OpStore %currSampledHeight %float_1 None
                OpStore %i %int_0 None
-               OpBranch %469
-        %469 = OpLabel
-               OpLoopMerge %470 %468 None
-               OpBranch %467
-        %467 = OpLabel
+               OpBranch %453
+        %453 = OpLabel
+               OpLoopMerge %454 %452 None
+               OpBranch %451
+        %451 = OpLabel
       %x_388 = OpLoad %int %i None
-        %472 = OpSLessThan %bool %x_388 %int_15
-               OpSelectionMerge %474 None
-               OpBranchConditional %472 %474 %475
-        %475 = OpLabel
-               OpBranch %470
-        %474 = OpLabel
+        %456 = OpSLessThan %bool %x_388 %int_15
+               OpSelectionMerge %458 None
+               OpBranchConditional %456 %458 %459
+        %459 = OpLabel
+               OpBranch %454
+        %458 = OpLabel
       %x_394 = OpLoad %v2float %v_uv None
       %x_395 = OpLoad %v2float %vCurrOffset None
-        %478 = OpCompositeExtract %float %x_397 3
-               OpStore %currSampledHeight %478 None
+        %462 = OpCompositeExtract %float %x_397 3
+               OpStore %currSampledHeight %462 None
       %x_400 = OpLoad %float %currSampledHeight None
       %x_401 = OpLoad %float %currRayHeight None
-        %481 = OpFOrdGreaterThan %bool %x_400 %x_401
-               OpSelectionMerge %482 None
-               OpBranchConditional %481 %483 %484
-        %483 = OpLabel
+        %465 = OpFOrdGreaterThan %bool %x_400 %x_401
+               OpSelectionMerge %466 None
+               OpBranchConditional %465 %467 %468
+        %467 = OpLabel
       %x_406 = OpLoad %float %currSampledHeight None
       %x_407 = OpLoad %float %currRayHeight None
-        %487 = OpFSub %float %x_406 %x_407
-               OpStore %delta1 %487 None
+        %471 = OpFSub %float %x_406 %x_407
+               OpStore %delta1 %471 None
       %x_410 = OpLoad %float %currRayHeight None
       %x_411 = OpLoad %float %stepSize None
       %x_413 = OpLoad %float %lastSampledHeight None
-        %491 = OpFAdd %float %x_410 %x_411
-        %492 = OpFSub %float %491 %x_413
-               OpStore %delta2 %492 None
+        %475 = OpFAdd %float %x_410 %x_411
+        %476 = OpFSub %float %475 %x_413
+               OpStore %delta2 %476 None
       %x_416 = OpLoad %float %delta1 None
       %x_417 = OpLoad %float %delta1 None
       %x_418 = OpLoad %float %delta2 None
-        %496 = OpFAdd %float %x_417 %x_418
-        %497 = OpFDiv %float %x_416 %496
-               OpStore %ratio %497 None
+        %480 = OpFAdd %float %x_417 %x_418
+        %481 = OpFDiv %float %x_416 %480
+               OpStore %ratio %481 None
       %x_421 = OpLoad %float %ratio None
       %x_422 = OpLoad %v2float %vLastOffset None
       %x_424 = OpLoad %float %ratio None
       %x_426 = OpLoad %v2float %vCurrOffset None
-        %502 = OpVectorTimesScalar %v2float %x_422 %x_421
-        %503 = OpFSub %float %float_1 %x_424
-        %504 = OpVectorTimesScalar %v2float %x_426 %503
-        %505 = OpFAdd %v2float %502 %504
-               OpStore %vCurrOffset %505 None
-               OpBranch %470
-        %484 = OpLabel
+        %486 = OpVectorTimesScalar %v2float %x_422 %x_421
+        %487 = OpFSub %float %float_1 %x_424
+        %488 = OpVectorTimesScalar %v2float %x_426 %487
+        %489 = OpFAdd %v2float %486 %488
+               OpStore %vCurrOffset %489 None
+               OpBranch %454
+        %468 = OpLabel
       %x_431 = OpLoad %float %stepSize None
       %x_432 = OpLoad %float %currRayHeight None
-        %508 = OpFSub %float %x_432 %x_431
-               OpStore %currRayHeight %508 None
+        %492 = OpFSub %float %x_432 %x_431
+               OpStore %currRayHeight %492 None
       %x_434 = OpLoad %v2float %vCurrOffset None
                OpStore %vLastOffset %x_434 None
       %x_435 = OpLoad %float %stepSize None
       %x_436 = OpLoad %v2float %vMaxOffset None
       %x_438 = OpLoad %v2float %vCurrOffset None
-        %513 = OpVectorTimesScalar %v2float %x_436 %x_435
-        %514 = OpFAdd %v2float %x_438 %513
-               OpStore %vCurrOffset %514 None
+        %497 = OpVectorTimesScalar %v2float %x_436 %x_435
+        %498 = OpFAdd %v2float %x_438 %497
+               OpStore %vCurrOffset %498 None
       %x_440 = OpLoad %float %currSampledHeight None
                OpStore %lastSampledHeight %x_440 None
-               OpBranch %482
-        %482 = OpLabel
-               OpBranch %468
-        %468 = OpLabel
+               OpBranch %466
+        %466 = OpLabel
+               OpBranch %452
+        %452 = OpLabel
       %x_441 = OpLoad %int %i None
-        %517 = OpIAdd %int %x_441 %int_1
-               OpStore %i %517 None
-               OpBranch %469
-        %470 = OpLabel
+        %501 = OpIAdd %int %x_441 %int_1
+               OpStore %i %501 None
+               OpBranch %453
+        %454 = OpLabel
       %x_444 = OpLoad %v2float %vCurrOffset None
                OpStore %parallaxOcclusion_0 %x_444 None
       %x_445 = OpLoad %v2float %parallaxOcclusion_0 None
                OpStore %uvOffset %x_445 None
       %x_449 = OpLoad %v2float %v_uv None
       %x_450 = OpLoad %v2float %uvOffset None
-        %522 = OpLoad %11 %TextureSamplerTexture None
-        %523 = OpLoad %14 %TextureSamplerSampler None
-        %524 = OpFAdd %v2float %x_449 %x_450
-        %525 = OpSampledImage %365 %522 %523
-      %x_452 = OpImageSampleImplicitLod %v4float %525 %524 None
-        %527 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_2
-      %x_454 = OpLoad %float %527 None
+        %506 = OpLoad %11 %TextureSamplerTexture None
+        %507 = OpLoad %14 %TextureSamplerSampler None
+        %508 = OpFAdd %v2float %x_449 %x_450
+        %509 = OpSampledImage %349 %506 %507
+      %x_452 = OpImageSampleImplicitLod %v4float %509 %508 None
+        %511 = OpAccessChain %_ptr_Uniform_float %19 %uint_0 %uint_2
+      %x_454 = OpLoad %float %511 None
       %x_457 = OpLoad %mat3v3float %TBN None
                OpStore %param_8 %x_457 None
-        %530 = OpCompositeExtract %float %x_452 0
-        %531 = OpCompositeExtract %float %x_452 1
-        %532 = OpCompositeExtract %float %x_452 2
-        %533 = OpCompositeConstruct %v3float %530 %531 %532
-               OpStore %param_9 %533 None
-        %534 = OpFDiv %float %float_1 %x_454
-               OpStore %param_10 %534 None
+        %514 = OpCompositeExtract %float %x_452 0
+        %515 = OpCompositeExtract %float %x_452 1
+        %516 = OpCompositeExtract %float %x_452 2
+        %517 = OpCompositeConstruct %v3float %514 %515 %516
+               OpStore %param_9 %517 None
+        %518 = OpFDiv %float %float_1 %x_454
+               OpStore %param_10 %518 None
       %x_461 = OpFunctionCall %v3float %perturbNormal_mf33_vf3_f1_ %param_8 %param_9 %param_10
       %x_462 = OpLoad %v4float %output4 None
-        %537 = OpCompositeExtract %float %x_461 0
-        %538 = OpCompositeExtract %float %x_461 1
-        %539 = OpCompositeExtract %float %x_461 2
-        %540 = OpCompositeExtract %float %x_462 3
-        %541 = OpCompositeConstruct %v4float %537 %538 %539 %540
-               OpStore %output4 %541 None
+        %521 = OpCompositeExtract %float %x_461 0
+        %522 = OpCompositeExtract %float %x_461 1
+        %523 = OpCompositeExtract %float %x_461 2
+        %524 = OpCompositeExtract %float %x_462 3
+        %525 = OpCompositeConstruct %v4float %521 %522 %523 %524
+               OpStore %output4 %525 None
       %x_465 = OpLoad %v2float %v_uv None
       %x_466 = OpLoad %v2float %uvOffset None
-        %544 = OpFAdd %v2float %x_465 %x_466
-               OpStore %output6 %544 None
+        %528 = OpFAdd %v2float %x_465 %x_466
+               OpStore %output6 %528 None
       %x_474 = OpLoad %v2float %output6 None
-        %546 = OpLoad %11 %TextureSampler1Texture None
-        %547 = OpLoad %14 %TextureSampler1Sampler None
-        %548 = OpSampledImage %365 %546 %547
-      %x_475 = OpImageSampleImplicitLod %v4float %548 %x_474 None
+        %530 = OpLoad %11 %TextureSampler1Texture None
+        %531 = OpLoad %14 %TextureSampler1Sampler None
+        %532 = OpSampledImage %349 %530 %531
+      %x_475 = OpImageSampleImplicitLod %v4float %532 %x_474 None
                OpStore %tempTextureRead1 %x_475 None
       %x_477 = OpLoad %v4float %tempTextureRead1 None
-        %551 = OpCompositeExtract %float %x_477 0
-        %552 = OpCompositeExtract %float %x_477 1
-        %553 = OpCompositeExtract %float %x_477 2
-        %554 = OpCompositeConstruct %v3float %551 %552 %553
-               OpStore %rgb1 %554 None
-        %555 = OpAccessChain %_ptr_Uniform_v3float %19 %uint_0 %uint_4
-      %x_481 = OpLoad %v3float %555 None
+        %535 = OpCompositeExtract %float %x_477 0
+        %536 = OpCompositeExtract %float %x_477 1
+        %537 = OpCompositeExtract %float %x_477 2
+        %538 = OpCompositeConstruct %v3float %535 %536 %537
+               OpStore %rgb1 %538 None
+        %539 = OpAccessChain %_ptr_Uniform_v3float %19 %uint_0 %uint_4
+      %x_481 = OpLoad %v3float %539 None
       %x_482 = OpLoad %v4float %v_output1 None
-        %558 = OpCompositeExtract %float %x_482 0
-        %559 = OpCompositeExtract %float %x_482 1
-        %560 = OpCompositeExtract %float %x_482 2
-        %561 = OpCompositeConstruct %v3float %558 %559 %560
-        %562 = OpFSub %v3float %x_481 %561
-        %563 = OpExtInst %v3float %89 Normalize %562
-               OpStore %viewDirectionW_1 %563 None
+        %542 = OpCompositeExtract %float %x_482 0
+        %543 = OpCompositeExtract %float %x_482 1
+        %544 = OpCompositeExtract %float %x_482 2
+        %545 = OpCompositeConstruct %v3float %542 %543 %544
+        %546 = OpFSub %v3float %x_481 %545
+        %547 = OpExtInst %v3float %85 Normalize %546
+               OpStore %viewDirectionW_1 %547 None
                OpStore %shadow %float_1 None
       %x_488 = OpLoad %float %u_Float None
-        %565 = OpFMul %float %float_1 %x_488
-               OpStore %glossiness_1 %565 None
+        %549 = OpFMul %float %float_1 %x_488
+               OpStore %glossiness_1 %549 None
                OpStore %diffuseBase %8 None
                OpStore %specularBase %8 None
       %x_494 = OpLoad %v4float %output4 None
-        %567 = OpCompositeExtract %float %x_494 0
-        %568 = OpCompositeExtract %float %x_494 1
-        %569 = OpCompositeExtract %float %x_494 2
-        %570 = OpCompositeConstruct %v3float %567 %568 %569
-               OpStore %normalW %570 None
+        %551 = OpCompositeExtract %float %x_494 0
+        %552 = OpCompositeExtract %float %x_494 1
+        %553 = OpCompositeExtract %float %x_494 2
+        %554 = OpCompositeConstruct %v3float %551 %552 %553
+               OpStore %normalW %554 None
       %x_501 = OpLoad %v3float %viewDirectionW_1 None
                OpStore %param_11 %x_501 None
       %x_503 = OpLoad %v3float %normalW None
                OpStore %param_12 %x_503 None
-        %573 = OpAccessChain %_ptr_Uniform_v4float %37 %uint_0 %uint_0
-      %x_507 = OpLoad %v4float %573 None
+        %557 = OpAccessChain %_ptr_Uniform_v4float %37 %uint_0 %uint_0
+      %x_507 = OpLoad %v4float %557 None
                OpStore %param_13 %x_507 None
-        %576 = OpAccessChain %_ptr_Uniform_v4float %37 %uint_0 %uint_1
-      %x_510 = OpLoad %v4float %576 None
-        %578 = OpCompositeExtract %float %x_510 0
-        %579 = OpCompositeExtract %float %x_510 1
-        %580 = OpCompositeExtract %float %x_510 2
-        %581 = OpCompositeConstruct %v3float %578 %579 %580
-               OpStore %param_14 %581 None
-        %582 = OpAccessChain %_ptr_Uniform_v4float %37 %uint_0 %uint_2
-      %x_514 = OpLoad %v4float %582 None
-        %584 = OpCompositeExtract %float %x_514 0
-        %585 = OpCompositeExtract %float %x_514 1
-        %586 = OpCompositeExtract %float %x_514 2
-        %587 = OpCompositeConstruct %v3float %584 %585 %586
-               OpStore %param_15 %587 None
-        %588 = OpAccessChain %_ptr_Uniform_v3float %37 %uint_0 %uint_3
-      %x_518 = OpLoad %v3float %588 None
+        %560 = OpAccessChain %_ptr_Uniform_v4float %37 %uint_0 %uint_1
+      %x_510 = OpLoad %v4float %560 None
+        %562 = OpCompositeExtract %float %x_510 0
+        %563 = OpCompositeExtract %float %x_510 1
+        %564 = OpCompositeExtract %float %x_510 2
+        %565 = OpCompositeConstruct %v3float %562 %563 %564
+               OpStore %param_14 %565 None
+        %566 = OpAccessChain %_ptr_Uniform_v4float %37 %uint_0 %uint_2
+      %x_514 = OpLoad %v4float %566 None
+        %568 = OpCompositeExtract %float %x_514 0
+        %569 = OpCompositeExtract %float %x_514 1
+        %570 = OpCompositeExtract %float %x_514 2
+        %571 = OpCompositeConstruct %v3float %568 %569 %570
+               OpStore %param_15 %571 None
+        %572 = OpAccessChain %_ptr_Uniform_v3float %37 %uint_0 %uint_3
+      %x_518 = OpLoad %v3float %572 None
                OpStore %param_16 %x_518 None
       %x_520 = OpLoad %float %glossiness_1 None
                OpStore %param_17 %x_520 None
       %x_521 = OpFunctionCall %lightingInfo %computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_ %param_11 %param_12 %param_13 %param_14 %param_15 %param_16 %param_17
                OpStore %info %x_521 None
                OpStore %shadow %float_1 None
-        %593 = OpAccessChain %_ptr_Function_v3float %info %uint_0
-      %x_523 = OpLoad %v3float %593 None
+        %577 = OpAccessChain %_ptr_Function_v3float %info %uint_0
+      %x_523 = OpLoad %v3float %577 None
       %x_524 = OpLoad %float %shadow None
       %x_526 = OpLoad %v3float %diffuseBase None
-        %597 = OpVectorTimesScalar %v3float %x_523 %x_524
-        %598 = OpFAdd %v3float %x_526 %597
-               OpStore %diffuseBase %598 None
-        %599 = OpAccessChain %_ptr_Function_v3float %info %uint_1
-      %x_529 = OpLoad %v3float %599 None
+        %581 = OpVectorTimesScalar %v3float %x_523 %x_524
+        %582 = OpFAdd %v3float %x_526 %581
+               OpStore %diffuseBase %582 None
+        %583 = OpAccessChain %_ptr_Function_v3float %info %uint_1
+      %x_529 = OpLoad %v3float %583 None
       %x_530 = OpLoad %float %shadow None
       %x_532 = OpLoad %v3float %specularBase None
-        %603 = OpVectorTimesScalar %v3float %x_529 %x_530
-        %604 = OpFAdd %v3float %x_532 %603
-               OpStore %specularBase %604 None
+        %587 = OpVectorTimesScalar %v3float %x_529 %x_530
+        %588 = OpFAdd %v3float %x_532 %587
+               OpStore %specularBase %588 None
       %x_535 = OpLoad %v3float %diffuseBase None
       %x_536 = OpLoad %v3float %rgb1 None
-        %607 = OpFMul %v3float %x_535 %x_536
-               OpStore %diffuseOutput %607 None
+        %591 = OpFMul %v3float %x_535 %x_536
+               OpStore %diffuseOutput %591 None
       %x_539 = OpLoad %v3float %specularBase None
       %x_540 = OpLoad %v3float %u_Color None
-        %610 = OpFMul %v3float %x_539 %x_540
-               OpStore %specularOutput %610 None
+        %594 = OpFMul %v3float %x_539 %x_540
+               OpStore %specularOutput %594 None
       %x_543 = OpLoad %v3float %diffuseOutput None
       %x_544 = OpLoad %v3float %specularOutput None
-        %613 = OpFAdd %v3float %x_543 %x_544
-               OpStore %output3 %613 None
+        %597 = OpFAdd %v3float %x_543 %x_544
+               OpStore %output3 %597 None
       %x_548 = OpLoad %v3float %output3 None
-        %615 = OpCompositeExtract %float %x_548 0
-        %616 = OpCompositeExtract %float %x_548 1
-        %617 = OpCompositeExtract %float %x_548 2
-        %618 = OpCompositeConstruct %v4float %615 %616 %617 %float_1
-               OpStore %glFragColor %618 None
+        %599 = OpCompositeExtract %float %x_548 0
+        %600 = OpCompositeExtract %float %x_548 1
+        %601 = OpCompositeExtract %float %x_548 2
+        %602 = OpCompositeConstruct %v4float %599 %600 %601 %float_1
+               OpStore %glFragColor %602 None
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %main_out None %626
+ %main_inner = OpFunction %main_out None %610
 %vMainuv_param = OpFunctionParameter %v2float
 %v_output1_param = OpFunctionParameter %v4float
 %gl_FrontFacing_param = OpFunctionParameter %bool
  %v_uv_param = OpFunctionParameter %v2float
 %v_output2_param = OpFunctionParameter %v4float
-        %627 = OpLabel
+        %611 = OpLabel
                OpStore %vMainuv %vMainuv_param None
                OpStore %v_output1 %v_output1_param None
                OpStore %gl_FrontFacing %gl_FrontFacing_param None
                OpStore %v_uv %v_uv_param None
                OpStore %v_output2 %v_output2_param None
-        %628 = OpFunctionCall %void %main_1
-        %629 = OpLoad %v4float %glFragColor None
-        %630 = OpCompositeConstruct %main_out %629
-               OpReturnValue %630
+        %612 = OpFunctionCall %void %main_1
+        %613 = OpLoad %v4float %glFragColor None
+        %614 = OpCompositeConstruct %main_out %613
+               OpReturnValue %614
                OpFunctionEnd
-       %main = OpFunction %void None %302
-        %632 = OpLabel
-        %633 = OpLoad %v2float %main_loc1_Input None
-        %634 = OpLoad %v4float %main_loc0_Input None
-        %635 = OpLoad %bool %main_front_facing_Input None
-        %636 = OpLoad %v2float %main_loc3_Input None
-        %637 = OpLoad %v4float %main_loc2_Input None
-        %638 = OpFunctionCall %main_out %main_inner %633 %634 %635 %636 %637
-        %639 = OpCompositeExtract %v4float %638 0
-               OpStore %main_loc0_Output %639 None
+       %main = OpFunction %void None %286
+        %616 = OpLabel
+        %617 = OpLoad %v2float %main_loc1_Input None
+        %618 = OpLoad %v4float %main_loc0_Input None
+        %619 = OpLoad %bool %main_front_facing_Input None
+        %620 = OpLoad %v2float %main_loc3_Input None
+        %621 = OpLoad %v4float %main_loc2_Input None
+        %622 = OpFunctionCall %main_out %main_inner %617 %618 %619 %620 %621
+        %623 = OpCompositeExtract %v4float %622 0
+               OpStore %main_loc0_Output %623 None
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/977.spvasm.expected.spvasm b/test/tint/bug/tint/977.spvasm.expected.spvasm
index a218a13..0ad23b4 100644
--- a/test/tint/bug/tint/977.spvasm.expected.spvasm
+++ b/test/tint/bug/tint/977.spvasm.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 106
+; Bound: 104
 ; Schema: 0
                OpCapability Shader
-         %53 = OpExtInstImport "GLSL.std.450"
+         %51 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint GLCompute %main "main" %main_global_invocation_id_Input
                OpExecutionMode %main LocalSize 1 1 1
@@ -102,16 +102,16 @@
     %float_1 = OpConstant %float 1
     %float_2 = OpConstant %float 2
        %void = OpTypeVoid
-         %77 = OpTypeFunction %void
+         %75 = OpTypeFunction %void
 %_ptr_Function_int = OpTypePointer Function %int
-         %81 = OpConstantNull %int
+         %79 = OpConstantNull %int
 %_ptr_Private_uint = OpTypePointer Private %uint
      %uint_0 = OpConstant %uint 0
     %int_n10 = OpConstant %int -10
    %float_n4 = OpConstant %float -4
    %float_n3 = OpConstant %float -3
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-         %99 = OpTypeFunction %void %v3uint
+         %97 = OpTypeFunction %void %v3uint
 %binaryOperation_f1_f1_ = OpFunction %float None %28
      %a_root = OpFunctionParameter %_ptr_Function_float
      %b_root = OpFunctionParameter %_ptr_Function_float
@@ -120,85 +120,83 @@
 %continue_execution = OpVariable %_ptr_Function_bool Function
        %x_26 = OpVariable %_ptr_Function_float Function %31
                OpStore %continue_execution %true
-         %36 = OpAccessChain %_ptr_Function_float %a_root
-         %37 = OpAccessChain %_ptr_Function_float %b_root
-         %39 = OpLoad %float %37 None
-         %40 = OpFOrdEqual %bool %39 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
+         %37 = OpLoad %float %b_root None
+         %38 = OpFOrdEqual %bool %37 %float_0
+               OpSelectionMerge %40 None
+               OpBranchConditional %38 %41 %40
+         %41 = OpLabel
                OpStore %continue_execution %false None
                OpStore %return_value %float_1 None
-               OpBranch %42
-         %42 = OpLabel
-         %46 = OpLoad %bool %continue_execution None
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-       %x_21 = OpLoad %float %37 None
-         %50 = OpFDiv %float %x_21 %float_2
-         %52 = OpExtInst %float %53 Floor %50
-         %54 = OpFMul %float %float_2 %52
-         %55 = OpFSub %float %x_21 %54
-         %56 = OpExtInst %float %53 RoundEven %55
-         %57 = OpFOrdEqual %bool %56 %float_1
-         %58 = OpLogicalNot %bool %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %62 = OpLoad %float %36 None
-         %63 = OpExtInst %float %53 FAbs %62
-         %64 = OpLoad %float %37 None
-         %65 = OpExtInst %float %53 Pow %63 %64
-               OpStore %x_26 %65 None
-               OpBranch %59
-         %61 = OpLabel
-         %66 = OpLoad %float %36 None
-         %67 = OpExtInst %float %53 FSign %66
-         %68 = OpLoad %float %36 None
-         %69 = OpExtInst %float %53 FAbs %68
-         %70 = OpLoad %float %37 None
-         %71 = OpExtInst %float %53 Pow %69 %70
-         %72 = OpFMul %float %67 %71
-               OpStore %x_26 %72 None
-               OpBranch %59
+               OpBranch %40
+         %40 = OpLabel
+         %44 = OpLoad %bool %continue_execution None
+               OpSelectionMerge %45 None
+               OpBranchConditional %44 %46 %45
+         %46 = OpLabel
+       %x_21 = OpLoad %float %b_root None
+         %48 = OpFDiv %float %x_21 %float_2
+         %50 = OpExtInst %float %51 Floor %48
+         %52 = OpFMul %float %float_2 %50
+         %53 = OpFSub %float %x_21 %52
+         %54 = OpExtInst %float %51 RoundEven %53
+         %55 = OpFOrdEqual %bool %54 %float_1
+         %56 = OpLogicalNot %bool %55
+               OpSelectionMerge %57 None
+               OpBranchConditional %56 %58 %59
+         %58 = OpLabel
+         %60 = OpLoad %float %a_root None
+         %61 = OpExtInst %float %51 FAbs %60
+         %62 = OpLoad %float %b_root None
+         %63 = OpExtInst %float %51 Pow %61 %62
+               OpStore %x_26 %63 None
+               OpBranch %57
          %59 = OpLabel
+         %64 = OpLoad %float %a_root None
+         %65 = OpExtInst %float %51 FSign %64
+         %66 = OpLoad %float %a_root None
+         %67 = OpExtInst %float %51 FAbs %66
+         %68 = OpLoad %float %b_root None
+         %69 = OpExtInst %float %51 Pow %67 %68
+         %70 = OpFMul %float %65 %69
+               OpStore %x_26 %70 None
+               OpBranch %57
+         %57 = OpLabel
        %x_41 = OpLoad %float %x_26 None
                OpStore %return_value %x_41 None
-               OpBranch %47
-         %47 = OpLabel
-         %74 = OpLoad %float %return_value None
-               OpReturnValue %74
+               OpBranch %45
+         %45 = OpLabel
+         %72 = OpLoad %float %return_value None
+               OpReturnValue %72
                OpFunctionEnd
-     %main_1 = OpFunction %void None %77
-         %78 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %81
-        %a_1 = OpVariable %_ptr_Function_int Function %81
+     %main_1 = OpFunction %void None %75
+         %76 = OpLabel
+      %index = OpVariable %_ptr_Function_int Function %79
+        %a_1 = OpVariable %_ptr_Function_int Function %79
       %param = OpVariable %_ptr_Function_float Function %31
     %param_1 = OpVariable %_ptr_Function_float Function %31
-         %85 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-         %88 = OpLoad %uint %85 None
-         %89 = OpBitcast %int %88
-               OpStore %index %89 None
+         %83 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
+         %86 = OpLoad %uint %83 None
+         %87 = OpBitcast %int %86
+               OpStore %index %87 None
                OpStore %a_1 %int_n10 None
        %x_63 = OpLoad %int %index None
                OpStore %param %float_n4 None
                OpStore %param_1 %float_n3 None
        %x_68 = OpFunctionCall %float %binaryOperation_f1_f1_ %param %param_1
-         %95 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %x_63
-               OpStore %95 %x_68 None
+         %93 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %x_63
+               OpStore %93 %x_68 None
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %void None %99
+ %main_inner = OpFunction %void None %97
 %gl_GlobalInvocationID_param = OpFunctionParameter %v3uint
-        %100 = OpLabel
+         %98 = OpLabel
                OpStore %gl_GlobalInvocationID %gl_GlobalInvocationID_param None
-        %101 = OpFunctionCall %void %main_1
+         %99 = OpFunctionCall %void %main_1
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %77
-        %103 = OpLabel
-        %104 = OpLoad %v3uint %main_global_invocation_id_Input None
-        %105 = OpFunctionCall %void %main_inner %104
+       %main = OpFunction %void None %75
+        %101 = OpLabel
+        %102 = OpLoad %v3uint %main_global_invocation_id_Input None
+        %103 = OpFunctionCall %void %main_inner %102
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.spvasm
index ae08f16..eae4113 100644
--- a/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 15
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -16,18 +16,17 @@
 %_ptr_Function_int = OpTypePointer Function %int
           %5 = OpTypeFunction %int %_ptr_Function_int
        %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-         %14 = OpConstantNull %int
+         %10 = OpTypeFunction %void
+         %13 = OpConstantNull %int
        %func = OpFunction %int None %5
 %pointer_root = OpFunctionParameter %_ptr_Function_int
           %6 = OpLabel
-          %7 = OpAccessChain %_ptr_Function_int %pointer_root
-          %8 = OpLoad %int %7 None
-               OpReturnValue %8
+          %7 = OpLoad %int %pointer_root None
+               OpReturnValue %7
                OpFunctionEnd
-       %main = OpFunction %void None %11
-         %12 = OpLabel
-          %F = OpVariable %_ptr_Function_int Function %14
+       %main = OpFunction %void None %10
+         %11 = OpLabel
+          %F = OpVariable %_ptr_Function_int Function %13
           %r = OpFunctionCall %int %func %F
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.spvasm
index 5cbdd41..a7c31c3 100644
--- a/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 17
+; Bound: 16
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -17,18 +17,17 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
           %6 = OpTypeFunction %v4float %_ptr_Function_v4float
        %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-         %15 = OpConstantNull %v4float
+         %11 = OpTypeFunction %void
+         %14 = OpConstantNull %v4float
        %func = OpFunction %v4float None %6
 %pointer_root = OpFunctionParameter %_ptr_Function_v4float
           %7 = OpLabel
-          %8 = OpAccessChain %_ptr_Function_v4float %pointer_root
-          %9 = OpLoad %v4float %8 None
-               OpReturnValue %9
+          %8 = OpLoad %v4float %pointer_root None
+               OpReturnValue %8
                OpFunctionEnd
-       %main = OpFunction %void None %12
-         %13 = OpLabel
-          %F = OpVariable %_ptr_Function_v4float Function %15
+       %main = OpFunction %void None %11
+         %12 = OpLabel
+          %F = OpVariable %_ptr_Function_v4float Function %14
           %r = OpFunctionCall %v4float %func %F
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.spvasm
index e7eff6c..ce2ab3f 100644
--- a/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 15
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -17,15 +17,14 @@
           %P = OpVariable %_ptr_Private_int Private %4
           %6 = OpTypeFunction %int
        %void = OpTypeVoid
-         %12 = OpTypeFunction %void
+         %11 = OpTypeFunction %void
        %func = OpFunction %int None %6
           %7 = OpLabel
-          %8 = OpAccessChain %_ptr_Private_int %P
-          %9 = OpLoad %int %8 None
-               OpReturnValue %9
+          %8 = OpLoad %int %P None
+               OpReturnValue %8
                OpFunctionEnd
-       %main = OpFunction %void None %12
-         %13 = OpLabel
+       %main = OpFunction %void None %11
+         %12 = OpLabel
           %r = OpFunctionCall %int %func
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.spvasm
index ab8805e..a0ec93a 100644
--- a/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 15
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -18,15 +18,14 @@
           %P = OpVariable %_ptr_Private_v4float Private %5
           %7 = OpTypeFunction %v4float
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
        %func = OpFunction %v4float None %7
           %8 = OpLabel
-          %9 = OpAccessChain %_ptr_Private_v4float %P
-         %10 = OpLoad %v4float %9 None
-               OpReturnValue %10
+          %9 = OpLoad %v4float %P None
+               OpReturnValue %9
                OpFunctionEnd
-       %main = OpFunction %void None %13
-         %14 = OpLabel
+       %main = OpFunction %void None %12
+         %13 = OpLabel
           %r = OpFunctionCall %v4float %func
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.spvasm b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.spvasm
index 0b27218..ba038db 100644
--- a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 23
+; Bound: 22
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -20,20 +20,19 @@
 %_ptr_Function_int = OpTypePointer Function %int
           %6 = OpTypeFunction %int %int %_ptr_Function_int
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
       %int_0 = OpConstant %int 0
     %int_123 = OpConstant %int 123
        %func = OpFunction %int None %6
       %value = OpFunctionParameter %int
 %pointer_root = OpFunctionParameter %_ptr_Function_int
           %7 = OpLabel
-          %8 = OpAccessChain %_ptr_Function_int %pointer_root
-        %x_9 = OpLoad %int %8 None
-         %10 = OpIAdd %int %value %x_9
-               OpReturnValue %10
+        %x_9 = OpLoad %int %pointer_root None
+          %9 = OpIAdd %int %value %x_9
+               OpReturnValue %9
                OpFunctionEnd
-     %main_1 = OpFunction %void None %13
-         %14 = OpLabel
+     %main_1 = OpFunction %void None %12
+         %13 = OpLabel
           %i = OpVariable %_ptr_Function_int Function
                OpStore %i %int_0
                OpStore %i %int_123 None
@@ -41,8 +40,8 @@
        %x_18 = OpFunctionCall %int %func %x_19 %i
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %13
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
+       %main = OpFunction %void None %12
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %main_1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/ptr.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/ptr.wgsl.expected.spvasm
index 4427bf4..4d68c3f 100644
--- a/test/tint/ptr_ref/load/param/ptr.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/ptr.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 19
+; Bound: 18
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -17,22 +17,21 @@
 %_ptr_Function_int = OpTypePointer Function %int
           %6 = OpTypeFunction %int %int %_ptr_Function_int
        %void = OpTypeVoid
-         %13 = OpTypeFunction %void
+         %12 = OpTypeFunction %void
     %int_123 = OpConstant %int 123
        %func = OpFunction %int None %6
       %value = OpFunctionParameter %int
 %pointer_root = OpFunctionParameter %_ptr_Function_int
           %7 = OpLabel
-          %8 = OpAccessChain %_ptr_Function_int %pointer_root
-          %9 = OpLoad %int %8 None
-         %10 = OpIAdd %int %value %9
-               OpReturnValue %10
+          %8 = OpLoad %int %pointer_root None
+          %9 = OpIAdd %int %value %8
+               OpReturnValue %9
                OpFunctionEnd
-       %main = OpFunction %void None %13
-         %14 = OpLabel
+       %main = OpFunction %void None %12
+         %13 = OpLabel
           %i = OpVariable %_ptr_Function_int Function
                OpStore %i %int_123
-         %17 = OpLoad %int %i None
-          %r = OpFunctionCall %int %func %17 %i
+         %16 = OpLoad %int %i None
+          %r = OpFunctionCall %int %func %16 %i
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.spvasm
index c9484bf..d49b167 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 32
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -23,36 +23,35 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
           %8 = OpTypeFunction %int
        %void = OpTypeVoid
-         %15 = OpTypeFunction %void %uint
+         %14 = OpTypeFunction %void %uint
      %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
-         %28 = OpTypeFunction %void
+         %27 = OpTypeFunction %void
        %func = OpFunction %int None %8
           %9 = OpLabel
-         %10 = OpAccessChain %_ptr_Workgroup_int %S
-         %11 = OpLoad %int %10 None
-               OpReturnValue %11
+         %10 = OpLoad %int %S None
+               OpReturnValue %10
                OpFunctionEnd
- %main_inner = OpFunction %void None %15
+ %main_inner = OpFunction %void None %14
 %tint_local_index = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %20 None
-               OpBranchConditional %17 %21 %20
-         %21 = OpLabel
-               OpStore %S %int_0 None
-               OpBranch %20
+         %15 = OpLabel
+         %16 = OpIEqual %bool %tint_local_index %uint_0
+               OpSelectionMerge %19 None
+               OpBranchConditional %16 %20 %19
          %20 = OpLabel
+               OpStore %S %int_0 None
+               OpBranch %19
+         %19 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
           %r = OpFunctionCall %int %func
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpLoad %uint %main_local_invocation_index_Input None
-         %31 = OpFunctionCall %void %main_inner %30
+       %main = OpFunction %void None %27
+         %28 = OpLabel
+         %29 = OpLoad %uint %main_local_invocation_index_Input None
+         %30 = OpFunctionCall %void %main_inner %29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.spvasm
index 1b0369f..2df5ed4 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 33
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -24,36 +24,35 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
           %9 = OpTypeFunction %v4float
        %void = OpTypeVoid
-         %16 = OpTypeFunction %void %uint
+         %15 = OpTypeFunction %void %uint
      %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
-         %23 = OpConstantNull %v4float
+         %22 = OpConstantNull %v4float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
-         %29 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
        %func = OpFunction %v4float None %9
          %10 = OpLabel
-         %11 = OpAccessChain %_ptr_Workgroup_v4float %S
-         %12 = OpLoad %v4float %11 None
-               OpReturnValue %12
+         %11 = OpLoad %v4float %S None
+               OpReturnValue %11
                OpFunctionEnd
- %main_inner = OpFunction %void None %16
+ %main_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
-         %17 = OpLabel
-         %18 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %21 None
-               OpBranchConditional %18 %22 %21
-         %22 = OpLabel
-               OpStore %S %23 None
-               OpBranch %21
+         %16 = OpLabel
+         %17 = OpIEqual %bool %tint_local_index %uint_0
+               OpSelectionMerge %20 None
+               OpBranchConditional %17 %21 %20
          %21 = OpLabel
+               OpStore %S %22 None
+               OpBranch %20
+         %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
           %r = OpFunctionCall %v4float %func
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %29
-         %30 = OpLabel
-         %31 = OpLoad %uint %main_local_invocation_index_Input None
-         %32 = OpFunctionCall %void %main_inner %31
+       %main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpLoad %uint %main_local_invocation_index_Input None
+         %31 = OpFunctionCall %void %main_inner %30
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.spvasm
index b203bc8..5868f99 100644
--- a/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 15
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -16,18 +16,17 @@
 %_ptr_Function_int = OpTypePointer Function %int
           %6 = OpTypeFunction %void %_ptr_Function_int
      %int_42 = OpConstant %int 42
-         %11 = OpTypeFunction %void
-         %14 = OpConstantNull %int
+         %10 = OpTypeFunction %void
+         %13 = OpConstantNull %int
        %func = OpFunction %void None %6
 %pointer_root = OpFunctionParameter %_ptr_Function_int
           %7 = OpLabel
-          %8 = OpAccessChain %_ptr_Function_int %pointer_root
-               OpStore %8 %int_42 None
+               OpStore %pointer_root %int_42 None
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %11
-         %12 = OpLabel
-          %F = OpVariable %_ptr_Function_int Function %14
-         %15 = OpFunctionCall %void %func %F
+       %main = OpFunction %void None %10
+         %11 = OpLabel
+          %F = OpVariable %_ptr_Function_int Function %13
+         %14 = OpFunctionCall %void %func %F
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.spvasm
index c957b1f..5283e5f 100644
--- a/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 15
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -16,18 +16,17 @@
     %v4float = OpTypeVector %float 4
 %_ptr_Function_v4float = OpTypePointer Function %v4float
           %7 = OpTypeFunction %void %_ptr_Function_v4float
-         %10 = OpConstantNull %v4float
-         %12 = OpTypeFunction %void
+          %9 = OpConstantNull %v4float
+         %11 = OpTypeFunction %void
        %func = OpFunction %void None %7
 %pointer_root = OpFunctionParameter %_ptr_Function_v4float
           %8 = OpLabel
-          %9 = OpAccessChain %_ptr_Function_v4float %pointer_root
-               OpStore %9 %10 None
+               OpStore %pointer_root %9 None
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %12
-         %13 = OpLabel
-          %F = OpVariable %_ptr_Function_v4float Function %10
-         %15 = OpFunctionCall %void %func %F
+       %main = OpFunction %void None %11
+         %12 = OpLabel
+          %F = OpVariable %_ptr_Function_v4float Function %9
+         %14 = OpFunctionCall %void %func %F
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.spvasm
index 2312504..4ac92d1 100644
--- a/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -19,12 +19,11 @@
      %int_42 = OpConstant %int 42
        %func = OpFunction %void None %7
           %8 = OpLabel
-          %9 = OpAccessChain %_ptr_Private_int %P
-               OpStore %9 %int_42 None
+               OpStore %P %int_42 None
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %func
+         %11 = OpLabel
+         %12 = OpFunctionCall %void %func
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.spvasm
index e9a3cea..919e0f4 100644
--- a/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 14
+; Bound: 13
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -19,12 +19,11 @@
           %8 = OpTypeFunction %void
        %func = OpFunction %void None %8
           %9 = OpLabel
-         %10 = OpAccessChain %_ptr_Private_v4float %P
-               OpStore %10 %5 None
+               OpStore %P %5 None
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %8
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %func
+         %11 = OpLabel
+         %12 = OpFunctionCall %void %func
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/ptr.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/ptr.wgsl.expected.spvasm
index e48ce84..c15e975 100644
--- a/test/tint/ptr_ref/store/param/ptr.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/ptr.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 16
+; Bound: 15
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -16,20 +16,19 @@
         %int = OpTypeInt 32 1
 %_ptr_Function_int = OpTypePointer Function %int
           %7 = OpTypeFunction %void %int %_ptr_Function_int
-         %11 = OpTypeFunction %void
+         %10 = OpTypeFunction %void
     %int_123 = OpConstant %int 123
        %func = OpFunction %void None %7
       %value = OpFunctionParameter %int
 %pointer_root = OpFunctionParameter %_ptr_Function_int
           %8 = OpLabel
-          %9 = OpAccessChain %_ptr_Function_int %pointer_root
-               OpStore %9 %value None
+               OpStore %pointer_root %value None
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %11
-         %12 = OpLabel
+       %main = OpFunction %void None %10
+         %11 = OpLabel
           %i = OpVariable %_ptr_Function_int Function
                OpStore %i %int_123
-         %15 = OpFunctionCall %void %func %int_123 %i
+         %14 = OpFunctionCall %void %func %int_123 %i
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.spvasm
index caef1fe..b34d24c 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 31
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -23,7 +23,7 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
      %int_42 = OpConstant %int 42
-         %15 = OpTypeFunction %void %uint
+         %14 = OpTypeFunction %void %uint
      %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
@@ -31,27 +31,26 @@
    %uint_264 = OpConstant %uint 264
        %func = OpFunction %void None %9
          %10 = OpLabel
-         %11 = OpAccessChain %_ptr_Workgroup_int %S
-               OpStore %11 %int_42 None
+               OpStore %S %int_42 None
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %void None %15
+ %main_inner = OpFunction %void None %14
 %tint_local_index = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %20 None
-               OpBranchConditional %17 %21 %20
-         %21 = OpLabel
-               OpStore %S %int_0 None
-               OpBranch %20
+         %15 = OpLabel
+         %16 = OpIEqual %bool %tint_local_index %uint_0
+               OpSelectionMerge %19 None
+               OpBranchConditional %16 %20 %19
          %20 = OpLabel
+               OpStore %S %int_0 None
+               OpBranch %19
+         %19 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %26 = OpFunctionCall %void %func
+         %25 = OpFunctionCall %void %func
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpLoad %uint %main_local_invocation_index_Input None
-         %30 = OpFunctionCall %void %main_inner %29
+         %27 = OpLabel
+         %28 = OpLoad %uint %main_local_invocation_index_Input None
+         %29 = OpFunctionCall %void %main_inner %28
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.spvasm
index bff592d..1acbb95 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 31
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -23,35 +23,34 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %10 = OpTypeFunction %void
-         %13 = OpConstantNull %v4float
-         %16 = OpTypeFunction %void %uint
+         %12 = OpConstantNull %v4float
+         %15 = OpTypeFunction %void %uint
      %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
        %func = OpFunction %void None %10
          %11 = OpLabel
-         %12 = OpAccessChain %_ptr_Workgroup_v4float %S
-               OpStore %12 %13 None
+               OpStore %S %12 None
                OpReturn
                OpFunctionEnd
- %main_inner = OpFunction %void None %16
+ %main_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
-         %17 = OpLabel
-         %18 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %21 None
-               OpBranchConditional %18 %22 %21
-         %22 = OpLabel
-               OpStore %S %13 None
-               OpBranch %21
+         %16 = OpLabel
+         %17 = OpIEqual %bool %tint_local_index %uint_0
+               OpSelectionMerge %20 None
+               OpBranchConditional %17 %21 %20
          %21 = OpLabel
+               OpStore %S %12 None
+               OpBranch %20
+         %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %26 = OpFunctionCall %void %func
+         %25 = OpFunctionCall %void %func
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %10
-         %28 = OpLabel
-         %29 = OpLoad %uint %main_local_invocation_index_Input None
-         %30 = OpFunctionCall %void %main_inner %29
+         %27 = OpLabel
+         %28 = OpLoad %uint %main_local_invocation_index_Input None
+         %29 = OpFunctionCall %void %main_inner %28
                OpReturn
                OpFunctionEnd