Remove the loop from workgroup zero initialization when unnecessary

If the number of sequential stores is less than or equal to the
workgroup size we can simply use invocation index directly to index
the per invocation zero initialization.

Bug: 379909355,42241359
Change-Id: I548be2a78af3ccef27b92354a1d141f009eb0acc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/214615
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Peter McNeeley <petermcneeley@google.com>
Reviewed-by: Alan Baker <alanbaker@google.com>
diff --git a/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc b/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc
index e4ddda2..65e5a29 100644
--- a/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc
+++ b/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc
@@ -134,26 +134,27 @@
         // Get the local invocation index and the linearized workgroup size.
         auto* local_index = GetLocalInvocationIndex(func);
 
+        auto wgsizes = func->WorkgroupSizeAsConst();
+        TINT_ASSERT(wgsizes);
+        auto wgsize = wgsizes.value()[0] * wgsizes.value()[1] * wgsizes.value()[2];
+
         // Insert instructions to zero-initialize every variable.
         b.InsertBefore(function_start, [&] {
             for (auto count : sorted_iteration_counts) {
                 auto element_stores = stores.Get(count);
-                if (count == 1u) {
-                    // Make the first invocation in the group perform all of the non-arrayed stores.
-                    auto* ifelse = b.If(b.Equal(ty.bool_(), local_index, 0_u));
+                TINT_ASSERT(count);
+                // No loop is required if we have at least as many invocations than counts.
+                if (count <= wgsize) {
+                    // Make the first |count| invocations in the group perform the arrayed stores.
+                    auto* ifelse = b.If(b.LessThan(ty.bool_(), local_index, u32(count)));
                     b.Append(ifelse->True(), [&] {
                         for (auto& store : *element_stores) {
-                            GenerateStore(store, count, b.Constant(0_u));
+                            GenerateStore(store, count, local_index);
                         }
                         b.ExitIf(ifelse);
                     });
                 } else {
-                    auto wgsizes = func->WorkgroupSizeAsConst();
-                    TINT_ASSERT(wgsizes);
-
-                    auto wgsize = wgsizes.value()[0] * wgsizes.value()[1] * wgsizes.value()[2];
-
-                    // Use a loop for arrayed stores.
+                    // Use a loop for arrayed stores that exceed the wgsize
                     b.LoopRange(ty, local_index, u32(count), u32(wgsize), [&](Value* index) {
                         for (auto& store : *element_stores) {
                             GenerateStore(store, count, index);
diff --git a/src/tint/lang/core/ir/transform/zero_init_workgroup_memory_test.cc b/src/tint/lang/core/ir/transform/zero_init_workgroup_memory_test.cc
index b77052e..6a73264 100644
--- a/src/tint/lang/core/ir/transform/zero_init_workgroup_memory_test.cc
+++ b/src/tint/lang/core/ir/transform/zero_init_workgroup_memory_test.cc
@@ -173,7 +173,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, false
@@ -222,7 +222,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, 0i
@@ -271,7 +271,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, 0u
@@ -320,7 +320,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, 0.0f
@@ -369,7 +369,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, 0.0h
@@ -418,7 +418,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         %5:void = atomicStore %wgvar, 0i
@@ -467,7 +467,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         %5:void = atomicStore %wgvar, 0u
@@ -516,28 +516,16 @@
 
 %main = @compute @workgroup_size(11u, 2u, 3u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
-      $B3: {  # initializer
-        next_iteration %tint_local_index  # -> $B4
-      }
-      $B4 (%idx:u32): {  # body
-        %5:bool = gte %idx, 4u
-        if %5 [t: $B6] {  # if_1
-          $B6: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %6:ptr<workgroup, i32, read_write> = access %wgvar, %idx
-        store %6, 0i
-        continue  # -> $B5
-      }
-      $B5: {  # continuing
-        %7:u32 = add %idx, 66u
-        next_iteration %7  # -> $B4
+    %4:bool = lt %tint_local_index, 4u
+    if %4 [t: $B3] {  # if_1
+      $B3: {  # true
+        %5:ptr<workgroup, i32, read_write> = access %wgvar, %tint_local_index
+        store %5, 0i
+        exit_if  # if_1
       }
     }
-    %8:void = workgroupBarrier
-    %9:array<i32, 4> = load %wgvar
+    %6:void = workgroupBarrier
+    %7:array<i32, 4> = load %wgvar
     ret
   }
 }
@@ -578,30 +566,18 @@
 
 %main = @compute @workgroup_size(11u, 2u, 3u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
-      $B3: {  # initializer
-        next_iteration %tint_local_index  # -> $B4
-      }
-      $B4 (%idx:u32): {  # body
-        %5:bool = gte %idx, 35u
-        if %5 [t: $B6] {  # if_1
-          $B6: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %6:u32 = mod %idx, 5u
-        %7:u32 = div %idx, 5u
-        %8:ptr<workgroup, u32, read_write> = access %wgvar, %7, %6
-        store %8, 0u
-        continue  # -> $B5
-      }
-      $B5: {  # continuing
-        %9:u32 = add %idx, 66u
-        next_iteration %9  # -> $B4
+    %4:bool = lt %tint_local_index, 35u
+    if %4 [t: $B3] {  # if_1
+      $B3: {  # true
+        %5:u32 = mod %tint_local_index, 5u
+        %6:u32 = div %tint_local_index, 5u
+        %7:ptr<workgroup, u32, read_write> = access %wgvar, %6, %5
+        store %7, 0u
+        exit_if  # if_1
       }
     }
-    %10:void = workgroupBarrier
-    %11:array<array<u32, 5>, 7> = load %wgvar
+    %8:void = workgroupBarrier
+    %9:array<array<u32, 5>, 7> = load %wgvar
     ret
   }
 }
@@ -900,7 +876,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         %5:ptr<workgroup, i32, read_write> = access %wgvar, 0u, 0u
@@ -967,7 +943,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, MyStruct(0i, 0u, 0.0f)
@@ -1047,7 +1023,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, Outer(0.0f, Inner(0i, 0u), false)
@@ -1127,7 +1103,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         %5:ptr<workgroup, f32, read_write> = access %wgvar, 0u
@@ -1215,56 +1191,44 @@
 
 %main = @compute @workgroup_size(7u, 3u, 2u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
-      $B3: {  # initializer
-        next_iteration %tint_local_index  # -> $B4
+    %4:bool = lt %tint_local_index, 7u
+    if %4 [t: $B3] {  # if_1
+      $B3: {  # true
+        %5:ptr<workgroup, f32, read_write> = access %wgvar, %tint_local_index, 0u
+        store %5, 0.0f
+        %6:ptr<workgroup, bool, read_write> = access %wgvar, %tint_local_index, 2u
+        store %6, false
+        exit_if  # if_1
       }
-      $B4 (%idx:u32): {  # body
-        %5:bool = gte %idx, 7u
-        if %5 [t: $B6] {  # if_1
-          $B6: {  # true
+    }
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration %tint_local_index  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %8:bool = gte %idx, 91u
+        if %8 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %6:ptr<workgroup, f32, read_write> = access %wgvar, %idx, 0u
-        store %6, 0.0f
-        %7:ptr<workgroup, bool, read_write> = access %wgvar, %idx, 2u
-        store %7, false
-        continue  # -> $B5
+        %9:u32 = mod %idx, 13u
+        %10:u32 = div %idx, 13u
+        %11:ptr<workgroup, i32, read_write> = access %wgvar, %10, 1u, %9, 0u
+        store %11, 0i
+        %12:u32 = mod %idx, 13u
+        %13:u32 = div %idx, 13u
+        %14:ptr<workgroup, atomic<u32>, read_write> = access %wgvar, %13, 1u, %12, 1u
+        %15:void = atomicStore %14, 0u
+        continue  # -> $B6
       }
-      $B5: {  # continuing
-        %8:u32 = add %idx, 42u
-        next_iteration %8  # -> $B4
+      $B6: {  # continuing
+        %16:u32 = add %idx, 42u
+        next_iteration %16  # -> $B5
       }
     }
-    loop [i: $B7, b: $B8, c: $B9] {  # loop_2
-      $B7: {  # initializer
-        next_iteration %tint_local_index  # -> $B8
-      }
-      $B8 (%idx_1:u32): {  # body
-        %10:bool = gte %idx_1, 91u
-        if %10 [t: $B10] {  # if_2
-          $B10: {  # true
-            exit_loop  # loop_2
-          }
-        }
-        %11:u32 = mod %idx_1, 13u
-        %12:u32 = div %idx_1, 13u
-        %13:ptr<workgroup, i32, read_write> = access %wgvar, %12, 1u, %11, 0u
-        store %13, 0i
-        %14:u32 = mod %idx_1, 13u
-        %15:u32 = div %idx_1, 13u
-        %16:ptr<workgroup, atomic<u32>, read_write> = access %wgvar, %15, 1u, %14, 1u
-        %17:void = atomicStore %16, 0u
-        continue  # -> $B9
-      }
-      $B9: {  # continuing
-        %18:u32 = add %idx_1, 42u
-        next_iteration %18  # -> $B8
-      }
-    }
-    %19:void = workgroupBarrier
-    %20:array<Outer, 7> = load %wgvar
+    %17:void = workgroupBarrier
+    %18:array<Outer, 7> = load %wgvar
     ret
   }
 }
@@ -1315,59 +1279,35 @@
 
 %main = @compute @workgroup_size(11u, 2u, 3u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %6:bool = eq %tint_local_index, 0u
+    %6:bool = lt %tint_local_index, 1u
     if %6 [t: $B3] {  # if_1
       $B3: {  # true
         store %var_a, false
         exit_if  # if_1
       }
     }
-    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
-      $B4: {  # initializer
-        next_iteration %tint_local_index  # -> $B5
-      }
-      $B5 (%idx:u32): {  # body
-        %8:bool = gte %idx, 4u
-        if %8 [t: $B7] {  # if_2
-          $B7: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %9:ptr<workgroup, i32, read_write> = access %var_b, %idx
-        store %9, 0i
-        continue  # -> $B6
-      }
-      $B6: {  # continuing
-        %10:u32 = add %idx, 66u
-        next_iteration %10  # -> $B5
+    %7:bool = lt %tint_local_index, 4u
+    if %7 [t: $B4] {  # if_2
+      $B4: {  # true
+        %8:ptr<workgroup, i32, read_write> = access %var_b, %tint_local_index
+        store %8, 0i
+        exit_if  # if_2
       }
     }
-    loop [i: $B8, b: $B9, c: $B10] {  # loop_2
-      $B8: {  # initializer
-        next_iteration %tint_local_index  # -> $B9
-      }
-      $B9 (%idx_1:u32): {  # body
-        %12:bool = gte %idx_1, 35u
-        if %12 [t: $B11] {  # if_3
-          $B11: {  # true
-            exit_loop  # loop_2
-          }
-        }
-        %13:u32 = mod %idx_1, 5u
-        %14:u32 = div %idx_1, 5u
-        %15:ptr<workgroup, u32, read_write> = access %var_c, %14, %13
-        store %15, 0u
-        continue  # -> $B10
-      }
-      $B10: {  # continuing
-        %16:u32 = add %idx_1, 66u
-        next_iteration %16  # -> $B9
+    %9:bool = lt %tint_local_index, 35u
+    if %9 [t: $B5] {  # if_3
+      $B5: {  # true
+        %10:u32 = mod %tint_local_index, 5u
+        %11:u32 = div %tint_local_index, 5u
+        %12:ptr<workgroup, u32, read_write> = access %var_c, %11, %10
+        store %12, 0u
+        exit_if  # if_3
       }
     }
-    %17:void = workgroupBarrier
-    %18:bool = load %var_a
-    %19:array<i32, 4> = load %var_b
-    %20:array<array<u32, 5>, 7> = load %var_c
+    %13:void = workgroupBarrier
+    %14:bool = load %var_a
+    %15:array<i32, 4> = load %var_b
+    %16:array<array<u32, 5>, 7> = load %var_c
     ret
   }
 }
@@ -1423,7 +1363,7 @@
 
 %main = @compute @workgroup_size(11u, 2u, 3u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %7:bool = eq %tint_local_index, 0u
+    %7:bool = lt %tint_local_index, 1u
     if %7 [t: $B3] {  # if_1
       $B3: {  # true
         store %var_a, false
@@ -1431,35 +1371,23 @@
         exit_if  # if_1
       }
     }
-    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
-      $B4: {  # initializer
-        next_iteration %tint_local_index  # -> $B5
-      }
-      $B5 (%idx:u32): {  # body
-        %9:bool = gte %idx, 42u
-        if %9 [t: $B7] {  # if_2
-          $B7: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %10:ptr<workgroup, i32, read_write> = access %var_c, %idx
-        store %10, 0i
-        %11:u32 = mod %idx, 6u
-        %12:u32 = div %idx, 6u
-        %13:ptr<workgroup, u32, read_write> = access %var_d, %12, %11
-        store %13, 0u
-        continue  # -> $B6
-      }
-      $B6: {  # continuing
-        %14:u32 = add %idx, 66u
-        next_iteration %14  # -> $B5
+    %8:bool = lt %tint_local_index, 42u
+    if %8 [t: $B4] {  # if_2
+      $B4: {  # true
+        %9:ptr<workgroup, i32, read_write> = access %var_c, %tint_local_index
+        store %9, 0i
+        %10:u32 = mod %tint_local_index, 6u
+        %11:u32 = div %tint_local_index, 6u
+        %12:ptr<workgroup, u32, read_write> = access %var_d, %11, %10
+        store %12, 0u
+        exit_if  # if_2
       }
     }
-    %15:void = workgroupBarrier
-    %16:bool = load %var_a
-    %17:i32 = load %var_b
-    %18:array<i32, 42> = load %var_c
-    %19:array<array<u32, 6>, 7> = load %var_d
+    %13:void = workgroupBarrier
+    %14:bool = load %var_a
+    %15:i32 = load %var_b
+    %16:array<i32, 42> = load %var_c
+    %17:array<array<u32, 6>, 7> = load %var_d
     ret
   }
 }
@@ -1505,7 +1433,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%global_id:vec3<u32> [@global_invocation_id], %index:u32 [@local_invocation_index]):void {
   $B2: {
-    %5:bool = eq %index, 0u
+    %5:bool = lt %index, 1u
     if %5 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, false
@@ -1593,7 +1521,7 @@
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%params:MyStruct):void {
   $B2: {
     %4:u32 = access %params, 1u
-    %5:bool = eq %4, 0u
+    %5:bool = lt %4, 1u
     if %5 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, false
@@ -1676,7 +1604,7 @@
 
 %main = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B2: {
-    %4:bool = eq %tint_local_index, 0u
+    %4:bool = lt %tint_local_index, 1u
     if %4 [t: $B3] {  # if_1
       $B3: {  # true
         store %wgvar, false
@@ -1850,7 +1778,7 @@
 }
 %func = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B7: {
-    %8:bool = eq %tint_local_index, 0u
+    %8:bool = lt %tint_local_index, 1u
     if %8 [t: $B8] {  # if_2
       $B8: {  # true
         store %wgvar, false
@@ -1970,7 +1898,7 @@
 }
 %ep1 = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index:u32 [@local_invocation_index]):void {
   $B5: {
-    %6:bool = eq %tint_local_index, 0u
+    %6:bool = lt %tint_local_index, 1u
     if %6 [t: $B6] {  # if_1
       $B6: {  # true
         store %wgvar, false
@@ -1984,7 +1912,7 @@
 }
 %ep2 = @compute @workgroup_size(1u, 1u, 1u) func(%tint_local_index_1:u32 [@local_invocation_index]):void {  # %tint_local_index_1: 'tint_local_index'
   $B7: {
-    %11:bool = eq %tint_local_index_1, 0u
+    %11:bool = lt %tint_local_index_1, 1u
     if %11 [t: $B8] {  # if_2
       $B8: {  # true
         store %wgvar, false
diff --git a/src/tint/lang/glsl/writer/builtin_test.cc b/src/tint/lang/glsl/writer/builtin_test.cc
index d25eb9c..7339e0f 100644
--- a/src/tint/lang/glsl/writer/builtin_test.cc
+++ b/src/tint/lang/glsl/writer/builtin_test.cc
@@ -274,7 +274,7 @@
 
 shared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = vec4(0.0f);
     atomicExchange(v.a, 0);
     atomicExchange(v.b, 0u);
@@ -319,7 +319,7 @@
 
 shared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = vec4(0.0f);
     atomicExchange(v.a, 0);
     atomicExchange(v.b, 0u);
@@ -370,7 +370,7 @@
 
 shared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = vec4(0.0f);
     atomicExchange(v.a, 0);
     atomicExchange(v.b, 0u);
diff --git a/src/tint/lang/hlsl/writer/builtin_test.cc b/src/tint/lang/hlsl/writer/builtin_test.cc
index 819ce7b..7a13784 100644
--- a/src/tint/lang/hlsl/writer/builtin_test.cc
+++ b/src/tint/lang/hlsl/writer/builtin_test.cc
@@ -495,7 +495,7 @@
 
 groupshared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = (0.0f).xxxx;
     int v_1 = int(0);
     InterlockedExchange(v.a, int(0), v_1);
@@ -546,7 +546,7 @@
 
 groupshared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = (0.0f).xxxx;
     int v_1 = int(0);
     InterlockedExchange(v.a, int(0), v_1);
@@ -600,7 +600,7 @@
 
 groupshared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = (0.0f).xxxx;
     int v_1 = int(0);
     InterlockedExchange(v.a, int(0), v_1);
@@ -662,7 +662,7 @@
 
 groupshared SB v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v.padding = (0.0f).xxxx;
     int v_1 = int(0);
     InterlockedExchange(v.a, int(0), v_1);
@@ -705,7 +705,7 @@
 
 groupshared int v;
 void foo_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(v, int(0), v_1);
   }
diff --git a/src/tint/lang/msl/writer/writer_test.cc b/src/tint/lang/msl/writer/writer_test.cc
index e2a8ccb..065121a 100644
--- a/src/tint/lang/msl/writer/writer_test.cc
+++ b/src/tint/lang/msl/writer/writer_test.cc
@@ -68,7 +68,7 @@
 };
 
 void foo_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.a) = 0;
     (*tint_module_vars.b) = 0;
   }
diff --git a/src/tint/lang/spirv/writer/var_test.cc b/src/tint/lang/spirv/writer/var_test.cc
index 2e8b159..472b88f 100644
--- a/src/tint/lang/spirv/writer/var_test.cc
+++ b/src/tint/lang/spirv/writer/var_test.cc
@@ -349,7 +349,7 @@
 %foo_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input   ; BuiltIn LocalInvocationIndex
        %void = OpTypeVoid
          %10 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
      %uint_2 = OpConstant %uint 2
@@ -361,7 +361,7 @@
   %foo_inner = OpFunction %void None %10
 %tint_local_index = OpFunctionParameter %uint
          %11 = OpLabel
-         %12 = OpIEqual %bool %tint_local_index %uint_0
+         %12 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %15 None
                OpBranchConditional %12 %16 %15
          %16 = OpLabel
diff --git a/test/tint/access/ptr.wgsl.expected.glsl b/test/tint/access/ptr.wgsl.expected.glsl
index b1f954c..14aaab9 100644
--- a/test/tint/access/ptr.wgsl.expected.glsl
+++ b/test/tint/access/ptr.wgsl.expected.glsl
@@ -40,7 +40,7 @@
   return atomicOr(g1, 0);
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(g1, 0);
   }
   barrier();
diff --git a/test/tint/access/ptr.wgsl.expected.ir.dxc.hlsl b/test/tint/access/ptr.wgsl.expected.ir.dxc.hlsl
index 86b17d3..f8117d5 100644
--- a/test/tint/access/ptr.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/access/ptr.wgsl.expected.ir.dxc.hlsl
@@ -49,7 +49,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_3 = int(0);
     InterlockedExchange(g1, int(0), v_3);
   }
diff --git a/test/tint/access/ptr.wgsl.expected.ir.fxc.hlsl b/test/tint/access/ptr.wgsl.expected.ir.fxc.hlsl
index 86b17d3..f8117d5 100644
--- a/test/tint/access/ptr.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/access/ptr.wgsl.expected.ir.fxc.hlsl
@@ -49,7 +49,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_3 = int(0);
     InterlockedExchange(g1, int(0), v_3);
   }
diff --git a/test/tint/access/ptr.wgsl.expected.ir.msl b/test/tint/access/ptr.wgsl.expected.ir.msl
index 23072a5..30a780e 100644
--- a/test/tint/access/ptr.wgsl.expected.ir.msl
+++ b/test/tint/access/ptr.wgsl.expected.ir.msl
@@ -53,7 +53,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.g1, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/access/ptr.wgsl.expected.spvasm b/test/tint/access/ptr.wgsl.expected.spvasm
index 32031e4..faee905 100644
--- a/test/tint/access/ptr.wgsl.expected.spvasm
+++ b/test/tint/access/ptr.wgsl.expected.spvasm
@@ -150,7 +150,7 @@
          %v1 = OpVariable %_ptr_Function_int Function
          %v2 = OpVariable %_ptr_Function_S Function
          %v4 = OpVariable %_ptr_Function_v3float Function
-         %76 = OpIEqual %bool %tint_local_index %uint_0
+         %76 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %78 None
                OpBranchConditional %76 %79 %78
          %79 = OpLabel
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.glsl
index 5c75eea..a9ee295 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.glsl
@@ -8,7 +8,7 @@
 } v;
 shared f16mat2 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 7867503..8f5344a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -21,7 +21,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 2, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
index 732eb75..0df3685 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = half2x2(half2(0.0h), half2(0.0h));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.spvasm
index dfaf52d..b5e9ba5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.spvasm
@@ -38,13 +38,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat2v2half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v2half = OpTypePointer Uniform %v2half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v2half = OpTypePointer Workgroup %v2half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -55,7 +55,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -64,10 +64,10 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_0
-         %28 = OpLoad %v2half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_1
-         %31 = OpLoad %v2half %29 None
-         %32 = OpCompositeConstruct %mat2v2half %28 %31
+         %29 = OpLoad %v2half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_1
+         %31 = OpLoad %v2half %30 None
+         %32 = OpCompositeConstruct %mat2v2half %29 %31
                OpStore %w %32 None
          %33 = OpAccessChain %_ptr_Workgroup_v2half %w %int_1
          %37 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.glsl
index cb7a84d..52bedbc 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 } v;
 shared mat2 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat2(vec2(0.0f), vec2(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 827c388..412c226 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -15,7 +15,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index 827c388..412c226 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -15,7 +15,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
index e703fce..df40be3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = float2x2(float2(0.0f), float2(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.spvasm
index 43d86c0..2a7d2dd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.spvasm
@@ -35,13 +35,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat2v2float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v2float = OpTypePointer Workgroup %v2float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -52,7 +52,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -61,10 +61,10 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0
-         %28 = OpLoad %v2float %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_1
-         %31 = OpLoad %v2float %29 None
-         %32 = OpCompositeConstruct %mat2v2float %28 %31
+         %29 = OpLoad %v2float %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_1
+         %31 = OpLoad %v2float %30 None
+         %32 = OpCompositeConstruct %mat2v2float %29 %31
                OpStore %w %32 None
          %33 = OpAccessChain %_ptr_Workgroup_v2float %w %int_1
          %37 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.glsl
index d74d21e..148abc0 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.glsl
@@ -8,7 +8,7 @@
 } v;
 shared f16mat2x3 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index ba64100..cfef2c4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -27,7 +27,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 2, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
index 9aaf986..42c1dd1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -28,7 +28,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w)[0u].packed = packed_half3(half2x3(half3(0.0h), half3(0.0h))[0u]);
     (*tint_module_vars.w)[1u].packed = packed_half3(half2x3(half3(0.0h), half3(0.0h))[1u]);
   }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.spvasm
index ad8828b..87ca4b1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.spvasm
@@ -38,13 +38,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat2v3half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v3half = OpTypePointer Uniform %v3half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v3half = OpTypePointer Workgroup %v3half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -55,7 +55,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -64,10 +64,10 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0
-         %28 = OpLoad %v3half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_1
-         %31 = OpLoad %v3half %29 None
-         %32 = OpCompositeConstruct %mat2v3half %28 %31
+         %29 = OpLoad %v3half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_1
+         %31 = OpLoad %v3half %30 None
+         %32 = OpCompositeConstruct %mat2v3half %29 %31
                OpStore %w %32 None
          %33 = OpAccessChain %_ptr_Workgroup_v3half %w %int_1
          %37 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.glsl
index d9ee799..c4c8bec 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.glsl
@@ -8,7 +8,7 @@
 } v;
 shared mat2x3 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat2x3(vec3(0.0f), vec3(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index c75d957..5f3b3d2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float2x3((0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index c75d957..5f3b3d2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float2x3((0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
index cf6e77f..64dbf80 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -28,7 +28,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w)[0u].packed = packed_float3(float2x3(float3(0.0f), float3(0.0f))[0u]);
     (*tint_module_vars.w)[1u].packed = packed_float3(float2x3(float3(0.0f), float3(0.0f))[1u]);
   }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.spvasm
index e5c7e50..61dd745 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.spvasm
@@ -35,13 +35,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat2v3float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v3float = OpTypePointer Workgroup %v3float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -52,7 +52,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -61,10 +61,10 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0
-         %28 = OpLoad %v3float %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_1
-         %31 = OpLoad %v3float %29 None
-         %32 = OpCompositeConstruct %mat2v3float %28 %31
+         %29 = OpLoad %v3float %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_1
+         %31 = OpLoad %v3float %30 None
+         %32 = OpCompositeConstruct %mat2v3float %29 %31
                OpStore %w %32 None
          %33 = OpAccessChain %_ptr_Workgroup_v3float %w %int_1
          %37 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.glsl
index 4ccea15..f483be7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.glsl
@@ -8,7 +8,7 @@
 } v;
 shared f16mat2x4 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 2005ad4..47ef6b5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -27,7 +27,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 2, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
index 3f6af96..7b1c517 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = half2x4(half4(0.0h), half4(0.0h));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.spvasm
index 387f018..ded851d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.spvasm
@@ -38,13 +38,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat2v4half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v4half = OpTypePointer Uniform %v4half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v4half = OpTypePointer Workgroup %v4half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -55,7 +55,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -64,10 +64,10 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_0
-         %28 = OpLoad %v4half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_1
-         %31 = OpLoad %v4half %29 None
-         %32 = OpCompositeConstruct %mat2v4half %28 %31
+         %29 = OpLoad %v4half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_1
+         %31 = OpLoad %v4half %30 None
+         %32 = OpCompositeConstruct %mat2v4half %29 %31
                OpStore %w %32 None
          %33 = OpAccessChain %_ptr_Workgroup_v4half %w %int_1
          %37 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.glsl
index fb76001..a1220c7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 } v;
 shared mat2x4 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat2x4(vec4(0.0f), vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 0e9fa0a..2d38c45 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float2x4((0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index 0e9fa0a..2d38c45 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float2x4((0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
index 58736a5..98586d3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = float2x4(float4(0.0f), float4(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.spvasm
index fa4c8db..a41475b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 53
+; Bound: 54
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,12 +35,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat2v4float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_mat2v4float = OpTypePointer Uniform %mat2v4float
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -48,11 +49,11 @@
       %int_0 = OpConstant %int 0
 %_ptr_Uniform_float = OpTypePointer Uniform %float
 %_ptr_Workgroup_float = OpTypePointer Workgroup %float
-         %49 = OpTypeFunction %void
+         %50 = OpTypeFunction %void
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -61,28 +62,28 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_mat2v4float %1 %uint_0
-         %28 = OpLoad %mat2v4float %26 None
-               OpStore %w %28 None
-         %29 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
-         %33 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
-         %36 = OpLoad %v4float %33 None
-               OpStore %29 %36 None
-         %37 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
-         %38 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
-         %39 = OpLoad %v4float %38 None
-         %40 = OpVectorShuffle %v4float %39 %39 1 3 0 2
-               OpStore %37 %40 None
-         %41 = OpAccessChain %_ptr_Workgroup_v4float %w %int_0
-         %42 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_1
-         %43 = OpAccessChain %_ptr_Uniform_float %42 %int_0
-         %45 = OpLoad %float %43 None
-         %46 = OpAccessChain %_ptr_Workgroup_float %41 %int_1
-               OpStore %46 %45 None
+         %29 = OpLoad %mat2v4float %26 None
+               OpStore %w %29 None
+         %30 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
+         %34 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
+         %37 = OpLoad %v4float %34 None
+               OpStore %30 %37 None
+         %38 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
+         %39 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
+         %40 = OpLoad %v4float %39 None
+         %41 = OpVectorShuffle %v4float %40 %40 1 3 0 2
+               OpStore %38 %41 None
+         %42 = OpAccessChain %_ptr_Workgroup_v4float %w %int_0
+         %43 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_1
+         %44 = OpAccessChain %_ptr_Uniform_float %43 %int_0
+         %46 = OpLoad %float %44 None
+         %47 = OpAccessChain %_ptr_Workgroup_float %42 %int_1
+               OpStore %47 %46 None
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %void None %49
-         %50 = OpLabel
-         %51 = OpLoad %uint %f_local_invocation_index_Input None
-         %52 = OpFunctionCall %void %f_inner %51
+          %f = OpFunction %void None %50
+         %51 = OpLabel
+         %52 = OpLoad %uint %f_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %f_inner %52
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.glsl
index 26e198e..d28a5a2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 } v;
 shared f16mat3x2 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 0a226c8..548882d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -22,7 +22,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 3, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
index 8812355..b1f0e22 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = half3x2(half2(0.0h), half2(0.0h), half2(0.0h));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.spvasm
index 7f400f3..fd0e8bb 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.spvasm
@@ -40,13 +40,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat3v2half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v2half = OpTypePointer Uniform %v2half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v2half = OpTypePointer Workgroup %v2half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -57,7 +57,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -66,12 +66,12 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_0
-         %28 = OpLoad %v2half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_1
-         %31 = OpLoad %v2half %29 None
+         %29 = OpLoad %v2half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_1
+         %31 = OpLoad %v2half %30 None
          %32 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_2
          %33 = OpLoad %v2half %32 None
-         %34 = OpCompositeConstruct %mat3v2half %28 %31 %33
+         %34 = OpCompositeConstruct %mat3v2half %29 %31 %33
                OpStore %w %34 None
          %35 = OpAccessChain %_ptr_Workgroup_v2half %w %int_1
          %39 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.glsl
index bcd473c..d6c5391 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.glsl
@@ -8,7 +8,7 @@
 } v;
 shared mat3x2 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 3803dfd..027cf5d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -17,7 +17,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index 3803dfd..027cf5d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -17,7 +17,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
index 5fa0d42..064aee3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.spvasm
index fab5261..174b69d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.spvasm
@@ -37,13 +37,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat3v2float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v2float = OpTypePointer Workgroup %v2float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -54,7 +54,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -63,12 +63,12 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0
-         %28 = OpLoad %v2float %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_1
-         %31 = OpLoad %v2float %29 None
+         %29 = OpLoad %v2float %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_1
+         %31 = OpLoad %v2float %30 None
          %32 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_2
          %33 = OpLoad %v2float %32 None
-         %34 = OpCompositeConstruct %mat3v2float %28 %31 %33
+         %34 = OpCompositeConstruct %mat3v2float %29 %31 %33
                OpStore %w %34 None
          %35 = OpAccessChain %_ptr_Workgroup_v2float %w %int_1
          %39 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.glsl
index fd9fead..697f7ba 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 } v;
 shared f16mat3 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 8858722..0aa0257 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 3, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
index 01b0533..e0eea63 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -28,7 +28,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w)[0u].packed = packed_half3(half3x3(half3(0.0h), half3(0.0h), half3(0.0h))[0u]);
     (*tint_module_vars.w)[1u].packed = packed_half3(half3x3(half3(0.0h), half3(0.0h), half3(0.0h))[1u]);
     (*tint_module_vars.w)[2u].packed = packed_half3(half3x3(half3(0.0h), half3(0.0h), half3(0.0h))[2u]);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.spvasm
index f30f66c..4ee3fd9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.spvasm
@@ -40,13 +40,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat3v3half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v3half = OpTypePointer Uniform %v3half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v3half = OpTypePointer Workgroup %v3half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -57,7 +57,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -66,12 +66,12 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0
-         %28 = OpLoad %v3half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_1
-         %31 = OpLoad %v3half %29 None
+         %29 = OpLoad %v3half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_1
+         %31 = OpLoad %v3half %30 None
          %32 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_2
          %33 = OpLoad %v3half %32 None
-         %34 = OpCompositeConstruct %mat3v3half %28 %31 %33
+         %34 = OpCompositeConstruct %mat3v3half %29 %31 %33
                OpStore %w %34 None
          %35 = OpAccessChain %_ptr_Workgroup_v3half %w %int_1
          %39 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.glsl
index 0a26083..4dff45b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 } v;
 shared mat3 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index ace6b4f..388b62e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index ace6b4f..388b62e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
index bf89018..7b90d40 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -28,7 +28,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w)[0u].packed = packed_float3(float3x3(float3(0.0f), float3(0.0f), float3(0.0f))[0u]);
     (*tint_module_vars.w)[1u].packed = packed_float3(float3x3(float3(0.0f), float3(0.0f), float3(0.0f))[1u]);
     (*tint_module_vars.w)[2u].packed = packed_float3(float3x3(float3(0.0f), float3(0.0f), float3(0.0f))[2u]);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.spvasm
index aa9d647..a19f5d8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.spvasm
@@ -37,13 +37,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat3v3float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v3float = OpTypePointer Workgroup %v3float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -54,7 +54,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -63,12 +63,12 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0
-         %28 = OpLoad %v3float %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_1
-         %31 = OpLoad %v3float %29 None
+         %29 = OpLoad %v3float %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_1
+         %31 = OpLoad %v3float %30 None
          %32 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_2
          %33 = OpLoad %v3float %32 None
-         %34 = OpCompositeConstruct %mat3v3float %28 %31 %33
+         %34 = OpCompositeConstruct %mat3v3float %29 %31 %33
                OpStore %w %34 None
          %35 = OpAccessChain %_ptr_Workgroup_v3float %w %int_1
          %39 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.glsl
index 3d8ce2a..4bd0b67 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 } v;
 shared f16mat3x4 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index ab242b4..87a62f8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 3, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
index 22cd0a5..0f6403f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = half3x4(half4(0.0h), half4(0.0h), half4(0.0h));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.spvasm
index ef676ef..47906ca 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.spvasm
@@ -40,13 +40,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat3v4half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v4half = OpTypePointer Uniform %v4half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v4half = OpTypePointer Workgroup %v4half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -57,7 +57,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -66,12 +66,12 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_0
-         %28 = OpLoad %v4half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_1
-         %31 = OpLoad %v4half %29 None
+         %29 = OpLoad %v4half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_1
+         %31 = OpLoad %v4half %30 None
          %32 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_2
          %33 = OpLoad %v4half %32 None
-         %34 = OpCompositeConstruct %mat3v4half %28 %31 %33
+         %34 = OpCompositeConstruct %mat3v4half %29 %31 %33
                OpStore %w %34 None
          %35 = OpAccessChain %_ptr_Workgroup_v4half %w %int_1
          %39 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.glsl
index c71efb0..b73e948 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 } v;
 shared mat3x4 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index f787945..931c72e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index f787945..931c72e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
index 6b9b0d5..66a35fb 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.spvasm
index a122fd1..0effa98 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 53
+; Bound: 54
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,12 +35,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat3v4float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_mat3v4float = OpTypePointer Uniform %mat3v4float
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -48,11 +49,11 @@
       %int_0 = OpConstant %int 0
 %_ptr_Uniform_float = OpTypePointer Uniform %float
 %_ptr_Workgroup_float = OpTypePointer Workgroup %float
-         %49 = OpTypeFunction %void
+         %50 = OpTypeFunction %void
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -61,28 +62,28 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_mat3v4float %1 %uint_0
-         %28 = OpLoad %mat3v4float %26 None
-               OpStore %w %28 None
-         %29 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
-         %33 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
-         %36 = OpLoad %v4float %33 None
-               OpStore %29 %36 None
-         %37 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
-         %38 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
-         %39 = OpLoad %v4float %38 None
-         %40 = OpVectorShuffle %v4float %39 %39 1 3 0 2
-               OpStore %37 %40 None
-         %41 = OpAccessChain %_ptr_Workgroup_v4float %w %int_0
-         %42 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_1
-         %43 = OpAccessChain %_ptr_Uniform_float %42 %int_0
-         %45 = OpLoad %float %43 None
-         %46 = OpAccessChain %_ptr_Workgroup_float %41 %int_1
-               OpStore %46 %45 None
+         %29 = OpLoad %mat3v4float %26 None
+               OpStore %w %29 None
+         %30 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
+         %34 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
+         %37 = OpLoad %v4float %34 None
+               OpStore %30 %37 None
+         %38 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
+         %39 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
+         %40 = OpLoad %v4float %39 None
+         %41 = OpVectorShuffle %v4float %40 %40 1 3 0 2
+               OpStore %38 %41 None
+         %42 = OpAccessChain %_ptr_Workgroup_v4float %w %int_0
+         %43 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_1
+         %44 = OpAccessChain %_ptr_Uniform_float %43 %int_0
+         %46 = OpLoad %float %44 None
+         %47 = OpAccessChain %_ptr_Workgroup_float %42 %int_1
+               OpStore %47 %46 None
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %void None %49
-         %50 = OpLabel
-         %51 = OpLoad %uint %f_local_invocation_index_Input None
-         %52 = OpFunctionCall %void %f_inner %51
+          %f = OpFunction %void None %50
+         %51 = OpLabel
+         %52 = OpLoad %uint %f_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %f_inner %52
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.glsl
index a570ef1..482b288 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 } v;
 shared f16mat4x2 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 36cc521..792e5a6 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -23,7 +23,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 4, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
index 5779315..11fcbda 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = half4x2(half2(0.0h), half2(0.0h), half2(0.0h), half2(0.0h));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.spvasm
index 23bd654..2fce08c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.spvasm
@@ -42,13 +42,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat4v2half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v2half = OpTypePointer Uniform %v2half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
      %uint_3 = OpConstant %uint 3
 %_ptr_Workgroup_v2half = OpTypePointer Workgroup %v2half
         %int = OpTypeInt 32 1
@@ -60,7 +60,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -69,14 +69,14 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_0
-         %28 = OpLoad %v2half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_1
-         %31 = OpLoad %v2half %29 None
+         %29 = OpLoad %v2half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_1
+         %31 = OpLoad %v2half %30 None
          %32 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_2
          %33 = OpLoad %v2half %32 None
          %34 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_3
          %36 = OpLoad %v2half %34 None
-         %37 = OpCompositeConstruct %mat4v2half %28 %31 %33 %36
+         %37 = OpCompositeConstruct %mat4v2half %29 %31 %33 %36
                OpStore %w %37 None
          %38 = OpAccessChain %_ptr_Workgroup_v2half %w %int_1
          %42 = OpAccessChain %_ptr_Uniform_v2half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.glsl
index b566cc1..4431089 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 } v;
 shared mat4x2 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 02f437e..380780f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -19,7 +19,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index 02f437e..380780f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -19,7 +19,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
index a0a3c58..4706982 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = float4x2(float2(0.0f), float2(0.0f), float2(0.0f), float2(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.spvasm
index df0bb52..f4f505e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.spvasm
@@ -39,13 +39,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat4v2float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
      %uint_3 = OpConstant %uint 3
 %_ptr_Workgroup_v2float = OpTypePointer Workgroup %v2float
         %int = OpTypeInt 32 1
@@ -57,7 +57,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -66,14 +66,14 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0
-         %28 = OpLoad %v2float %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_1
-         %31 = OpLoad %v2float %29 None
+         %29 = OpLoad %v2float %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_1
+         %31 = OpLoad %v2float %30 None
          %32 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_2
          %33 = OpLoad %v2float %32 None
          %34 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_3
          %36 = OpLoad %v2float %34 None
-         %37 = OpCompositeConstruct %mat4v2float %28 %31 %33 %36
+         %37 = OpCompositeConstruct %mat4v2float %29 %31 %33 %36
                OpStore %w %37 None
          %38 = OpAccessChain %_ptr_Workgroup_v2float %w %int_1
          %42 = OpAccessChain %_ptr_Uniform_v2float %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.glsl
index 6b0b9cb..f2567d1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 } v;
 shared f16mat4x3 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 645f61f..6ed3117 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -31,7 +31,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 4, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
index 0ffcaa2..a55b467 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -28,7 +28,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w)[0u].packed = packed_half3(half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h))[0u]);
     (*tint_module_vars.w)[1u].packed = packed_half3(half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h))[1u]);
     (*tint_module_vars.w)[2u].packed = packed_half3(half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h))[2u]);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.spvasm
index b7afcb0..195ede9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.spvasm
@@ -42,13 +42,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat4v3half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v3half = OpTypePointer Uniform %v3half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
      %uint_3 = OpConstant %uint 3
 %_ptr_Workgroup_v3half = OpTypePointer Workgroup %v3half
         %int = OpTypeInt 32 1
@@ -60,7 +60,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -69,14 +69,14 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0
-         %28 = OpLoad %v3half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_1
-         %31 = OpLoad %v3half %29 None
+         %29 = OpLoad %v3half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_1
+         %31 = OpLoad %v3half %30 None
          %32 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_2
          %33 = OpLoad %v3half %32 None
          %34 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_3
          %36 = OpLoad %v3half %34 None
-         %37 = OpCompositeConstruct %mat4v3half %28 %31 %33 %36
+         %37 = OpCompositeConstruct %mat4v3half %29 %31 %33 %36
                OpStore %w %37 None
          %38 = OpAccessChain %_ptr_Workgroup_v3half %w %int_1
          %42 = OpAccessChain %_ptr_Uniform_v3half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.glsl
index e72b9b7..ec98e9b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.glsl
@@ -12,7 +12,7 @@
 } v;
 shared mat4x3 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 5ec546d..643dded 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index 5ec546d..643dded 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
index 3ce7418..5184bae 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -28,7 +28,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w)[0u].packed = packed_float3(float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f))[0u]);
     (*tint_module_vars.w)[1u].packed = packed_float3(float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f))[1u]);
     (*tint_module_vars.w)[2u].packed = packed_float3(float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f))[2u]);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.spvasm
index 62c0b34..a0fd871 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.spvasm
@@ -39,13 +39,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat4v3float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
      %uint_3 = OpConstant %uint 3
 %_ptr_Workgroup_v3float = OpTypePointer Workgroup %v3float
         %int = OpTypeInt 32 1
@@ -57,7 +57,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -66,14 +66,14 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0
-         %28 = OpLoad %v3float %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_1
-         %31 = OpLoad %v3float %29 None
+         %29 = OpLoad %v3float %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_1
+         %31 = OpLoad %v3float %30 None
          %32 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_2
          %33 = OpLoad %v3float %32 None
          %34 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_3
          %36 = OpLoad %v3float %34 None
-         %37 = OpCompositeConstruct %mat4v3float %28 %31 %33 %36
+         %37 = OpCompositeConstruct %mat4v3float %29 %31 %33 %36
                OpStore %w %37 None
          %38 = OpAccessChain %_ptr_Workgroup_v3float %w %int_1
          %42 = OpAccessChain %_ptr_Uniform_v3float %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.glsl
index 38d0d8d..d5c0d5a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 } v;
 shared f16mat4 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 2cff1e1..051393c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -31,7 +31,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = matrix<float16_t, 4, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
index edd87c2..14f05fa 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.spvasm
index 3d36e7d..590c66e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.spvasm
@@ -42,13 +42,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat4v4half
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_v4half = OpTypePointer Uniform %v4half
-     %uint_1 = OpConstant %uint 1
+     %uint_0 = OpConstant %uint 0
      %uint_3 = OpConstant %uint 3
 %_ptr_Workgroup_v4half = OpTypePointer Workgroup %v4half
         %int = OpTypeInt 32 1
@@ -60,7 +60,7 @@
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -69,14 +69,14 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_0
-         %28 = OpLoad %v4half %26 None
-         %29 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_1
-         %31 = OpLoad %v4half %29 None
+         %29 = OpLoad %v4half %26 None
+         %30 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_1
+         %31 = OpLoad %v4half %30 None
          %32 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_2
          %33 = OpLoad %v4half %32 None
          %34 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_3
          %36 = OpLoad %v4half %34 None
-         %37 = OpCompositeConstruct %mat4v4half %28 %31 %33 %36
+         %37 = OpCompositeConstruct %mat4v4half %29 %31 %33 %36
                OpStore %w %37 None
          %38 = OpAccessChain %_ptr_Workgroup_v4half %w %int_1
          %42 = OpAccessChain %_ptr_Uniform_v4half %1 %uint_0
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.glsl
index 726d327..0b67423 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 } v;
 shared mat4 w;
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
index 9a18993..3a5da76 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
index 9a18993..3a5da76 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -12,7 +12,7 @@
 }
 
 void f_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
index baab54a..d94ad9c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void f_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.spvasm b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.spvasm
index fe610b0..1d8e9c4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.spvasm
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 53
+; Bound: 54
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,12 +35,13 @@
 %f_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %mat4v4float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float
+     %uint_0 = OpConstant %uint 0
 %_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
@@ -48,11 +49,11 @@
       %int_0 = OpConstant %int 0
 %_ptr_Uniform_float = OpTypePointer Uniform %float
 %_ptr_Workgroup_float = OpTypePointer Workgroup %float
-         %49 = OpTypeFunction %void
+         %50 = OpTypeFunction %void
     %f_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
@@ -61,28 +62,28 @@
          %20 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %26 = OpAccessChain %_ptr_Uniform_mat4v4float %1 %uint_0
-         %28 = OpLoad %mat4v4float %26 None
-               OpStore %w %28 None
-         %29 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
-         %33 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
-         %36 = OpLoad %v4float %33 None
-               OpStore %29 %36 None
-         %37 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
-         %38 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
-         %39 = OpLoad %v4float %38 None
-         %40 = OpVectorShuffle %v4float %39 %39 1 3 0 2
-               OpStore %37 %40 None
-         %41 = OpAccessChain %_ptr_Workgroup_v4float %w %int_0
-         %42 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_1
-         %43 = OpAccessChain %_ptr_Uniform_float %42 %int_0
-         %45 = OpLoad %float %43 None
-         %46 = OpAccessChain %_ptr_Workgroup_float %41 %int_1
-               OpStore %46 %45 None
+         %29 = OpLoad %mat4v4float %26 None
+               OpStore %w %29 None
+         %30 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
+         %34 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
+         %37 = OpLoad %v4float %34 None
+               OpStore %30 %37 None
+         %38 = OpAccessChain %_ptr_Workgroup_v4float %w %int_1
+         %39 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_0
+         %40 = OpLoad %v4float %39 None
+         %41 = OpVectorShuffle %v4float %40 %40 1 3 0 2
+               OpStore %38 %41 None
+         %42 = OpAccessChain %_ptr_Workgroup_v4float %w %int_0
+         %43 = OpAccessChain %_ptr_Uniform_v4float %1 %uint_0 %int_1
+         %44 = OpAccessChain %_ptr_Uniform_float %43 %int_0
+         %46 = OpLoad %float %44 None
+         %47 = OpAccessChain %_ptr_Workgroup_float %42 %int_1
+               OpStore %47 %46 None
                OpReturn
                OpFunctionEnd
-          %f = OpFunction %void None %49
-         %50 = OpLabel
-         %51 = OpLoad %uint %f_local_invocation_index_Input None
-         %52 = OpFunctionCall %void %f_inner %51
+          %f = OpFunction %void None %50
+         %51 = OpLabel
+         %52 = OpLoad %uint %f_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %f_inner %52
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.glsl b/test/tint/bug/chromium/40943165.wgsl.expected.glsl
index 742f6f7..e30660d 100644
--- a/test/tint/bug/chromium/40943165.wgsl.expected.glsl
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 shared mat2 W;
 void F_inner(uint tint_symbol) {
-  if ((tint_symbol == 0u)) {
+  if ((tint_symbol < 1u)) {
     W = mat2(vec2(0.0f), vec2(0.0f));
   }
   barrier();
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/chromium/40943165.wgsl.expected.ir.dxc.hlsl
index d7119a2..75cd365 100644
--- a/test/tint/bug/chromium/40943165.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.ir.dxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared float2x2 W;
 void F_inner(uint mat2x2_1) {
-  if ((mat2x2_1 == 0u)) {
+  if ((mat2x2_1 < 1u)) {
     W = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/chromium/40943165.wgsl.expected.ir.fxc.hlsl
index d7119a2..75cd365 100644
--- a/test/tint/bug/chromium/40943165.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.ir.fxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared float2x2 W;
 void F_inner(uint mat2x2_1) {
-  if ((mat2x2_1 == 0u)) {
+  if ((mat2x2_1 < 1u)) {
     W = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl b/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl
index c7475e1..aa9c206 100644
--- a/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl
@@ -10,7 +10,7 @@
 };
 
 void F_inner(uint mat2x2_1, tint_module_vars_struct tint_module_vars) {
-  if ((mat2x2_1 == 0u)) {
+  if ((mat2x2_1 < 1u)) {
     (*tint_module_vars.W) = float2x2(float2(0.0f), float2(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.spvasm b/test/tint/bug/chromium/40943165.wgsl.expected.spvasm
index f15b73d..99ffd3a 100644
--- a/test/tint/bug/chromium/40943165.wgsl.expected.spvasm
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.spvasm
@@ -23,7 +23,7 @@
 %F_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %12 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %19 = OpConstantNull %mat2v2float
      %uint_2 = OpConstant %uint 2
@@ -36,7 +36,7 @@
     %F_inner = OpFunction %void None %12
      %mat2x2 = OpFunctionParameter %uint
          %13 = OpLabel
-         %14 = OpIEqual %bool %mat2x2 %uint_0
+         %14 = OpULessThan %bool %mat2x2 %uint_1
                OpSelectionMerge %17 None
                OpBranchConditional %14 %18 %17
          %18 = OpLabel
diff --git a/test/tint/bug/tint/1574.wgsl.expected.glsl b/test/tint/bug/tint/1574.wgsl.expected.glsl
index ee03222..e73127c 100644
--- a/test/tint/bug/tint/1574.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1574.wgsl.expected.glsl
@@ -22,7 +22,7 @@
 shared uint b_u32;
 shared int b_i32;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(b_u32, 0u);
     atomicExchange(b_i32, 0);
   }
diff --git a/test/tint/bug/tint/1574.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/1574.wgsl.expected.ir.dxc.hlsl
index bc02057..4ee3be8 100644
--- a/test/tint/bug/tint/1574.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/1574.wgsl.expected.ir.dxc.hlsl
@@ -18,7 +18,7 @@
 groupshared uint b_u32;
 groupshared int b_i32;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v = 0u;
     InterlockedExchange(b_u32, 0u, v);
     int v_1 = int(0);
diff --git a/test/tint/bug/tint/1574.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/1574.wgsl.expected.ir.fxc.hlsl
index bc02057..4ee3be8 100644
--- a/test/tint/bug/tint/1574.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/1574.wgsl.expected.ir.fxc.hlsl
@@ -18,7 +18,7 @@
 groupshared uint b_u32;
 groupshared int b_i32;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v = 0u;
     InterlockedExchange(b_u32, 0u, v);
     int v_1 = int(0);
diff --git a/test/tint/bug/tint/1574.wgsl.expected.ir.msl b/test/tint/bug/tint/1574.wgsl.expected.ir.msl
index 26e7abe..9626c76 100644
--- a/test/tint/bug/tint/1574.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1574.wgsl.expected.ir.msl
@@ -48,7 +48,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.b_u32, 0u, memory_order_relaxed);
     atomic_store_explicit(tint_module_vars.b_i32, 0, memory_order_relaxed);
   }
diff --git a/test/tint/bug/tint/1574.wgsl.expected.spvasm b/test/tint/bug/tint/1574.wgsl.expected.spvasm
index 2cbb9f4..4b50b09 100644
--- a/test/tint/bug/tint/1574.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/1574.wgsl.expected.spvasm
@@ -70,15 +70,15 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %18 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
      %uint_2 = OpConstant %uint 2
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_uint = OpTypePointer Function %uint
     %uint_42 = OpConstant %uint 42
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-     %uint_1 = OpConstant %uint 1
 %__atomic_compare_exchange_result_u32 = OpTypeStruct %uint %bool
 %_ptr_Function_int = OpTypePointer Function %int
      %int_42 = OpConstant %int 42
@@ -92,7 +92,7 @@
     %value_0 = OpVariable %_ptr_Function_int Function
     %value_1 = OpVariable %_ptr_Function_uint Function
     %value_2 = OpVariable %_ptr_Function_int Function
-         %20 = OpIEqual %bool %tint_local_index %uint_0
+         %20 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %23 None
                OpBranchConditional %20 %24 %23
          %24 = OpLabel
@@ -102,11 +102,11 @@
          %23 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %value %uint_42
-         %34 = OpLoad %uint %value None
-         %35 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
-         %37 = OpAtomicCompareExchange %uint %35 %uint_1 %uint_0 %uint_0 %34 %uint_0
-         %39 = OpIEqual %bool %37 %uint_0
-         %r1 = OpCompositeConstruct %__atomic_compare_exchange_result_u32 %37 %39
+         %35 = OpLoad %uint %value None
+         %36 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+         %38 = OpAtomicCompareExchange %uint %36 %uint_1 %uint_0 %uint_0 %35 %uint_0
+         %39 = OpIEqual %bool %38 %uint_0
+         %r1 = OpCompositeConstruct %__atomic_compare_exchange_result_u32 %38 %39
          %42 = OpLoad %uint %value None
          %43 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
          %44 = OpAtomicCompareExchange %uint %43 %uint_1 %uint_0 %uint_0 %42 %uint_0
diff --git a/test/tint/bug/tint/1926.wgsl.expected.glsl b/test/tint/bug/tint/1926.wgsl.expected.glsl
index 9d643bb..48d649f 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1926.wgsl.expected.glsl
@@ -6,7 +6,7 @@
   uint inner;
 } v;
 void tint_symbol_1_inner(uvec3 global_id, uvec3 local_id, uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     sh_atomic_failed = 0u;
   }
   barrier();
diff --git a/test/tint/bug/tint/1926.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/1926.wgsl.expected.ir.dxc.hlsl
index ae824c2..a5b032f 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/1926.wgsl.expected.ir.dxc.hlsl
@@ -8,7 +8,7 @@
 groupshared uint sh_atomic_failed;
 RWByteAddressBuffer output : register(u4);
 void main_inner(uint3 global_id, uint3 local_id, uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     sh_atomic_failed = 0u;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/bug/tint/1926.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/1926.wgsl.expected.ir.fxc.hlsl
index ae824c2..a5b032f 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/1926.wgsl.expected.ir.fxc.hlsl
@@ -8,7 +8,7 @@
 groupshared uint sh_atomic_failed;
 RWByteAddressBuffer output : register(u4);
 void main_inner(uint3 global_id, uint3 local_id, uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     sh_atomic_failed = 0u;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/bug/tint/1926.wgsl.expected.ir.msl b/test/tint/bug/tint/1926.wgsl.expected.ir.msl
index aa80f1b..efa0b111 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1926.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void tint_symbol_inner(uint3 global_id, uint3 local_id, uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.sh_atomic_failed) = 0u;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/bug/tint/1926.wgsl.expected.spvasm b/test/tint/bug/tint/1926.wgsl.expected.spvasm
index d9394f6..91814b3 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/1926.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 44
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,18 +41,19 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %18 = OpTypeFunction %void %v3uint %v3uint %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-         %38 = OpTypeFunction %void
+         %39 = OpTypeFunction %void
  %main_inner = OpFunction %void None %18
   %global_id = OpFunctionParameter %v3uint
    %local_id = OpFunctionParameter %v3uint
 %tint_local_index = OpFunctionParameter %uint
          %19 = OpLabel
-         %20 = OpIEqual %bool %tint_local_index %uint_0
+         %20 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %23 None
                OpBranchConditional %20 %24 %23
          %24 = OpLabel
@@ -63,22 +64,22 @@
                OpControlBarrier %uint_2 %uint_2 %uint_264
      %failed = OpLoad %uint %sh_atomic_failed None
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %31 = OpCompositeExtract %uint %local_id 0
-         %32 = OpIEqual %bool %31 %uint_0
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
+         %32 = OpCompositeExtract %uint %local_id 0
+         %33 = OpIEqual %bool %32 %uint_0
+               OpSelectionMerge %34 None
+               OpBranchConditional %33 %35 %34
+         %35 = OpLabel
+         %36 = OpAccessChain %_ptr_StorageBuffer_uint %4 %uint_0
+               OpStore %36 %failed None
+               OpBranch %34
          %34 = OpLabel
-         %35 = OpAccessChain %_ptr_StorageBuffer_uint %4 %uint_0
-               OpStore %35 %failed None
-               OpBranch %33
-         %33 = OpLabel
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %38
-         %39 = OpLabel
-         %40 = OpLoad %v3uint %main_global_invocation_id_Input None
-         %41 = OpLoad %v3uint %main_local_invocation_id_Input None
-         %42 = OpLoad %uint %main_local_invocation_index_Input None
-         %43 = OpFunctionCall %void %main_inner %40 %41 %42
+       %main = OpFunction %void None %39
+         %40 = OpLabel
+         %41 = OpLoad %v3uint %main_global_invocation_id_Input None
+         %42 = OpLoad %v3uint %main_local_invocation_id_Input None
+         %43 = OpLoad %uint %main_local_invocation_index_Input None
+         %44 = OpFunctionCall %void %main_inner %41 %42 %43
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/2010.spvasm.expected.glsl b/test/tint/bug/tint/2010.spvasm.expected.glsl
index 49b71fa..2d8001e 100644
--- a/test/tint/bug/tint/2010.spvasm.expected.glsl
+++ b/test/tint/bug/tint/2010.spvasm.expected.glsl
@@ -121,7 +121,7 @@
   x_12.field0[0] = vec4(v_1, v_2, v_3, uintBitsToFloat(atomicOr(x_37, 0u)));
 }
 void tint_symbol_inner(uvec3 x_3_param, uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(x_34, 0u);
     atomicExchange(x_35, 0u);
     atomicExchange(x_36, 0u);
diff --git a/test/tint/bug/tint/2010.spvasm.expected.ir.msl b/test/tint/bug/tint/2010.spvasm.expected.ir.msl
index 9fabccb..dc5eb6c 100644
--- a/test/tint/bug/tint/2010.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/2010.spvasm.expected.ir.msl
@@ -146,7 +146,7 @@
 }
 
 void tint_symbol_inner(uint3 x_3_param, uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.x_34, 0u, memory_order_relaxed);
     atomic_store_explicit(tint_module_vars.x_35, 0u, memory_order_relaxed);
     atomic_store_explicit(tint_module_vars.x_36, 0u, memory_order_relaxed);
diff --git a/test/tint/bug/tint/2010.spvasm.expected.spvasm b/test/tint/bug/tint/2010.spvasm.expected.spvasm
index dd39ea6..e36da35 100644
--- a/test/tint/bug/tint/2010.spvasm.expected.spvasm
+++ b/test/tint/bug/tint/2010.spvasm.expected.spvasm
@@ -328,7 +328,7 @@
   %x_3_param = OpFunctionParameter %v3uint
 %tint_local_index = OpFunctionParameter %uint
         %191 = OpLabel
-        %192 = OpIEqual %bool %tint_local_index %uint_0
+        %192 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %193 None
                OpBranchConditional %192 %194 %193
         %194 = OpLabel
diff --git a/test/tint/bug/tint/2063.wgsl.expected.glsl b/test/tint/bug/tint/2063.wgsl.expected.glsl
index 7c1dfe6..136f145 100644
--- a/test/tint/bug/tint/2063.wgsl.expected.glsl
+++ b/test/tint/bug/tint/2063.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 shared int arg_0;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/bug/tint/2063.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/2063.wgsl.expected.ir.dxc.hlsl
index 6d53335..4421d56 100644
--- a/test/tint/bug/tint/2063.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/2063.wgsl.expected.ir.dxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int arg_0;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v = int(0);
     InterlockedExchange(arg_0, int(0), v);
   }
diff --git a/test/tint/bug/tint/2063.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/2063.wgsl.expected.ir.fxc.hlsl
index 6d53335..4421d56 100644
--- a/test/tint/bug/tint/2063.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/2063.wgsl.expected.ir.fxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int arg_0;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v = int(0);
     InterlockedExchange(arg_0, int(0), v);
   }
diff --git a/test/tint/bug/tint/2063.wgsl.expected.ir.msl b/test/tint/bug/tint/2063.wgsl.expected.ir.msl
index 398b70c..6bc65cc 100644
--- a/test/tint/bug/tint/2063.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2063.wgsl.expected.ir.msl
@@ -10,7 +10,7 @@
 };
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/bug/tint/2063.wgsl.expected.spvasm b/test/tint/bug/tint/2063.wgsl.expected.spvasm
index b7af492..69355b5 100644
--- a/test/tint/bug/tint/2063.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/2063.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -22,19 +22,20 @@
 %compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %10 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
      %uint_2 = OpConstant %uint 2
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
      %int_n1 = OpConstant %int -1
 %_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %compute_main_inner = OpFunction %void None %10
 %tint_local_index = OpFunctionParameter %uint
          %11 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
-         %12 = OpIEqual %bool %tint_local_index %uint_0
+         %12 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %15 None
                OpBranchConditional %12 %16 %15
          %16 = OpLabel
@@ -42,13 +43,13 @@
                OpBranch %15
          %15 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %22 = OpAtomicISub %int %arg_0 %uint_2 %uint_0 %int_n1
-               OpStore %res %22
+         %23 = OpAtomicISub %int %arg_0 %uint_2 %uint_0 %int_n1
+               OpStore %res %23
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %30 = OpFunctionCall %void %compute_main_inner %29
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %31 = OpFunctionCall %void %compute_main_inner %30
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/366314931.wgsl.expected.glsl b/test/tint/bug/tint/366314931.wgsl.expected.glsl
index a94956c..821826a 100644
--- a/test/tint/bug/tint/366314931.wgsl.expected.glsl
+++ b/test/tint/bug/tint/366314931.wgsl.expected.glsl
@@ -12,7 +12,7 @@
   S inner;
 } v_1;
 void tint_symbol_1_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wgvar.v = uvec3(0u);
     atomicExchange(wgvar.u, 0u);
   }
diff --git a/test/tint/bug/tint/366314931.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/366314931.wgsl.expected.ir.dxc.hlsl
index 42c976c..dba8b61 100644
--- a/test/tint/bug/tint/366314931.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/366314931.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 groupshared S wgvar;
 RWByteAddressBuffer output : register(u0);
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wgvar.v = (0u).xxx;
     uint v_1 = 0u;
     InterlockedExchange(wgvar.u, 0u, v_1);
diff --git a/test/tint/bug/tint/366314931.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/366314931.wgsl.expected.ir.fxc.hlsl
index 42c976c..dba8b61 100644
--- a/test/tint/bug/tint/366314931.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/366314931.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 groupshared S wgvar;
 RWByteAddressBuffer output : register(u0);
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wgvar.v = (0u).xxx;
     uint v_1 = 0u;
     InterlockedExchange(wgvar.u, 0u, v_1);
diff --git a/test/tint/bug/tint/366314931.wgsl.expected.ir.msl b/test/tint/bug/tint/366314931.wgsl.expected.ir.msl
index 01df121..58f78cf 100644
--- a/test/tint/bug/tint/366314931.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/366314931.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wgvar).v = packed_uint3(uint3(0u));
     atomic_store_explicit((&(*tint_module_vars.wgvar).u), 0u, memory_order_relaxed);
   }
diff --git a/test/tint/bug/tint/366314931.wgsl.expected.spvasm b/test/tint/bug/tint/366314931.wgsl.expected.spvasm
index 3a5e288..a358856 100644
--- a/test/tint/bug/tint/366314931.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/366314931.wgsl.expected.spvasm
@@ -38,12 +38,12 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %14 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %_ptr_Workgroup_v3uint = OpTypePointer Workgroup %v3uint
-         %23 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+         %24 = OpConstantNull %v3uint
 %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
-     %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
@@ -51,14 +51,14 @@
  %main_inner = OpFunction %void None %14
 %tint_local_index = OpFunctionParameter %uint
          %15 = OpLabel
-         %16 = OpIEqual %bool %tint_local_index %uint_0
+         %16 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %19 None
                OpBranchConditional %16 %20 %19
          %20 = OpLabel
          %21 = OpAccessChain %_ptr_Workgroup_v3uint %wgvar %uint_0
-               OpStore %21 %23 None
-         %24 = OpAccessChain %_ptr_Workgroup_uint %wgvar %uint_1
-               OpAtomicStore %24 %uint_2 %uint_0 %uint_0
+               OpStore %21 %24 None
+         %25 = OpAccessChain %_ptr_Workgroup_uint %wgvar %uint_1
+               OpAtomicStore %25 %uint_2 %uint_0 %uint_0
                OpBranch %19
          %19 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl
index e8f6a09..0f12dbf 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl
@@ -22,7 +22,7 @@
   compute_main_inner(x_39);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = 0;
     atomicExchange(wg.a, 0u);
     atomicExchange(wg.b, 0u);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.dxc.hlsl
index fc45191..2a237b5 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.dxc.hlsl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     uint v_4 = 0u;
     InterlockedExchange(wg.a, 0u, v_4);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.fxc.hlsl
index fc45191..2a237b5 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.fxc.hlsl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     uint v_4 = 0u;
     InterlockedExchange(wg.a, 0u, v_4);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl
index 526b126..082bbfe 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     (*tint_module_vars.wg).x = 0;
     atomic_store_explicit((&(*tint_module_vars.wg).a), 0u, memory_order_relaxed);
     atomic_store_explicit((&(*tint_module_vars.wg).b), 0u, memory_order_relaxed);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.spvasm b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.spvasm
index b3d7e3d..dd8dad0 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.spvasm
@@ -71,7 +71,7 @@
 %compute_main_inner_0 = OpFunction %void None %14
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %40 = OpLabel
-         %41 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %41 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %43 None
                OpBranchConditional %41 %44 %43
          %44 = OpLabel
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.glsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.glsl
index 7b9b5b7..8ffe752 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 
 shared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = 0;
     atomicExchange(wg.a, 0u);
     atomicExchange(wg.b, 0u);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.dxc.hlsl
index 9d89404..c56f640 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     uint v = 0u;
     InterlockedExchange(wg.a, 0u, v);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.fxc.hlsl
index 9d89404..c56f640 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     uint v = 0u;
     InterlockedExchange(wg.a, 0u, v);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl
index b4f7473..0a0b3db 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 };
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wg).x = 0;
     atomic_store_explicit((&(*tint_module_vars.wg).a), 0u, memory_order_relaxed);
     atomic_store_explicit((&(*tint_module_vars.wg).b), 0u, memory_order_relaxed);
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.spvasm b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.spvasm
index e7521a8..b498822 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.spvasm
@@ -29,26 +29,26 @@
 %compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %11 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
 %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
-     %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
          %35 = OpTypeFunction %void
 %compute_main_inner = OpFunction %void None %11
 %tint_local_index = OpFunctionParameter %uint
          %12 = OpLabel
-         %13 = OpIEqual %bool %tint_local_index %uint_0
+         %13 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %16 None
                OpBranchConditional %13 %17 %16
          %17 = OpLabel
          %18 = OpAccessChain %_ptr_Workgroup_int %wg %uint_0
                OpStore %18 %int_0 None
-         %21 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_1
-               OpAtomicStore %21 %uint_2 %uint_0 %uint_0
+         %22 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_1
+               OpAtomicStore %22 %uint_2 %uint_0 %uint_0
          %26 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_2
                OpAtomicStore %26 %uint_2 %uint_0 %uint_0
                OpBranch %16
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl
index e6834a6..144f1ab 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl
@@ -21,7 +21,7 @@
   compute_main_inner(x_35);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = 0;
     atomicExchange(wg.a, 0u);
     wg.y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.dxc.hlsl
index 0a6736d..06d87e7 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.dxc.hlsl
@@ -27,7 +27,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     uint v_2 = 0u;
     InterlockedExchange(wg.a, 0u, v_2);
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.fxc.hlsl
index 0a6736d..06d87e7 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.fxc.hlsl
@@ -27,7 +27,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     uint v_2 = 0u;
     InterlockedExchange(wg.a, 0u, v_2);
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl
index 3d45dd7..9043c01 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     (*tint_module_vars.wg).x = 0;
     atomic_store_explicit((&(*tint_module_vars.wg).a), 0u, memory_order_relaxed);
     (*tint_module_vars.wg).y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.spvasm b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.spvasm
index 0b66625..47698cf 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.spvasm
@@ -70,7 +70,7 @@
 %compute_main_inner_0 = OpFunction %void None %14
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %38 = OpLabel
-         %39 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %39 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %41 None
                OpBranchConditional %39 %42 %41
          %42 = OpLabel
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.glsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.glsl
index 2705eb9..56f1477 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 
 shared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = 0;
     atomicExchange(wg.a, 0u);
     wg.y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.dxc.hlsl
index c4be0f5..0f6bf93 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     uint v = 0u;
     InterlockedExchange(wg.a, 0u, v);
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.fxc.hlsl
index c4be0f5..0f6bf93 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     uint v = 0u;
     InterlockedExchange(wg.a, 0u, v);
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl
index bd01059..9d17a38 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 };
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wg).x = 0;
     atomic_store_explicit((&(*tint_module_vars.wg).a), 0u, memory_order_relaxed);
     (*tint_module_vars.wg).y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.spvasm b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.spvasm
index cb87f1c..0cb1228 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.spvasm
@@ -29,12 +29,12 @@
 %compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %11 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
 %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
-     %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
 %_ptr_Workgroup_uint_0 = OpTypePointer Workgroup %uint
    %uint_264 = OpConstant %uint 264
@@ -42,14 +42,14 @@
 %compute_main_inner = OpFunction %void None %11
 %tint_local_index = OpFunctionParameter %uint
          %12 = OpLabel
-         %13 = OpIEqual %bool %tint_local_index %uint_0
+         %13 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %16 None
                OpBranchConditional %13 %17 %16
          %17 = OpLabel
          %18 = OpAccessChain %_ptr_Workgroup_int %wg %uint_0
                OpStore %18 %int_0 None
-         %21 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_1
-               OpAtomicStore %21 %uint_2 %uint_0 %uint_0
+         %22 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_1
+               OpAtomicStore %22 %uint_2 %uint_0 %uint_0
          %26 = OpAccessChain %_ptr_Workgroup_uint_0 %wg %uint_2
                OpStore %26 %uint_0 None
                OpBranch %16
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl
index 2667e7d..e9fc937 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl
@@ -43,7 +43,7 @@
   compute_main_inner(x_44);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = 0;
     wg.y = 0;
     wg.z = 0;
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.dxc.hlsl
index aa91144..8c4e310 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.dxc.hlsl
@@ -49,7 +49,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     wg.y = int(0);
     wg.z = int(0);
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.fxc.hlsl
index aa91144..8c4e310 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.fxc.hlsl
@@ -49,7 +49,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     wg.y = int(0);
     wg.z = int(0);
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl
index 1986f6c..efe2feb 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl
@@ -52,7 +52,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     (*tint_module_vars.wg).x = 0;
     (*tint_module_vars.wg).y = 0;
     (*tint_module_vars.wg).z = 0;
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.spvasm b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.spvasm
index e290521..56885a5 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.spvasm
@@ -106,7 +106,7 @@
 %compute_main_inner_0 = OpFunction %void None %16
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %47 = OpLabel
-         %48 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %48 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %50 None
                OpBranchConditional %48 %51 %50
          %51 = OpLabel
diff --git a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.glsl b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.glsl
index 7381ab2..087f5e8 100644
--- a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.glsl
@@ -24,7 +24,7 @@
 
 shared S2 wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = 0;
     wg.y = 0;
     wg.z = 0;
diff --git a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.dxc.hlsl
index 22ee2d5..d7337d0 100644
--- a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 
 groupshared S2 wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     wg.y = int(0);
     wg.z = int(0);
diff --git a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.fxc.hlsl
index 22ee2d5..d7337d0 100644
--- a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 
 groupshared S2 wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     wg.y = int(0);
     wg.z = int(0);
diff --git a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl
index 745e94d..00dcf58 100644
--- a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl
@@ -31,7 +31,7 @@
 };
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wg).x = 0;
     (*tint_module_vars.wg).y = 0;
     (*tint_module_vars.wg).z = 0;
diff --git a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.spvasm b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.spvasm
index c1ac3f1..9674fe8 100644
--- a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.spvasm
@@ -51,11 +51,11 @@
 %compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %13 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
      %uint_3 = OpConstant %uint 3
 %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
@@ -64,14 +64,14 @@
 %compute_main_inner = OpFunction %void None %13
 %tint_local_index = OpFunctionParameter %uint
          %14 = OpLabel
-         %15 = OpIEqual %bool %tint_local_index %uint_0
+         %15 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %18 None
                OpBranchConditional %15 %19 %18
          %19 = OpLabel
          %20 = OpAccessChain %_ptr_Workgroup_int %wg %uint_0
                OpStore %20 %int_0 None
-         %23 = OpAccessChain %_ptr_Workgroup_int %wg %uint_1
-               OpStore %23 %int_0 None
+         %24 = OpAccessChain %_ptr_Workgroup_int %wg %uint_1
+               OpStore %24 %int_0 None
          %25 = OpAccessChain %_ptr_Workgroup_int %wg %uint_2
                OpStore %25 %int_0 None
          %27 = OpAccessChain %_ptr_Workgroup_int %wg %uint_3 %uint_0
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl
index 76b7247..8cf4790 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl
@@ -35,7 +35,7 @@
   compute_main_inner(x_53);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = 0;
     wg.y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.dxc.hlsl
index e9dc422..b667593 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.dxc.hlsl
@@ -41,7 +41,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     wg.y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.fxc.hlsl
index e9dc422..b667593 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.fxc.hlsl
@@ -41,7 +41,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     wg.y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl
index 1ef5578..6ef7a94 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl
@@ -60,7 +60,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     (*tint_module_vars.wg).x = 0;
     (*tint_module_vars.wg).y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.spvasm b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.spvasm
index f3ed93e..dcda55c 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.spvasm
@@ -101,7 +101,7 @@
 %compute_main_inner_0 = OpFunction %void None %16
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %56 = OpLabel
-         %57 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %57 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %58 None
                OpBranchConditional %57 %59 %58
          %59 = OpLabel
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.glsl b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.glsl
index 0abefd1..fb8969af 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 
 shared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = 0;
     wg.y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.dxc.hlsl
index 541e9fe..8d27cdd 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     wg.y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.fxc.hlsl
index 541e9fe..8d27cdd 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     wg.y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl
index e123238..e89b07d 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl
@@ -31,7 +31,7 @@
 };
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wg).x = 0;
     (*tint_module_vars.wg).y = 0u;
   }
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.spvasm b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.spvasm
index 7938d35..9784f1a 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.spvasm
@@ -32,51 +32,51 @@
 %compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %13 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
 %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
      %uint_2 = OpConstant %uint 2
 %_ptr_Workgroup_uint_0 = OpTypePointer Workgroup %uint
-     %uint_1 = OpConstant %uint 1
    %uint_264 = OpConstant %uint 264
       %int_4 = OpConstant %int 4
          %46 = OpTypeFunction %void
 %compute_main_inner = OpFunction %void None %13
 %tint_local_index = OpFunctionParameter %uint
          %14 = OpLabel
-         %15 = OpIEqual %bool %tint_local_index %uint_0
+         %15 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %18 None
                OpBranchConditional %15 %19 %18
          %19 = OpLabel
          %20 = OpAccessChain %_ptr_Workgroup_int %wg %uint_0
                OpStore %20 %int_0 None
-         %23 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_2
-               OpStore %23 %uint_0 None
+         %24 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_2
+               OpStore %24 %uint_0 None
                OpBranch %18
          %18 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %31 = OpPhi %uint %tint_local_index %26 %32 %28
-               OpLoopMerge %30 %28 None
                OpBranch %27
          %27 = OpLabel
-         %33 = OpUGreaterThanEqual %bool %31 %uint_10
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
                OpBranch %30
-         %34 = OpLabel
-         %36 = OpAccessChain %_ptr_Workgroup_uint_0 %wg %uint_1 %31
-               OpAtomicStore %36 %uint_2 %uint_0 %uint_0
+         %30 = OpLabel
+         %32 = OpPhi %uint %tint_local_index %27 %33 %29
+               OpLoopMerge %31 %29 None
                OpBranch %28
          %28 = OpLabel
-         %32 = OpIAdd %uint %31 %uint_1
+         %34 = OpUGreaterThanEqual %bool %32 %uint_10
+               OpSelectionMerge %35 None
+               OpBranchConditional %34 %36 %35
+         %36 = OpLabel
+               OpBranch %31
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_uint_0 %wg %uint_1 %32
+               OpAtomicStore %37 %uint_2 %uint_0 %uint_0
                OpBranch %29
-         %30 = OpLabel
+         %29 = OpLabel
+         %33 = OpIAdd %uint %32 %uint_1
+               OpBranch %30
+         %31 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
          %42 = OpAccessChain %_ptr_Workgroup_uint_0 %wg %uint_1 %int_4
                OpAtomicStore %42 %uint_2 %uint_0 %uint_1
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl
index e6834a6..144f1ab 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl
@@ -21,7 +21,7 @@
   compute_main_inner(x_35);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = 0;
     atomicExchange(wg.a, 0u);
     wg.y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.dxc.hlsl
index 0a6736d..06d87e7 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.dxc.hlsl
@@ -27,7 +27,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     uint v_2 = 0u;
     InterlockedExchange(wg.a, 0u, v_2);
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.fxc.hlsl
index 0a6736d..06d87e7 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.fxc.hlsl
@@ -27,7 +27,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     wg.x = int(0);
     uint v_2 = 0u;
     InterlockedExchange(wg.a, 0u, v_2);
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl
index 3d45dd7..9043c01 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     (*tint_module_vars.wg).x = 0;
     atomic_store_explicit((&(*tint_module_vars.wg).a), 0u, memory_order_relaxed);
     (*tint_module_vars.wg).y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.spvasm b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.spvasm
index 0b66625..47698cf 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.spvasm
@@ -70,7 +70,7 @@
 %compute_main_inner_0 = OpFunction %void None %14
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %38 = OpLabel
-         %39 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %39 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %41 None
                OpBranchConditional %39 %42 %41
          %42 = OpLabel
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.glsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.glsl
index 2705eb9..56f1477 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 
 shared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = 0;
     atomicExchange(wg.a, 0u);
     wg.y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.dxc.hlsl
index c4be0f5..0f6bf93 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     uint v = 0u;
     InterlockedExchange(wg.a, 0u, v);
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.fxc.hlsl
index c4be0f5..0f6bf93 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 
 groupshared S wg;
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg.x = int(0);
     uint v = 0u;
     InterlockedExchange(wg.a, 0u, v);
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl
index 1f1a776..b4c08b8 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 };
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wg).x = 0;
     atomic_store_explicit((&(*tint_module_vars.wg).a), 0u, memory_order_relaxed);
     (*tint_module_vars.wg).y = 0u;
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.spvasm b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.spvasm
index 35bc3d4..83a813a 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.spvasm
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.spvasm
@@ -31,12 +31,12 @@
 %compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %11 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_0 = OpConstant %uint 0
       %int_0 = OpConstant %int 0
 %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
-     %uint_1 = OpConstant %uint 1
      %uint_2 = OpConstant %uint 2
 %_ptr_Workgroup_uint_0 = OpTypePointer Workgroup %uint
    %uint_264 = OpConstant %uint 264
@@ -44,14 +44,14 @@
 %compute_main_inner = OpFunction %void None %11
 %tint_local_index = OpFunctionParameter %uint
          %12 = OpLabel
-         %13 = OpIEqual %bool %tint_local_index %uint_0
+         %13 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %16 None
                OpBranchConditional %13 %17 %16
          %17 = OpLabel
          %18 = OpAccessChain %_ptr_Workgroup_int %wg %uint_0
                OpStore %18 %int_0 None
-         %21 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_1
-               OpAtomicStore %21 %uint_2 %uint_0 %uint_0
+         %22 = OpAccessChain %_ptr_Workgroup_uint %wg %uint_1
+               OpAtomicStore %22 %uint_2 %uint_0 %uint_0
          %26 = OpAccessChain %_ptr_Workgroup_uint_0 %wg %uint_2
                OpStore %26 %uint_0 None
                OpBranch %16
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl
index 6ddceae..280988f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 5b9db19..489ec6f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 5b9db19..489ec6f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
index b337757..f1024af 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.spvasm
index 19f7147..370637b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAdd_794055 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl
index 88eba6a..8b101cb 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index b7d4f46..eba26de 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index b7d4f46..eba26de 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
index 85d4805..dfe343e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.spvasm
index 65dce1f..18c5cb6 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl
index e7fdcf0..3e75911 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 2e48878..4f611d7 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 2e48878..4f611d7 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
index 9751fdb..530f6af 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.spvasm
index 6906f03..1ca039b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAnd_45a819 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl
index d9a58fa..32fe112 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 3e6ac92..e21bb45 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 3e6ac92..e21bb45 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
index 934699d..9a38334 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.spvasm
index cbeba0b..182526c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
index 3c8a328..820efd7 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
@@ -30,7 +30,7 @@
   compute_main_inner(x_36);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index e01b62f..46fd52d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -40,7 +40,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_5 = int(0);
     InterlockedExchange(arg_0, int(0), v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index e01b62f..46fd52d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -40,7 +40,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_5 = int(0);
     InterlockedExchange(arg_0, int(0), v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
index b9a1827..b505d4c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
@@ -45,7 +45,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm
index a810176..b6ecc87 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 55
+; Bound: 56
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -54,6 +54,7 @@
          %31 = OpTypeFunction %void %uint
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
 %atomicCompareExchangeWeak_e88938 = OpFunction %void None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_x__atomic_compare_exchange_resulti32 Function
@@ -84,21 +85,21 @@
 %compute_main_inner_0 = OpFunction %void None %31
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %44 = OpLabel
-         %45 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
+         %45 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %47 None
+               OpBranchConditional %45 %48 %47
+         %48 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %46
-         %46 = OpLabel
+               OpBranch %47
+         %47 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %50 = OpFunctionCall %void %compute_main_1
+         %51 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %52 = OpLabel
-         %53 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %54 = OpFunctionCall %void %compute_main_inner_0 %53
+         %53 = OpLabel
+         %54 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %55 = OpFunctionCall %void %compute_main_inner_0 %54
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
index b6d3804..995f311 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
@@ -30,7 +30,7 @@
   compute_main_inner(x_35);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 7d65102..7d39283 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -40,7 +40,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_5 = 0u;
     InterlockedExchange(arg_0, 0u, v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 7d65102..7d39283 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -40,7 +40,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_5 = 0u;
     InterlockedExchange(arg_0, 0u, v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
index dcd4b87..f93a1aa 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
@@ -45,7 +45,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm
index 64f604d4..2a891e1 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm
@@ -82,7 +82,7 @@
 %compute_main_inner_0 = OpFunction %void None %30
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %42 = OpLabel
-         %43 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %43 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %44 None
                OpBranchConditional %43 %45 %44
          %45 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl
index 4178cb0..4d178ad 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 564d403..c46081c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 564d403..c46081c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
index 42e473e..9827dd0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.spvasm
index c97d515..24f994e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicExchange_e114ba = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl
index 541454c..6c496d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 08a8d19..8d8a144 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 08a8d19..8d8a144 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
index 6568cab..6f9709e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.spvasm
index c586823..9b51236 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl
index 256fc48..fa46fc4 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index ca024f8..12849ff 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index ca024f8..12849ff 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
index 3fbcaf3..d601946 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.spvasm
index bc5a8f3..11219a2 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 46
+; Bound: 47
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,6 +38,7 @@
      %uint_0 = OpConstant %uint 0
          %22 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicLoad_afcc03 = OpFunction %void None %12
          %13 = OpLabel
@@ -64,21 +65,21 @@
 %compute_main_inner_0 = OpFunction %void None %22
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %34 = OpLabel
-         %35 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %37
-         %38 = OpLabel
+         %35 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %38 None
+               OpBranchConditional %35 %39 %38
+         %39 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %37
-         %37 = OpLabel
+               OpBranch %38
+         %38 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %41 = OpFunctionCall %void %compute_main_1
+         %42 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %43 = OpLabel
-         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %45 = OpFunctionCall %void %compute_main_inner_0 %44
+         %44 = OpLabel
+         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %46 = OpFunctionCall %void %compute_main_inner_0 %45
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl
index 643f79e..1d996d2 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_29);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index f148b47..82befca 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index f148b47..82befca 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
index e705523..f4015f9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.spvasm
index e150490..22c4b2d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 44
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,6 +36,7 @@
      %uint_2 = OpConstant %uint 2
          %20 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicLoad_361bf1 = OpFunction %void None %11
          %12 = OpLabel
@@ -62,21 +63,21 @@
 %compute_main_inner_0 = OpFunction %void None %20
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %32 = OpLabel
-         %33 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
+         %33 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %36 None
+               OpBranchConditional %33 %37 %36
+         %37 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %uint_0
-               OpBranch %35
-         %35 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %39 = OpFunctionCall %void %compute_main_1
+         %40 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %11
-         %41 = OpLabel
-         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %43 = OpFunctionCall %void %compute_main_inner_0 %42
+         %42 = OpLabel
+         %43 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %44 = OpFunctionCall %void %compute_main_inner_0 %43
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl
index 3104cb1..0bc735f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index f5f9f2c..d6eb217 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index f5f9f2c..d6eb217 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl
index ef6d3d0..468e97e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.spvasm
index 8513e45..0ff37aa 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicMax_a89cc3 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl
index 0f07faf..b3bddc0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 553dbc0..daad20f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 553dbc0..daad20f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl
index f38aa6f..5d782b3 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.spvasm
index e509a8e..b8efdbf 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl
index e41f8e4..58b649b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 7c120b9..20e45fb 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 7c120b9..20e45fb 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl
index 19d12da..432db83 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.spvasm
index 8218613..18006f8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicMin_278235 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl
index 51fe0d4..f84bf1e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 947b394..3aefe6e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 947b394..3aefe6e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl
index 21fa697..6f7abba 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.spvasm
index 932e5f1..c580af2 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl
index 9820d69..cdf8d53 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 890a58a..2f50828 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 890a58a..2f50828 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl
index 2ae68a0..e2184d6 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.spvasm
index 8969d78..8acae69 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicOr_d09248 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl
index fb68d7c..ee5d90c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index a8a8c9b..4fdee9c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index a8a8c9b..4fdee9c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl
index 8c4dcf4..e2a1b1d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.spvasm
index a0a3491..fafea7d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl
index 4b08b9f..576f1d0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl
@@ -15,7 +15,7 @@
   compute_main_inner(x_29);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index c592816..7518611 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -23,7 +23,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index c592816..7518611 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -23,7 +23,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl
index 2ea7de9..8d26048 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.spvasm
index 181f2a0..d6898e3 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 45
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,6 +36,7 @@
          %20 = OpTypeFunction %void %uint
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicStore_8bea94 = OpFunction %void None %12
          %13 = OpLabel
@@ -59,21 +60,21 @@
 %compute_main_inner_0 = OpFunction %void None %20
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %36
-         %37 = OpLabel
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %37 None
+               OpBranchConditional %34 %38 %37
+         %38 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %36
-         %36 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %40 = OpFunctionCall %void %compute_main_1
+         %41 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %42 = OpLabel
-         %43 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %44 = OpFunctionCall %void %compute_main_inner_0 %43
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner_0 %44
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl
index 1adb7aa..d7adb96 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl
@@ -15,7 +15,7 @@
   compute_main_inner(x_28);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 3e628ab..a8d2d69 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -23,7 +23,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 3e628ab..a8d2d69 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -23,7 +23,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl
index d775d1c..7041421 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.spvasm
index 8b937f1..65c3c6e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.spvasm
@@ -57,7 +57,7 @@
 %compute_main_inner_0 = OpFunction %void None %19
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %31 = OpLabel
-         %32 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %32 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %34 None
                OpBranchConditional %32 %35 %34
          %35 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl
index 92301e1..7975472 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index ef6bb90..f28a6fa 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index ef6bb90..f28a6fa 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl
index 8ed41d6..82034a5 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.spvasm
index 672a1c0..5c4e54f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicSub_77883a = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl
index a8d8454..75976ff 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 66b5d3b..041ce2a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 66b5d3b..041ce2a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl
index 477e4ef..ab0d27b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.spvasm
index 85847b4..34b604d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl
index 350367b..215407a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index c4eb967..4728aff 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index c4eb967..4728aff 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl
index 94b95e2..3d89c89 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.spvasm
index 6845bf3..041ed63 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicXor_75dc95 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl
index 2fd26d9..549abe4 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 634c2e1..aba77cb 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 634c2e1..aba77cb 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl
index 6fb2ec3..3020687 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.spvasm
index e79859e..4bf0612 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
index 667bd1e..bbe271d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 6bfc0df..534d71a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 6bfc0df..534d71a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
index 6714018..5461b10 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm
index b74859c..ae3104f2 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAdd_794055 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
index ca5e844..f94ff8e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index cc12ce9..e8e90d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index cc12ce9..e8e90d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
index 2a06016..67b439e5 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm
index 8ebc500..6b99bd5 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
index 6ddceae..280988f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 5b9db19..489ec6f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 5b9db19..489ec6f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
index b337757..f1024af 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm
index 19f7147..370637b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 47
+; Bound: 48
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
       %int_1 = OpConstant %int 1
          %23 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAdd_794055 = OpFunction %void None %12
          %13 = OpLabel
@@ -65,21 +66,21 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %39 None
+               OpBranchConditional %36 %40 %39
+         %40 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %38
-         %38 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %42 = OpFunctionCall %void %compute_main_1
+         %43 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %46 = OpFunctionCall %void %compute_main_inner_0 %45
+         %45 = OpLabel
+         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %47 = OpFunctionCall %void %compute_main_inner_0 %46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
index 88eba6a..8b101cb 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index b7d4f46..eba26de 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index b7d4f46..eba26de 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
index 85d4805..dfe343e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm
index 65dce1f..18c5cb6 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm
@@ -63,7 +63,7 @@
 %compute_main_inner_0 = OpFunction %void None %21
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %33 = OpLabel
-         %34 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %34 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %36 None
                OpBranchConditional %34 %37 %36
          %37 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl
index 53338a2..359288f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 00b6be7..6fbcb70 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 00b6be7..6fbcb70 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
index de3cbc2..e73cf58 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.spvasm
index 30a18a9..e38a9e4 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAdd_794055 = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl
index 2b10c8d..effb53d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 1392e4a..54ae113 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 1392e4a..54ae113 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
index ccbed67..78156cf 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.spvasm
index 94abea3..0556b95 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl
index aa37b41..0e72612 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 0feaaa8..ed666bc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 0feaaa8..ed666bc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
index 7ab0371..f764fbd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.spvasm
index eb9ab4e..62ed4bf 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAnd_45a819 = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl
index 7fb63db..4219fc4 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index d0d5daf..a4f0e52 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index d0d5daf..a4f0e52 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
index bd0d6da..a3c7f39 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.spvasm
index 7f590d3..792ab0f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
index cb737b9..5cb4c5e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
@@ -36,7 +36,7 @@
   compute_main_inner(x_41);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index a337e61..90c584f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -46,7 +46,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_5 = int(0);
     InterlockedExchange(arg_0, int(0), v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index a337e61..90c584f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -46,7 +46,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_5 = int(0);
     InterlockedExchange(arg_0, int(0), v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
index 33b1fd4..40d4e67 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
@@ -51,7 +51,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm
index 8fc0b08..9a5d55d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 60
+; Bound: 61
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -59,6 +59,7 @@
 %__atomic_compare_exchange_result_i32 = OpTypeStruct %int %bool
          %37 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
 %atomicCompareExchangeWeak_e88938 = OpFunction %void None %12
          %13 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -97,21 +98,21 @@
 %compute_main_inner_0 = OpFunction %void None %37
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %49 = OpLabel
-         %50 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
+         %50 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %52 None
+               OpBranchConditional %50 %53 %52
+         %53 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %51
-         %51 = OpLabel
+               OpBranch %52
+         %52 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %55 = OpFunctionCall %void %compute_main_1
+         %56 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %57 = OpLabel
-         %58 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %59 = OpFunctionCall %void %compute_main_inner_0 %58
+         %58 = OpLabel
+         %59 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %60 = OpFunctionCall %void %compute_main_inner_0 %59
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
index 7d408f2..359f8ab 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
@@ -36,7 +36,7 @@
   compute_main_inner(x_40);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 3942ead..b8bac66 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -46,7 +46,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_5 = 0u;
     InterlockedExchange(arg_0, 0u, v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 3942ead..b8bac66 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -46,7 +46,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_5 = 0u;
     InterlockedExchange(arg_0, 0u, v_5);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
index cbbe5df..2c17ca8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
@@ -51,7 +51,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm
index 4e954ac..33d3ca1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.spvasm
@@ -95,7 +95,7 @@
 %compute_main_inner_0 = OpFunction %void None %35
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %47 = OpLabel
-         %48 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %48 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %49 None
                OpBranchConditional %48 %50 %49
          %50 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl
index 03a04ee..1ccd48a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 933ebd8..671f18c 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 933ebd8..671f18c 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
index c84e243..c41d784 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.spvasm
index a72b2a8..9c57c95 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicExchange_e114ba = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl
index 3b38e80..a141c60 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index f5c54597..d961ec6 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index f5c54597..d961ec6 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
index b746479..4074796 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.spvasm
index 9463fc1..8ca1d61 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl
index 256fc48..fa46fc4 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_30);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index ca024f8..12849ff 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index ca024f8..12849ff 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
index 3fbcaf3..d601946 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.spvasm
index bc5a8f3..11219a2 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 46
+; Bound: 47
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,6 +38,7 @@
      %uint_0 = OpConstant %uint 0
          %22 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicLoad_afcc03 = OpFunction %void None %12
          %13 = OpLabel
@@ -64,21 +65,21 @@
 %compute_main_inner_0 = OpFunction %void None %22
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %34 = OpLabel
-         %35 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %37
-         %38 = OpLabel
+         %35 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %38 None
+               OpBranchConditional %35 %39 %38
+         %39 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %37
-         %37 = OpLabel
+               OpBranch %38
+         %38 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %41 = OpFunctionCall %void %compute_main_1
+         %42 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %43 = OpLabel
-         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %45 = OpFunctionCall %void %compute_main_inner_0 %44
+         %44 = OpLabel
+         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %46 = OpFunctionCall %void %compute_main_inner_0 %45
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl
index 643f79e..1d996d2 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,7 @@
   compute_main_inner(x_29);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index f148b47..82befca 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index f148b47..82befca 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
index e705523..f4015f9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.spvasm
index e150490..22c4b2d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 44
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,6 +36,7 @@
      %uint_2 = OpConstant %uint 2
          %20 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicLoad_361bf1 = OpFunction %void None %11
          %12 = OpLabel
@@ -62,21 +63,21 @@
 %compute_main_inner_0 = OpFunction %void None %20
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %32 = OpLabel
-         %33 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
+         %33 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %36 None
+               OpBranchConditional %33 %37 %36
+         %37 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %uint_0
-               OpBranch %35
-         %35 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %39 = OpFunctionCall %void %compute_main_1
+         %40 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %11
-         %41 = OpLabel
-         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %43 = OpFunctionCall %void %compute_main_inner_0 %42
+         %42 = OpLabel
+         %43 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %44 = OpFunctionCall %void %compute_main_inner_0 %43
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl
index d57f1f9..cf2b9b3 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 1f4167e..9a997bd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 1f4167e..9a997bd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl
index ee72005..9fba2f9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.spvasm
index 9264e92..e067aca 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicMax_a89cc3 = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl
index bdf9912..6877765 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index a8258b2..fb1b069 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index a8258b2..fb1b069 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl
index b01e77b..b9fa7a9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.spvasm
index 5b042e6..9a6e2e9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl
index 60b960a..505220f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 112b24a..d5248bd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 112b24a..d5248bd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl
index d5eaf62..c1b3940 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.spvasm
index d1846a4..5e9e714 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicMin_278235 = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl
index 3bfaa50..38e6fac 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index d0e0df3..d632ec2 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index d0e0df3..d632ec2 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl
index beb007b..d9ef420 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.spvasm
index afb9c5d..ae4bede 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl
index 38e074b..06f67fe 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index d8ff614..d61128b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index d8ff614..d61128b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl
index 3dc1448..5237c7b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.spvasm
index e332c23..7192d1d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicOr_d09248 = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl
index d38a71c..b4f94c3 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 945a524..fc0a09d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 945a524..fc0a09d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl
index 14482d0..a243b2d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.spvasm
index 543df1b..a6c8dc7 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl
index 093a5ac..4ae9a0a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl
@@ -18,7 +18,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index f24518c..f1ae512 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index f24518c..f1ae512 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl
index a69f130..02dfccd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.spvasm
index 3a9f361..8d1e3dc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 48
+; Bound: 49
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,6 +39,7 @@
      %uint_0 = OpConstant %uint 0
          %24 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicStore_8bea94 = OpFunction %void None %12
          %13 = OpLabel
@@ -66,21 +67,21 @@
 %compute_main_inner_0 = OpFunction %void None %24
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %36 = OpLabel
-         %37 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
+         %37 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %40 None
+               OpBranchConditional %37 %41 %40
+         %41 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %39
-         %39 = OpLabel
+               OpBranch %40
+         %40 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %43 = OpFunctionCall %void %compute_main_1
+         %44 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %45 = OpLabel
-         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %47 = OpFunctionCall %void %compute_main_inner_0 %46
+         %46 = OpLabel
+         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %48 = OpFunctionCall %void %compute_main_inner_0 %47
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl
index a48dae3..b6cfa5d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl
@@ -18,7 +18,7 @@
   compute_main_inner(x_31);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 6c9c0de..263dc33 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 6c9c0de..263dc33 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -26,7 +26,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl
index 8a64d75..799e591 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.spvasm
index 627b1b7..5010522 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.spvasm
@@ -64,7 +64,7 @@
 %compute_main_inner_0 = OpFunction %void None %22
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %34 = OpLabel
-         %35 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %35 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %37 None
                OpBranchConditional %35 %38 %37
          %38 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl
index 219ce4a..a75d107 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index df75a5a..c997c10 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index df75a5a..c997c10 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl
index 3389014..e08aae3 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.spvasm
index f162a86..3d55b61 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicSub_77883a = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl
index 5d0f147..6557c5f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 69975b0..49eb2b1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 69975b0..49eb2b1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl
index e4c3795..793e3d3 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.spvasm
index f6771ef..c98d08b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl
index 79c57f1..6bab463 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 9f9557c..f984067 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 9f9557c..f984067 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl
index e88f48d..82ef013 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.spvasm
index 21b0304..3627061 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 49
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -41,6 +41,7 @@
      %uint_0 = OpConstant %uint 0
          %25 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicXor_75dc95 = OpFunction %void None %12
          %13 = OpLabel
@@ -71,21 +72,21 @@
 %compute_main_inner_0 = OpFunction %void None %25
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %37 = OpLabel
-         %38 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
+         %38 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %41 None
+               OpBranchConditional %38 %42 %41
+         %42 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %40
-         %40 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %44 = OpFunctionCall %void %compute_main_1
+         %45 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %48 = OpFunctionCall %void %compute_main_inner_0 %47
+         %47 = OpLabel
+         %48 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %49 = OpFunctionCall %void %compute_main_inner_0 %48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl
index fdebbdd..c4a0361 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl
@@ -20,7 +20,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index 91e26ff..96d48fb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index 91e26ff..96d48fb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -29,7 +29,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl
index e555457..9fa8055 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl
@@ -31,7 +31,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.spvasm
index 4d444ce..51b0403 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.spvasm
@@ -69,7 +69,7 @@
 %compute_main_inner_0 = OpFunction %void None %23
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %35 = OpLabel
-         %36 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %36 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %38 None
                OpBranchConditional %36 %39 %38
          %39 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
index 434b198..d7a34f7 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
@@ -19,7 +19,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 3acb123..2bce369 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 3acb123..2bce369 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
index 247897f..7451aa2 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm
index 1224530..edf2b80 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 48
+; Bound: 49
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -40,6 +40,7 @@
      %uint_0 = OpConstant %uint 0
          %24 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAdd_794055 = OpFunction %void None %12
          %13 = OpLabel
@@ -69,21 +70,21 @@
 %compute_main_inner_0 = OpFunction %void None %24
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %36 = OpLabel
-         %37 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
+         %37 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %40 None
+               OpBranchConditional %37 %41 %40
+         %41 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %39
-         %39 = OpLabel
+               OpBranch %40
+         %40 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %43 = OpFunctionCall %void %compute_main_1
+         %44 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %45 = OpLabel
-         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %47 = OpFunctionCall %void %compute_main_inner_0 %46
+         %46 = OpLabel
+         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %48 = OpFunctionCall %void %compute_main_inner_0 %47
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
index bacf00f..166b8e2 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
@@ -19,7 +19,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index cc88980..099e368 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index cc88980..099e368 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
index 984696f..0e0565a 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm
index 563f1c3..acde4bb 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.spvasm
@@ -67,7 +67,7 @@
 %compute_main_inner_0 = OpFunction %void None %22
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %34 = OpLabel
-         %35 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %35 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %37 None
                OpBranchConditional %35 %38 %37
          %38 = OpLabel
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
index 69300dc..a221852 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
@@ -19,7 +19,7 @@
   compute_main_inner(x_33);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
index 80328c7..4ac3d9e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.dxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
index 80328c7..4ac3d9e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.fxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
index 5cf6466..c5b0929 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm
index 1b8f94a..f6af78e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 48
+; Bound: 49
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -40,6 +40,7 @@
      %uint_0 = OpConstant %uint 0
          %24 = OpTypeFunction %void %uint
    %uint_264 = OpConstant %uint 264
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %atomicAdd_794055 = OpFunction %void None %12
          %13 = OpLabel
@@ -69,21 +70,21 @@
 %compute_main_inner_0 = OpFunction %void None %24
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %36 = OpLabel
-         %37 = OpIEqual %bool %local_invocation_index_1_param %uint_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
+         %37 = OpULessThan %bool %local_invocation_index_1_param %uint_1
+               OpSelectionMerge %40 None
+               OpBranchConditional %37 %41 %40
+         %41 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %39
-         %39 = OpLabel
+               OpBranch %40
+         %40 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
                OpStore %local_invocation_index_1 %local_invocation_index_1_param None
-         %43 = OpFunctionCall %void %compute_main_1
+         %44 = OpFunctionCall %void %compute_main_1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %12
-         %45 = OpLabel
-         %46 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %47 = OpFunctionCall %void %compute_main_inner_0 %46
+         %46 = OpLabel
+         %47 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %48 = OpFunctionCall %void %compute_main_inner_0 %47
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
index d0d3e6a..57738d7 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
@@ -19,7 +19,7 @@
   compute_main_inner(x_32);
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
index ceacef2..f91b3da 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.dxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
index ceacef2..f91b3da 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.fxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
index ca9c8d6..d1da9b9 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
@@ -30,7 +30,7 @@
 }
 
 void compute_main_inner_1(uint local_invocation_index_1_param, tint_module_vars_struct tint_module_vars) {
-  if ((local_invocation_index_1_param == 0u)) {
+  if ((local_invocation_index_1_param < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm
index 53e6950..61cae64 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.spvasm
@@ -67,7 +67,7 @@
 %compute_main_inner_0 = OpFunction %void None %22
 %local_invocation_index_1_param = OpFunctionParameter %uint
          %34 = OpLabel
-         %35 = OpIEqual %bool %local_invocation_index_1_param %uint_0
+         %35 = OpULessThan %bool %local_invocation_index_1_param %uint_1
                OpSelectionMerge %37 None
                OpBranchConditional %35 %38 %37
          %38 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.glsl
index 6b3c8cf..5ca4ca2 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl
index dcadcbe..0b6d399 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl
index dcadcbe..0b6d399 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
index 6b2adcb..ff726e5 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.spvasm
index 3b83780..f9f170e 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicAdd_794055 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicAdd_794055
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicAdd_794055
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.glsl
index 64b9375..5aa121e 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl
index 7b964f4..11f2fc5 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl
index 7b964f4..11f2fc5 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
index 6f19239..caf13db 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.spvasm
index 036c0a8..9130bb8 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.glsl
index 02240b3..fa50759 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl
index 09e486e..52529ce 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl
index 09e486e..52529ce 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
index c320e04..fd718fd 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.spvasm
index 0c3e73a..fb2367e 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.glsl
index ca62591..57f8d5c 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl
index e2e080f..f555ea2 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl
index e2e080f..f555ea2 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
index 29e6015..10b7ed8 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.spvasm
index 837e346..8508d9b 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicAnd_45a819 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicAnd_45a819
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicAnd_45a819
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl
index 4ab288e..60a2f27 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl
@@ -12,7 +12,7 @@
   atomic_compare_exchange_result_u32 res = atomic_compare_exchange_result_u32(v, (v == 1u));
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl
index f0269ec..77b394a 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl
index f0269ec..77b394a 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_2 = 0u;
     InterlockedExchange(arg_0, 0u, v_2);
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
index 754e1bd..e8569e2 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
@@ -25,7 +25,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm
index 859f27d..582a1ce 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm
@@ -47,7 +47,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %25 None
                OpBranchConditional %24 %26 %25
          %26 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl
index 0e14937..db3a281 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl
@@ -12,7 +12,7 @@
   atomic_compare_exchange_result_i32 res = atomic_compare_exchange_result_i32(v, (v == 1));
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl
index 87188ca..362b678 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl
index 87188ca..362b678 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_2 = int(0);
     InterlockedExchange(arg_0, int(0), v_2);
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
index 8d1afe3..ce2bc59 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
@@ -25,7 +25,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm
index 2013dd6..ce7b8de 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,6 +35,7 @@
 %__atomic_compare_exchange_result_i32 = OpTypeStruct %int %bool
 %_ptr_Function___atomic_compare_exchange_result_i32 = OpTypePointer Function %__atomic_compare_exchange_result_i32
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %atomicCompareExchangeWeak_e88938 = OpFunction %void None %9
@@ -49,20 +50,20 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %25 %27 %26
-         %27 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %28 %27
+         %28 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %26
-         %26 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %32 = OpFunctionCall %void %atomicCompareExchangeWeak_e88938
+         %33 = OpFunctionCall %void %atomicCompareExchangeWeak_e88938
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %36 = OpFunctionCall %void %compute_main_inner %35
+         %35 = OpLabel
+         %36 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %37 = OpFunctionCall %void %compute_main_inner %36
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.glsl
index 4192d90..d375f08 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl
index 5b91e06..b8d9456 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl
index 5b91e06..b8d9456 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
index 3df26cb..07eaad4 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.spvasm
index 36921b4..b73ab08 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.glsl
index beefa9a..59cbfba 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl
index 14ac636..8fac134 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl
index 14ac636..8fac134 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
index 75a6ba3..8e75e18 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.spvasm
index 9184108..b4fda5f 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicExchange_e114ba = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicExchange_e114ba
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicExchange_e114ba
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.glsl
index 0c20234..826b481 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl
index 8b9224d..8d58b28 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl
index 8b9224d..8d58b28 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
index 6ced326..835bd5a 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.spvasm
index 5f72dc2..39ea465 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 38
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,10 +36,11 @@
 %_ptr_Function_uint = OpTypePointer Function %uint
        %void = OpTypeVoid
          %21 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %atomicLoad_361bf1 = OpFunction %uint None %10
          %11 = OpLabel
         %res = OpVariable %_ptr_Function_uint Function
@@ -51,22 +52,22 @@
 %compute_main_inner = OpFunction %void None %21
 %tint_local_index = OpFunctionParameter %uint
          %22 = OpLabel
-         %23 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %25
-         %26 = OpLabel
+         %23 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %26 None
+               OpBranchConditional %23 %27 %26
+         %27 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %uint_0
-               OpBranch %25
-         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %30 = OpFunctionCall %uint %atomicLoad_361bf1
-         %31 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
-               OpStore %31 %30 None
+         %31 = OpFunctionCall %uint %atomicLoad_361bf1
+         %32 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+               OpStore %32 %31 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %37 = OpFunctionCall %void %compute_main_inner %36
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %38 = OpFunctionCall %void %compute_main_inner %37
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.glsl
index 4404804..3a1f396 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl
index 2a8a7d7..da0dae8 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl
index 2a8a7d7..da0dae8 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
index 08c566c..d99d81a 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.spvasm
index 331b96f..8cf5982 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 40
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,11 +37,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %22 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %36 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %atomicLoad_afcc03 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -53,22 +54,22 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
+         %24 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %27 None
+               OpBranchConditional %24 %28 %27
+         %28 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %26
-         %26 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %32 = OpFunctionCall %int %atomicLoad_afcc03
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %33 %32 None
+         %33 = OpFunctionCall %int %atomicLoad_afcc03
+         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %36
-         %37 = OpLabel
-         %38 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %39 = OpFunctionCall %void %compute_main_inner %38
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %40 = OpFunctionCall %void %compute_main_inner %39
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.glsl
index 6543372..5904ad5 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl
index 40e748d..6c71a5b 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl
index 40e748d..6c71a5b 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
index 540a033..7d15c8b 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.spvasm
index adcb356..50b5b26 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicMax_a89cc3 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicMax_a89cc3
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicMax_a89cc3
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.glsl
index 9b2b101..ba350e3 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl
index 4abcb88..fb69870 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl
index 4abcb88..fb69870 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
index f5bb3df..33254f7 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.spvasm
index dc77de4..939c7fb 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.glsl
index bf74b7c..d116e26 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.dxc.hlsl
index ebfbe1b..adab6fd 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.fxc.hlsl
index ebfbe1b..adab6fd 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
index b53bd50..d66a3bd 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.spvasm
index 00064c4..b0490bd 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicMin_278235 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicMin_278235
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicMin_278235
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.glsl
index 8a8c0f4..b9a76a7 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl
index d5f370d..3c7f972 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl
index d5f370d..3c7f972 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
index 88b1f95..bb49acd 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.spvasm
index 859e3ae..dea9bb8 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.glsl
index aa58c34..b2ce9dc 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl
index 60476d7..8fd10e5 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl
index 60476d7..8fd10e5 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
index 9f94b7e..4eec2ac 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.spvasm
index 798a474..a7a67e9 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.glsl
index 2aea376..da7bf25 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl
index a6877c4..fec18e5 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl
index a6877c4..fec18e5 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
index d393d4f..c01422e 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.spvasm
index 3230091..8b77937 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicOr_d09248 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicOr_d09248
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicOr_d09248
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.glsl
index d5cfb55..d0699d5 100644
--- a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   atomicExchange(arg_0, 1u);
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.dxc.hlsl
index 92f9bc3..7519396 100644
--- a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.fxc.hlsl
index 92f9bc3..7519396 100644
--- a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.fxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl
index 5ccd97e..27df88f 100644
--- a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.spvasm
index 6929095..f90b191 100644
--- a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.spvasm
@@ -35,7 +35,7 @@
 %compute_main_inner = OpFunction %void None %16
 %tint_local_index = OpFunctionParameter %uint
          %17 = OpLabel
-         %18 = OpIEqual %bool %tint_local_index %uint_0
+         %18 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %18 %21 %20
          %21 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.glsl
index fe23518..eab4429 100644
--- a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   atomicExchange(arg_0, 1);
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl
index 899077b..eed874e 100644
--- a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl
index 899077b..eed874e 100644
--- a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl
index 6e845a0..5dcb564 100644
--- a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.spvasm
index 6743700..e0293ef 100644
--- a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 32
+; Bound: 33
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -26,6 +26,7 @@
      %uint_0 = OpConstant %uint 0
       %int_1 = OpConstant %int 1
          %17 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
@@ -37,20 +38,20 @@
 %compute_main_inner = OpFunction %void None %17
 %tint_local_index = OpFunctionParameter %uint
          %18 = OpLabel
-         %19 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %21 None
-               OpBranchConditional %19 %22 %21
-         %22 = OpLabel
+         %19 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %22 None
+               OpBranchConditional %19 %23 %22
+         %23 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %21
-         %21 = OpLabel
+               OpBranch %22
+         %22 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %27 = OpFunctionCall %void %atomicStore_8bea94
+         %28 = OpFunctionCall %void %atomicStore_8bea94
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %31 = OpFunctionCall %void %compute_main_inner %30
+         %30 = OpLabel
+         %31 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %32 = OpFunctionCall %void %compute_main_inner %31
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.glsl
index b53e689..0ce3699 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl
index 9f1bc08..cd2a48b 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl
index 9f1bc08..cd2a48b 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
index f81b4ea..0f2a958 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.spvasm
index 2d01e8d..f7422f2 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.glsl
index 6b210b7..9f4a885 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl
index 2a4bab2..a5e00ae 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl
index 2a4bab2..a5e00ae 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
index 3556edb..7b63fdd 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.spvasm
index 3b657ed..a287f0d 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicSub_77883a = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicSub_77883a
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicSub_77883a
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.glsl
index bf14eef..8ed8292 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl
index d9d8754..3a60d63 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl
index d9d8754..3a60d63 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
index 6105556..9cd2fb3 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.spvasm
index 76ccdfb..d77877a 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,11 +38,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %23 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
 %atomicXor_75dc95 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -54,22 +55,22 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
+         %25 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %28 None
+               OpBranchConditional %25 %29 %28
+         %29 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %27
-         %27 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpFunctionCall %int %atomicXor_75dc95
-         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %34 %33 None
+         %34 = OpFunctionCall %int %atomicXor_75dc95
+         %35 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %35 %34 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.glsl
index 6e309ed..92a5898 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl
index bb73393..035e159 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl
index bb73393..035e159 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
index 5f9d01f..767ec44 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.spvasm
index 4d23b8b..91e4654 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.spvasm
@@ -52,7 +52,7 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
+         %24 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %26 None
                OpBranchConditional %24 %27 %26
          %27 = OpLabel
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.glsl
index 0b99a16..c0b8eaf 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.glsl
@@ -13,7 +13,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0u;
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl
index 61bb6ba..4cda66b 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0u;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl
index 61bb6ba..4cda66b 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0u;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
index d90a15f..08819fb 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0u;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.spvasm
index 816d587..28446a3 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,10 +36,11 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_uint = OpTypePointer Function %uint
          %23 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-         %35 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %workgroupUniformLoad_37307c = OpFunction %uint None %10
          %11 = OpLabel
         %res = OpVariable %_ptr_Function_uint Function
@@ -53,7 +54,7 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
+         %25 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %25 %29 %28
          %29 = OpLabel
@@ -61,14 +62,14 @@
                OpBranch %28
          %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %31 = OpFunctionCall %uint %workgroupUniformLoad_37307c
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
-               OpStore %32 %31 None
+         %32 = OpFunctionCall %uint %workgroupUniformLoad_37307c
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+               OpStore %33 %32 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %35
-         %36 = OpLabel
-         %37 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %38 = OpFunctionCall %void %compute_main_inner %37
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %39 = OpFunctionCall %void %compute_main_inner %38
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.glsl
index c63e5db..93c445c 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.glsl
@@ -13,7 +13,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0f;
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl
index 7e99cbc..cd9b40b 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl
index 7e99cbc..cd9b40b 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
index faffffa..9e27256 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0.0f;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.spvasm
index 3db3497..a6ae6d6 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,11 +37,12 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_float = OpTypePointer Function %float
          %24 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
     %float_0 = OpConstant %float 0
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-         %37 = OpTypeFunction %void
+     %uint_0 = OpConstant %uint 0
+         %38 = OpTypeFunction %void
 %workgroupUniformLoad_7a857c = OpFunction %float None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_float Function
@@ -55,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %29 None
                OpBranchConditional %26 %30 %29
          %30 = OpLabel
@@ -68,9 +69,9 @@
                OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.glsl
index 391bf62..fe7d6e9 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.glsl
@@ -13,7 +13,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0;
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl
index ee3aa97..5e6f50a 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl
index ee3aa97..5e6f50a 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
index a304788..1deea1c 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.spvasm
index f96e90e..70a60b3 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,11 +37,12 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_int = OpTypePointer Function %int
          %24 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+     %uint_0 = OpConstant %uint 0
+         %38 = OpTypeFunction %void
 %workgroupUniformLoad_9d33de = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -55,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %29 None
                OpBranchConditional %26 %30 %29
          %30 = OpLabel
@@ -68,9 +69,9 @@
                OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.glsl
index 619fb33..89d6948 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.glsl
@@ -14,7 +14,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0hf;
   }
   barrier();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl
index 5bc798a..75e613a 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = float16_t(0.0h);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
index 89750d6..0db1de0 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0.0h;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.spvasm
index fd6180e..1e46f83 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -40,11 +40,12 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_half = OpTypePointer Function %half
          %24 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %half_0x0p_0 = OpConstant %half 0x0p+0
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
-         %37 = OpTypeFunction %void
+     %uint_0 = OpConstant %uint 0
+         %38 = OpTypeFunction %void
 %workgroupUniformLoad_e07d08 = OpFunction %half None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_half Function
@@ -58,7 +59,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %29 None
                OpBranchConditional %26 %30 %29
          %30 = OpLabel
@@ -71,9 +72,9 @@
                OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.glsl
index 143bba7..112f45d 100644
--- a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl
index f27cbc9..32fbcc7 100644
--- a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl
index f27cbc9..32fbcc7 100644
--- a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl
index 9b680a8..61b8342 100644
--- a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.spvasm
index 8181454..12e7a91 100644
--- a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicAdd_794055 = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicAdd_794055
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicAdd_794055
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.glsl
index dba754e..e2c377c 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl
index b1f4b3c..6c70f54 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl
index b1f4b3c..6c70f54 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl
index 3f4592c..1a4ba6b 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.spvasm
index 4c37336..88b21eb 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.glsl
index 5fcafb9..5cb7fe0 100644
--- a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl
index 80cd620..17161ac 100644
--- a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl
index 80cd620..17161ac 100644
--- a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl
index f0e2cdf..c8b47a2 100644
--- a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.spvasm
index 72052a8..fe65f03 100644
--- a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.glsl
index fe4e1f8..21c0ea0 100644
--- a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl
index ec09817..5b80e05 100644
--- a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl
index ec09817..5b80e05 100644
--- a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl
index 61efb42..9dd6abd 100644
--- a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.spvasm
index 18b1e48..f3b38e1 100644
--- a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicAnd_45a819 = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicAnd_45a819
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicAnd_45a819
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl
index 1d795fd..25225b9 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.glsl
@@ -15,7 +15,7 @@
   atomic_compare_exchange_result_u32 res = atomic_compare_exchange_result_u32(v_1, (v_1 == v));
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl
index 2b8963b..52ebfbe 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.dxc.hlsl
@@ -20,7 +20,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_3 = 0u;
     InterlockedExchange(arg_0, 0u, v_3);
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl
index 2b8963b..52ebfbe 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.fxc.hlsl
@@ -20,7 +20,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_3 = 0u;
     InterlockedExchange(arg_0, 0u, v_3);
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
index ffce117..41e65c2 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
@@ -27,7 +27,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm
index 72d7b45..c060c9c 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %27
 %tint_local_index = OpFunctionParameter %uint
          %28 = OpLabel
-         %29 = OpIEqual %bool %tint_local_index %uint_0
+         %29 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %30 None
                OpBranchConditional %29 %31 %30
          %31 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl
index 08bdd8f..fe56f90 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.glsl
@@ -15,7 +15,7 @@
   atomic_compare_exchange_result_i32 res = atomic_compare_exchange_result_i32(v_1, (v_1 == v));
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl
index 89f8f13..2bc1ad4 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.dxc.hlsl
@@ -20,7 +20,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_3 = int(0);
     InterlockedExchange(arg_0, int(0), v_3);
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl
index 89f8f13..2bc1ad4 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.fxc.hlsl
@@ -20,7 +20,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_3 = int(0);
     InterlockedExchange(arg_0, int(0), v_3);
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
index 2b8f9c8..1d0f00c 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
@@ -27,7 +27,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm
index b71ff76..1c03b7c 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -38,6 +38,7 @@
 %__atomic_compare_exchange_result_i32 = OpTypeStruct %int %bool
 %_ptr_Function___atomic_compare_exchange_result_i32 = OpTypePointer Function %__atomic_compare_exchange_result_i32
          %28 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %atomicCompareExchangeWeak_e88938 = OpFunction %void None %9
@@ -58,20 +59,20 @@
 %compute_main_inner = OpFunction %void None %28
 %tint_local_index = OpFunctionParameter %uint
          %29 = OpLabel
-         %30 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %31
-         %32 = OpLabel
+         %30 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %32 None
+               OpBranchConditional %30 %33 %32
+         %33 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %31
-         %31 = OpLabel
+               OpBranch %32
+         %32 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %37 = OpFunctionCall %void %atomicCompareExchangeWeak_e88938
+         %38 = OpFunctionCall %void %atomicCompareExchangeWeak_e88938
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %41 = OpFunctionCall %void %compute_main_inner %40
+         %40 = OpLabel
+         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %42 = OpFunctionCall %void %compute_main_inner %41
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.glsl
index 5d28b93..313eeae 100644
--- a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl
index fb56047..0710154 100644
--- a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl
index fb56047..0710154 100644
--- a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl
index 95c32b7..136fa14 100644
--- a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.spvasm
index bb0ddec..8b541e9 100644
--- a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.glsl
index 70ceaef..e409090 100644
--- a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl
index 387e985..e244617 100644
--- a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl
index 387e985..e244617 100644
--- a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl
index f5fff32..f025f5a 100644
--- a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.spvasm
index cff9643..e580d17 100644
--- a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicExchange_e114ba = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicExchange_e114ba
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicExchange_e114ba
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.glsl
index 0c20234..826b481 100644
--- a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl
index 8b9224d..8d58b28 100644
--- a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl
index 8b9224d..8d58b28 100644
--- a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl
index 6ced326..835bd5a 100644
--- a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.spvasm
index 5f72dc2..39ea465 100644
--- a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 38
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,10 +36,11 @@
 %_ptr_Function_uint = OpTypePointer Function %uint
        %void = OpTypeVoid
          %21 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %atomicLoad_361bf1 = OpFunction %uint None %10
          %11 = OpLabel
         %res = OpVariable %_ptr_Function_uint Function
@@ -51,22 +52,22 @@
 %compute_main_inner = OpFunction %void None %21
 %tint_local_index = OpFunctionParameter %uint
          %22 = OpLabel
-         %23 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %25
-         %26 = OpLabel
+         %23 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %26 None
+               OpBranchConditional %23 %27 %26
+         %27 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %uint_0
-               OpBranch %25
-         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %30 = OpFunctionCall %uint %atomicLoad_361bf1
-         %31 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
-               OpStore %31 %30 None
+         %31 = OpFunctionCall %uint %atomicLoad_361bf1
+         %32 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+               OpStore %32 %31 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %37 = OpFunctionCall %void %compute_main_inner %36
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %38 = OpFunctionCall %void %compute_main_inner %37
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.glsl
index 4404804..3a1f396 100644
--- a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl
index 2a8a7d7..da0dae8 100644
--- a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl
index 2a8a7d7..da0dae8 100644
--- a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl
index 08c566c..d99d81a 100644
--- a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl
@@ -16,7 +16,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.spvasm
index 331b96f..8cf5982 100644
--- a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 40
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,11 +37,12 @@
 %_ptr_Function_int = OpTypePointer Function %int
        %void = OpTypeVoid
          %22 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %36 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %atomicLoad_afcc03 = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -53,22 +54,22 @@
 %compute_main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
+         %24 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %27 None
+               OpBranchConditional %24 %28 %27
+         %28 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %26
-         %26 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %32 = OpFunctionCall %int %atomicLoad_afcc03
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %33 %32 None
+         %33 = OpFunctionCall %int %atomicLoad_afcc03
+         %34 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %36
-         %37 = OpLabel
-         %38 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %39 = OpFunctionCall %void %compute_main_inner %38
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %40 = OpFunctionCall %void %compute_main_inner %39
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.glsl
index caa1f0b..2d24394 100644
--- a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl
index 9245b8b..021a664 100644
--- a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl
index 9245b8b..021a664 100644
--- a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl
index d8a5f95..bb619d8 100644
--- a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.spvasm
index 25a49a8..478bfaf 100644
--- a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicMax_a89cc3 = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicMax_a89cc3
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicMax_a89cc3
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.glsl
index e7183bf..bd53e1a 100644
--- a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl
index 52782b4..469d18d 100644
--- a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl
index 52782b4..469d18d 100644
--- a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl
index 0cd324b..151b103 100644
--- a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.spvasm
index 55b72fc..7706356 100644
--- a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.glsl
index 9ef71b0..5d9aacf 100644
--- a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.dxc.hlsl
index ffee632..4fb09c4 100644
--- a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.fxc.hlsl
index ffee632..4fb09c4 100644
--- a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl
index 92f7ba2..e28a19b 100644
--- a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.spvasm
index d7566cf..19aded5 100644
--- a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicMin_278235 = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicMin_278235
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicMin_278235
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.glsl
index 02b31a9..215799c 100644
--- a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl
index f890076..74ab196 100644
--- a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl
index f890076..74ab196 100644
--- a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl
index 3b475fe..6291630 100644
--- a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.spvasm
index 63ac140..0d29b9b 100644
--- a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.glsl
index 886c9fa..5b15e02 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl
index a99a5a4..4e3c2b0 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl
index a99a5a4..4e3c2b0 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl
index e273b46..4b05e09 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.spvasm
index 423f6c7..e8f52cb 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.glsl
index adf86b6..cf901f3 100644
--- a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl
index b664a1a..dde4d86 100644
--- a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl
index b664a1a..dde4d86 100644
--- a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl
index d489fb4..7faf3b7 100644
--- a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.spvasm
index f4107a9..4544a19 100644
--- a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicOr_d09248 = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicOr_d09248
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicOr_d09248
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.glsl
index 3f28303..e9e0b49 100644
--- a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.glsl
@@ -6,7 +6,7 @@
   atomicExchange(arg_0, arg_1);
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.dxc.hlsl
index 8311dfb..6d67ac3 100644
--- a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.fxc.hlsl
index 8311dfb..6d67ac3 100644
--- a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl
index 6cc6ee2..4454d30 100644
--- a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.spvasm
index bbd5eb9..0c60f9b 100644
--- a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.spvasm
@@ -40,7 +40,7 @@
 %compute_main_inner = OpFunction %void None %19
 %tint_local_index = OpFunctionParameter %uint
          %20 = OpLabel
-         %21 = OpIEqual %bool %tint_local_index %uint_0
+         %21 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %23 None
                OpBranchConditional %21 %24 %23
          %24 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.glsl
index ab33d08..411b36f 100644
--- a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.glsl
@@ -6,7 +6,7 @@
   atomicExchange(arg_0, arg_1);
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl
index 9a205ab..cb60c2c 100644
--- a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.dxc.hlsl
@@ -11,7 +11,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl
index 9a205ab..cb60c2c 100644
--- a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.fxc.hlsl
@@ -11,7 +11,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl
index dfc901d..c9c45dc 100644
--- a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.spvasm
index d63e9f7..02e471a 100644
--- a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -28,6 +28,7 @@
      %uint_2 = OpConstant %uint 2
      %uint_0 = OpConstant %uint 0
          %20 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
@@ -42,20 +43,20 @@
 %compute_main_inner = OpFunction %void None %20
 %tint_local_index = OpFunctionParameter %uint
          %21 = OpLabel
-         %22 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %24
-         %25 = OpLabel
+         %22 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %25 None
+               OpBranchConditional %22 %26 %25
+         %26 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %24
-         %24 = OpLabel
+               OpBranch %25
+         %25 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %30 = OpFunctionCall %void %atomicStore_8bea94
+         %31 = OpFunctionCall %void %atomicStore_8bea94
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %34 = OpFunctionCall %void %compute_main_inner %33
+         %33 = OpLabel
+         %34 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %35 = OpFunctionCall %void %compute_main_inner %34
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.glsl
index f24a84e..cdff37a 100644
--- a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl
index 639be42..5ec8678 100644
--- a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl
index 639be42..5ec8678 100644
--- a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl
index 1ac0133..32591d8 100644
--- a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.spvasm
index 393ff05..8fa3688 100644
--- a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.glsl
index ab07356..65821ba 100644
--- a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl
index fa7658e..307ed07 100644
--- a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl
index fa7658e..307ed07 100644
--- a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl
index 52cf3e0..9516b8a 100644
--- a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.spvasm
index dc787b6..2f18c54 100644
--- a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicSub_77883a = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicSub_77883a
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicSub_77883a
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.glsl
index 25ba0d0..246466c 100644
--- a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl
index 6b8b52a..4554acd 100644
--- a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl
index 6b8b52a..4554acd 100644
--- a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     int v_1 = int(0);
     InterlockedExchange(arg_0, int(0), v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl
index 5311335..e779590 100644
--- a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.spvasm
index 38d0981..bb6444e 100644
--- a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -39,11 +39,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %25 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
    %uint_264 = OpConstant %uint 264
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %39 = OpTypeFunction %void
+         %40 = OpTypeFunction %void
 %atomicXor_75dc95 = OpFunction %int None %11
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function
@@ -58,22 +59,22 @@
 %compute_main_inner = OpFunction %void None %25
 %tint_local_index = OpFunctionParameter %uint
          %26 = OpLabel
-         %27 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
+         %27 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %30 None
+               OpBranchConditional %27 %31 %30
+         %31 = OpLabel
                OpAtomicStore %arg_0 %uint_2 %uint_0 %int_0
-               OpBranch %29
-         %29 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %35 = OpFunctionCall %int %atomicXor_75dc95
-         %36 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
-               OpStore %36 %35 None
+         %36 = OpFunctionCall %int %atomicXor_75dc95
+         %37 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+               OpStore %37 %36 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %compute_main_inner %41
+%compute_main = OpFunction %void None %40
+         %41 = OpLabel
+         %42 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %43 = OpFunctionCall %void %compute_main_inner %42
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.glsl b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.glsl
index 2d26e64..065106c 100644
--- a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.glsl
@@ -11,7 +11,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomicExchange(arg_0, 0u);
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl
index b1878d6..489ab8f 100644
--- a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl
index b1878d6..489ab8f 100644
--- a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     uint v_1 = 0u;
     InterlockedExchange(arg_0, 0u, v_1);
   }
diff --git a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl
index b0fe563..6b9d1da 100644
--- a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.spvasm
index 4f8c57b..a46cfed 100644
--- a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %26 %29 %28
          %29 = OpLabel
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.glsl
index 0b99a16..c0b8eaf 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.glsl
@@ -13,7 +13,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0u;
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl
index 61bb6ba..4cda66b 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0u;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl
index 61bb6ba..4cda66b 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0u;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
index d90a15f..08819fb 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0u;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.spvasm
index 816d587..28446a3 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -36,10 +36,11 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_uint = OpTypePointer Function %uint
          %23 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-         %35 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %workgroupUniformLoad_37307c = OpFunction %uint None %10
          %11 = OpLabel
         %res = OpVariable %_ptr_Function_uint Function
@@ -53,7 +54,7 @@
 %compute_main_inner = OpFunction %void None %23
 %tint_local_index = OpFunctionParameter %uint
          %24 = OpLabel
-         %25 = OpIEqual %bool %tint_local_index %uint_0
+         %25 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %28 None
                OpBranchConditional %25 %29 %28
          %29 = OpLabel
@@ -61,14 +62,14 @@
                OpBranch %28
          %28 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %31 = OpFunctionCall %uint %workgroupUniformLoad_37307c
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
-               OpStore %32 %31 None
+         %32 = OpFunctionCall %uint %workgroupUniformLoad_37307c
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+               OpStore %33 %32 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %35
-         %36 = OpLabel
-         %37 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %38 = OpFunctionCall %void %compute_main_inner %37
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %39 = OpFunctionCall %void %compute_main_inner %38
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.glsl
index c63e5db..93c445c 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.glsl
@@ -13,7 +13,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0f;
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl
index 7e99cbc..cd9b40b 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl
index 7e99cbc..cd9b40b 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
index faffffa..9e27256 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0.0f;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.spvasm
index 3db3497..a6ae6d6 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,11 +37,12 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_float = OpTypePointer Function %float
          %24 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
     %float_0 = OpConstant %float 0
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-         %37 = OpTypeFunction %void
+     %uint_0 = OpConstant %uint 0
+         %38 = OpTypeFunction %void
 %workgroupUniformLoad_7a857c = OpFunction %float None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_float Function
@@ -55,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %29 None
                OpBranchConditional %26 %30 %29
          %30 = OpLabel
@@ -68,9 +69,9 @@
                OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.glsl
index 391bf62..fe7d6e9 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.glsl
@@ -13,7 +13,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0;
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl
index ee3aa97..5e6f50a 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl
index ee3aa97..5e6f50a 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.fxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
index a304788..1deea1c 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.spvasm b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.spvasm
index f96e90e..70a60b3 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,11 +37,12 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_int = OpTypePointer Function %int
          %24 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %37 = OpTypeFunction %void
+     %uint_0 = OpConstant %uint 0
+         %38 = OpTypeFunction %void
 %workgroupUniformLoad_9d33de = OpFunction %int None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_int Function
@@ -55,7 +56,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %29 None
                OpBranchConditional %26 %30 %29
          %30 = OpLabel
@@ -68,9 +69,9 @@
                OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.glsl
index 619fb33..89d6948 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.glsl
@@ -14,7 +14,7 @@
   return res;
 }
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = 0.0hf;
   }
   barrier();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl
index 5bc798a..75e613a 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.dxc.hlsl
@@ -14,7 +14,7 @@
 }
 
 void compute_main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     arg_0 = float16_t(0.0h);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
index 89750d6..0db1de0 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
 }
 
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.arg_0) = 0.0h;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.spvasm b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.spvasm
index fd6180e..1e46f83 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -40,11 +40,12 @@
    %uint_264 = OpConstant %uint 264
 %_ptr_Function_half = OpTypePointer Function %half
          %24 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
 %half_0x0p_0 = OpConstant %half 0x0p+0
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
-         %37 = OpTypeFunction %void
+     %uint_0 = OpConstant %uint 0
+         %38 = OpTypeFunction %void
 %workgroupUniformLoad_e07d08 = OpFunction %half None %11
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_half Function
@@ -58,7 +59,7 @@
 %compute_main_inner = OpFunction %void None %24
 %tint_local_index = OpFunctionParameter %uint
          %25 = OpLabel
-         %26 = OpIEqual %bool %tint_local_index %uint_0
+         %26 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %29 None
                OpBranchConditional %26 %30 %29
          %30 = OpLabel
@@ -71,9 +72,9 @@
                OpStore %34 %33 None
                OpReturn
                OpFunctionEnd
-%compute_main = OpFunction %void None %37
-         %38 = OpLabel
-         %39 = OpLoad %uint %compute_main_local_invocation_index_Input None
-         %40 = OpFunctionCall %void %compute_main_inner %39
+%compute_main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %compute_main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
index 0caf535..bc254a5 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 shared int i;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     i = 0;
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.dxc.hlsl
index 2fadb57..f95041b 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.dxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int i;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     i = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.fxc.hlsl
index 2fadb57..f95041b 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.fxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int i;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     i = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl
index d5b0976..ae1b0b0 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl
@@ -10,7 +10,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.i) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.spvasm b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.spvasm
index 4a99025..534383a 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.spvasm
@@ -23,7 +23,7 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %10 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
      %uint_2 = OpConstant %uint 2
@@ -34,7 +34,7 @@
  %main_inner = OpFunction %void None %10
 %tint_local_index = OpFunctionParameter %uint
          %11 = OpLabel
-         %12 = OpIEqual %bool %tint_local_index %uint_0
+         %12 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %15 None
                OpBranchConditional %12 %16 %15
          %16 = OpLabel
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.glsl b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.glsl
index a016517..f31ff43 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return S;
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = 0;
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl
index c26f392..c74e2fe 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl
index c26f392..c74e2fe 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl
index 14d7821..e97028a 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
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 d49b167..a262c58 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
@@ -24,7 +24,7 @@
           %8 = OpTypeFunction %int
        %void = OpTypeVoid
          %14 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
      %uint_2 = OpConstant %uint 2
@@ -38,7 +38,7 @@
  %main_inner = OpFunction %void None %14
 %tint_local_index = OpFunctionParameter %uint
          %15 = OpLabel
-         %16 = OpIEqual %bool %tint_local_index %uint_0
+         %16 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %19 None
                OpBranchConditional %16 %20 %19
          %20 = OpLabel
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.glsl b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.glsl
index be83d90..f0a2bcb 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return S.i;
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = str(0);
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl
index dce8bcb..b74be34 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl
index dce8bcb..b74be34 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
index b7f7555..b765e2f 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
@@ -18,7 +18,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = str{};
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.spvasm
index 7aadb96..219b820 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 34
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,11 +30,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %18 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
-         %24 = OpConstantNull %str
+         %25 = OpConstantNull %str
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
-         %30 = OpTypeFunction %void
+         %31 = OpTypeFunction %void
        %func = OpFunction %int None %9
          %10 = OpLabel
          %11 = OpAccessChain %_ptr_Workgroup_int %S %uint_0
@@ -44,20 +45,20 @@
  %main_inner = OpFunction %void None %18
 %tint_local_index = OpFunctionParameter %uint
          %19 = OpLabel
-         %20 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %22
+         %20 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %23 None
+               OpBranchConditional %20 %24 %23
+         %24 = OpLabel
+               OpStore %S %25 None
+               OpBranch %23
          %23 = OpLabel
-               OpStore %S %24 None
-               OpBranch %22
-         %22 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
           %r = OpFunctionCall %int %func
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %30
-         %31 = OpLabel
-         %32 = OpLoad %uint %main_local_invocation_index_Input None
-         %33 = OpFunctionCall %void %main_inner %32
+       %main = OpFunction %void None %31
+         %32 = OpLabel
+         %33 = OpLoad %uint %main_local_invocation_index_Input None
+         %34 = OpFunctionCall %void %main_inner %33
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl
index 223ba89..bd7a2c1 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return S[pointer_indices[0u]];
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = mat2(vec2(0.0f), vec2(0.0f));
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl
index 5ba60f7..16d87a0 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl
index 5ba60f7..16d87a0 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 473e671..ad1c36d 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = float2x2(float2(0.0f), float2(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm
index 1408342..095d53d 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -31,14 +31,13 @@
 %_ptr_Workgroup_v2float = OpTypePointer Workgroup %v2float
        %void = OpTypeVoid
          %22 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
-         %29 = OpConstantNull %mat2v2float
+         %28 = OpConstantNull %mat2v2float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-         %39 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
        %func = OpFunction %v2float None %13
 %pointer_indices = OpFunctionParameter %_arr_uint_uint_1
          %14 = OpLabel
@@ -50,22 +49,22 @@
  %main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %24 %28 %27
-         %28 = OpLabel
-               OpStore %S %29 None
-               OpBranch %27
+         %24 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %26 None
+               OpBranchConditional %24 %27 %26
          %27 = OpLabel
+               OpStore %S %28 None
+               OpBranch %26
+         %26 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpBitcast %uint %int_1
-         %36 = OpCompositeConstruct %_arr_uint_uint_1 %33
-          %r = OpFunctionCall %v2float %func %36
+         %32 = OpBitcast %uint %int_1
+         %35 = OpCompositeConstruct %_arr_uint_uint_1 %32
+          %r = OpFunctionCall %v2float %func %35
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %main_inner %41
+       %main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.glsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.glsl
index 5cf842b..49456d7 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return S;
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = vec4(0.0f);
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl
index 6fa3edf..83027f3 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = (0.0f).xxxx;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl
index 6fa3edf..83027f3 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = (0.0f).xxxx;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl
index 9c27cd4..abfcc11 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = float4(0.0f);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
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 2df5ed4..295a0b9 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
@@ -25,7 +25,7 @@
           %9 = OpTypeFunction %v4float
        %void = OpTypeVoid
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %22 = OpConstantNull %v4float
      %uint_2 = OpConstant %uint 2
@@ -39,7 +39,7 @@
  %main_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl
index ab4b4a5..711ba0e 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return S[pointer_indices[0u]];
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = mat2x4(vec4(0.0f), vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl
index 3f4532e..a7d7607 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x4((0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl
index 3f4532e..a7d7607 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x4((0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index fde7e86..ced2bd1 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = float2x4(float4(0.0f), float4(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm
index 4427b5c..7329b65 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -31,14 +31,13 @@
 %_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
        %void = OpTypeVoid
          %22 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
-         %29 = OpConstantNull %mat2v4float
+         %28 = OpConstantNull %mat2v4float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-         %39 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
        %func = OpFunction %v4float None %13
 %pointer_indices = OpFunctionParameter %_arr_uint_uint_1
          %14 = OpLabel
@@ -50,22 +49,22 @@
  %main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %24 %28 %27
-         %28 = OpLabel
-               OpStore %S %29 None
-               OpBranch %27
+         %24 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %26 None
+               OpBranchConditional %24 %27 %26
          %27 = OpLabel
+               OpStore %S %28 None
+               OpBranch %26
+         %26 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpBitcast %uint %int_1
-         %36 = OpCompositeConstruct %_arr_uint_uint_1 %33
-          %r = OpFunctionCall %v4float %func %36
+         %32 = OpBitcast %uint %int_1
+         %35 = OpCompositeConstruct %_arr_uint_uint_1 %32
+          %r = OpFunctionCall %v4float %func %35
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %main_inner %41
+       %main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl
index fbfeb0d..7408133 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return S.i;
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = str(vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl
index 465ec7d..406e532 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl
index 465ec7d..406e532 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
index 297cab4..bce70e9 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -18,7 +18,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = str{};
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm
index 3957fd5..8da5069 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -31,11 +31,12 @@
      %uint_0 = OpConstant %uint 0
        %void = OpTypeVoid
          %19 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
-         %25 = OpConstantNull %str
+         %26 = OpConstantNull %str
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
-         %31 = OpTypeFunction %void
+         %32 = OpTypeFunction %void
        %func = OpFunction %v4float None %10
          %11 = OpLabel
          %12 = OpAccessChain %_ptr_Workgroup_v4float %S %uint_0
@@ -45,20 +46,20 @@
  %main_inner = OpFunction %void None %19
 %tint_local_index = OpFunctionParameter %uint
          %20 = OpLabel
-         %21 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %23
+         %21 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %24 None
+               OpBranchConditional %21 %25 %24
+         %25 = OpLabel
+               OpStore %S %26 None
+               OpBranch %24
          %24 = OpLabel
-               OpStore %S %25 None
-               OpBranch %23
-         %23 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
           %r = OpFunctionCall %v4float %func
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %31
-         %32 = OpLabel
-         %33 = OpLoad %uint %main_local_invocation_index_Input None
-         %34 = OpFunctionCall %void %main_inner %33
+       %main = OpFunction %void None %32
+         %33 = OpLabel
+         %34 = OpLoad %uint %main_local_invocation_index_Input None
+         %35 = OpFunctionCall %void %main_inner %34
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.glsl b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.glsl
index b498e96..efd4100 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   S = 42;
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = 0;
   }
   barrier();
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl
index 747ebf3..3003a50 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl
index 747ebf3..3003a50 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl
index 065ee76..384cd66 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
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 b34d24c..75fa397 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
@@ -24,7 +24,7 @@
           %9 = OpTypeFunction %void
      %int_42 = OpConstant %int 42
          %14 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
      %uint_2 = OpConstant %uint 2
@@ -37,7 +37,7 @@
  %main_inner = OpFunction %void None %14
 %tint_local_index = OpFunctionParameter %uint
          %15 = OpLabel
-         %16 = OpIEqual %bool %tint_local_index %uint_0
+         %16 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %19 None
                OpBranchConditional %16 %20 %19
          %20 = OpLabel
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.glsl b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.glsl
index 1e601f6..8b06408 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   S.i = 42;
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = str(0);
   }
   barrier();
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl
index 733a3f9..f45fea8 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl
index 733a3f9..f45fea8 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
index e87a505..d3896c6 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
@@ -18,7 +18,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = str{};
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.spvasm
index 8d55b70..eb41413 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,8 +30,9 @@
      %uint_0 = OpConstant %uint 0
      %int_42 = OpConstant %int 42
          %18 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
-         %24 = OpConstantNull %str
+         %25 = OpConstantNull %str
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
        %func = OpFunction %void None %10
@@ -43,20 +44,20 @@
  %main_inner = OpFunction %void None %18
 %tint_local_index = OpFunctionParameter %uint
          %19 = OpLabel
-         %20 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %22
+         %20 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %23 None
+               OpBranchConditional %20 %24 %23
+         %24 = OpLabel
+               OpStore %S %25 None
+               OpBranch %23
          %23 = OpLabel
-               OpStore %S %24 None
-               OpBranch %22
-         %22 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %28 = OpFunctionCall %void %func
+         %29 = OpFunctionCall %void %func
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %10
-         %30 = OpLabel
-         %31 = OpLoad %uint %main_local_invocation_index_Input None
-         %32 = OpFunctionCall %void %main_inner %31
+         %31 = OpLabel
+         %32 = OpLoad %uint %main_local_invocation_index_Input None
+         %33 = OpFunctionCall %void %main_inner %32
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl
index 5c1475c..468c8fe 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   S[pointer_indices[0u]] = vec2(0.0f);
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = mat2(vec2(0.0f), vec2(0.0f));
   }
   barrier();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl
index a7e776a..924c11b 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl
index a7e776a..924c11b 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x2((0.0f).xx, (0.0f).xx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index b0073bc..01602c0 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = float2x2(float2(0.0f), float2(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm
index c70f4ca..87ed8ad 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -31,14 +31,13 @@
 %_ptr_Workgroup_v2float = OpTypePointer Workgroup %v2float
          %19 = OpConstantNull %v2float
          %22 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
-         %29 = OpConstantNull %mat2v2float
+         %28 = OpConstantNull %mat2v2float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-         %39 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
        %func = OpFunction %void None %14
 %pointer_indices = OpFunctionParameter %_arr_uint_uint_1
          %15 = OpLabel
@@ -50,22 +49,22 @@
  %main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %24 %28 %27
-         %28 = OpLabel
-               OpStore %S %29 None
-               OpBranch %27
+         %24 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %26 None
+               OpBranchConditional %24 %27 %26
          %27 = OpLabel
+               OpStore %S %28 None
+               OpBranch %26
+         %26 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpBitcast %uint %int_1
-         %36 = OpCompositeConstruct %_arr_uint_uint_1 %33
-         %37 = OpFunctionCall %void %func %36
+         %32 = OpBitcast %uint %int_1
+         %35 = OpCompositeConstruct %_arr_uint_uint_1 %32
+         %36 = OpFunctionCall %void %func %35
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %main_inner %41
+       %main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.glsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.glsl
index 382b686..6b7fb3b 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   S = vec4(0.0f);
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = vec4(0.0f);
   }
   barrier();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl
index e2caeb9..cf99f7a 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = (0.0f).xxxx;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl
index e2caeb9..cf99f7a 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = (0.0f).xxxx;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl
index ce2e49e..8bc7a65 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = float4(0.0f);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
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 1acbb95..ec918c0 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
@@ -25,7 +25,7 @@
          %10 = OpTypeFunction %void
          %12 = OpConstantNull %v4float
          %15 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
@@ -37,7 +37,7 @@
  %main_inner = OpFunction %void None %15
 %tint_local_index = OpFunctionParameter %uint
          %16 = OpLabel
-         %17 = OpIEqual %bool %tint_local_index %uint_0
+         %17 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %20 None
                OpBranchConditional %17 %21 %20
          %21 = OpLabel
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl
index 1ecadd4..14563c9 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   S[pointer_indices[0u]] = vec4(0.0f);
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = mat2x4(vec4(0.0f), vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl
index 483ab62..afb2e6f 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x4((0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl
index 483ab62..afb2e6f 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = float2x4((0.0f).xxxx, (0.0f).xxxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index 042a857..0104573 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = float2x4(float4(0.0f), float4(0.0f));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm
index 6495653..93f1c44 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -31,14 +31,13 @@
 %_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
          %19 = OpConstantNull %v4float
          %22 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
        %bool = OpTypeBool
-         %29 = OpConstantNull %mat2v4float
+         %28 = OpConstantNull %mat2v4float
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
-         %39 = OpTypeFunction %void
+         %38 = OpTypeFunction %void
        %func = OpFunction %void None %14
 %pointer_indices = OpFunctionParameter %_arr_uint_uint_1
          %15 = OpLabel
@@ -50,22 +49,22 @@
  %main_inner = OpFunction %void None %22
 %tint_local_index = OpFunctionParameter %uint
          %23 = OpLabel
-         %24 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %27 None
-               OpBranchConditional %24 %28 %27
-         %28 = OpLabel
-               OpStore %S %29 None
-               OpBranch %27
+         %24 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %26 None
+               OpBranchConditional %24 %27 %26
          %27 = OpLabel
+               OpStore %S %28 None
+               OpBranch %26
+         %26 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %33 = OpBitcast %uint %int_1
-         %36 = OpCompositeConstruct %_arr_uint_uint_1 %33
-         %37 = OpFunctionCall %void %func %36
+         %32 = OpBitcast %uint %int_1
+         %35 = OpCompositeConstruct %_arr_uint_uint_1 %32
+         %36 = OpFunctionCall %void %func %35
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %39
-         %40 = OpLabel
-         %41 = OpLoad %uint %main_local_invocation_index_Input None
-         %42 = OpFunctionCall %void %main_inner %41
+       %main = OpFunction %void None %38
+         %39 = OpLabel
+         %40 = OpLoad %uint %main_local_invocation_index_Input None
+         %41 = OpFunctionCall %void %main_inner %40
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl
index 07eb8ff..6e320ba 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   S.i = vec4(0.0f);
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S = str(vec4(0.0f));
   }
   barrier();
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl
index 61ca3b5..6772871 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.dxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl
index 61ca3b5..6772871 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.fxc.hlsl
@@ -13,7 +13,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     str v = (str)0;
     S = v;
   }
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
index a8654fb..3895911 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -18,7 +18,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.S) = str{};
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm
index 3027508..43b75d0 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 34
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -31,8 +31,9 @@
      %uint_0 = OpConstant %uint 0
          %16 = OpConstantNull %v4float
          %19 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
-         %25 = OpConstantNull %str
+         %26 = OpConstantNull %str
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
        %func = OpFunction %void None %11
@@ -44,20 +45,20 @@
  %main_inner = OpFunction %void None %19
 %tint_local_index = OpFunctionParameter %uint
          %20 = OpLabel
-         %21 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %23
+         %21 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %24 None
+               OpBranchConditional %21 %25 %24
+         %25 = OpLabel
+               OpStore %S %26 None
+               OpBranch %24
          %24 = OpLabel
-               OpStore %S %25 None
-               OpBranch %23
-         %23 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %29 = OpFunctionCall %void %func
+         %30 = OpFunctionCall %void %func
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %11
-         %31 = OpLabel
-         %32 = OpLoad %uint %main_local_invocation_index_Input None
-         %33 = OpFunctionCall %void %main_inner %32
+         %32 = OpLabel
+         %33 = OpLoad %uint %main_local_invocation_index_Input None
+         %34 = OpFunctionCall %void %main_inner %33
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.glsl b/test/tint/types/module_scope_used_in_functions.wgsl.expected.glsl
index 8dc3712..06b2716 100644
--- a/test/tint/types/module_scope_used_in_functions.wgsl.expected.glsl
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.glsl
@@ -27,7 +27,7 @@
   no_uses();
 }
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = 0.0f;
   }
   barrier();
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.dxc.hlsl b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.dxc.hlsl
index e8316d4..34ae5b8 100644
--- a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.dxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.fxc.hlsl b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.fxc.hlsl
index e8316d4..34ae5b8 100644
--- a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.fxc.hlsl
@@ -28,7 +28,7 @@
 }
 
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl
index f4a61c6..38b1a79 100644
--- a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl
@@ -45,7 +45,7 @@
 }
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = 0.0f;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.spvasm b/test/tint/types/module_scope_used_in_functions.wgsl.expected.spvasm
index a71921a..33a106e 100644
--- a/test/tint/types/module_scope_used_in_functions.wgsl.expected.spvasm
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 67
+; Bound: 68
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -66,6 +66,7 @@
 %_ptr_StorageBuffer_float_0 = OpTypePointer StorageBuffer %float
          %45 = OpTypeFunction %void %float
          %51 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
     %float_0 = OpConstant %float 0
      %uint_2 = OpConstant %uint 2
@@ -106,20 +107,20 @@
  %main_inner = OpFunction %void None %51
 %tint_local_index = OpFunctionParameter %uint
          %52 = OpLabel
-         %53 = OpIEqual %bool %tint_local_index %uint_0
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %55
-         %56 = OpLabel
+         %53 = OpULessThan %bool %tint_local_index %uint_1
+               OpSelectionMerge %56 None
+               OpBranchConditional %53 %57 %56
+         %57 = OpLabel
                OpStore %w %float_0 None
-               OpBranch %55
-         %55 = OpLabel
+               OpBranch %56
+         %56 = OpLabel
                OpControlBarrier %uint_2 %uint_2 %uint_264
-         %61 = OpFunctionCall %void %foo %float_1
+         %62 = OpFunctionCall %void %foo %float_1
                OpReturn
                OpFunctionEnd
        %main = OpFunction %void None %20
-         %64 = OpLabel
-         %65 = OpLoad %uint %main_local_invocation_index_Input None
-         %66 = OpFunctionCall %void %main_inner %65
+         %65 = OpLabel
+         %66 = OpLoad %uint %main_local_invocation_index_Input None
+         %67 = OpFunctionCall %void %main_inner %66
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/types/module_scope_var.wgsl.expected.glsl b/test/tint/types/module_scope_var.wgsl.expected.glsl
index 844f112..586906b 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.glsl
+++ b/test/tint/types/module_scope_var.wgsl.expected.glsl
@@ -17,7 +17,7 @@
 S struct_var = S(0.0f);
 shared float wg_var;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg_var = 0.0f;
   }
   barrier();
diff --git a/test/tint/types/module_scope_var.wgsl.expected.ir.dxc.hlsl b/test/tint/types/module_scope_var.wgsl.expected.ir.dxc.hlsl
index 3e43b76..1fc1d39 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/types/module_scope_var.wgsl.expected.ir.dxc.hlsl
@@ -19,7 +19,7 @@
 static S struct_var = (S)0;
 groupshared float wg_var;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg_var = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/types/module_scope_var.wgsl.expected.ir.fxc.hlsl b/test/tint/types/module_scope_var.wgsl.expected.ir.fxc.hlsl
index 3e43b76..1fc1d39 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/types/module_scope_var.wgsl.expected.ir.fxc.hlsl
@@ -19,7 +19,7 @@
 static S struct_var = (S)0;
 groupshared float wg_var;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     wg_var = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/types/module_scope_var.wgsl.expected.ir.msl b/test/tint/types/module_scope_var.wgsl.expected.ir.msl
index 8a685eb..74e7e0b 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.ir.msl
+++ b/test/tint/types/module_scope_var.wgsl.expected.ir.msl
@@ -36,7 +36,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.wg_var) = 0.0f;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/types/module_scope_var.wgsl.expected.spvasm b/test/tint/types/module_scope_var.wgsl.expected.spvasm
index d2ad496..a47f86a 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.spvasm
+++ b/test/tint/types/module_scope_var.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 68
+; Bound: 69
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -75,18 +75,19 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %50 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
     %float_0 = OpConstant %float 0
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
       %false = OpConstantFalse %bool
       %int_0 = OpConstant %int 0
+     %uint_0 = OpConstant %uint 0
    %float_42 = OpConstant %float 42
-         %64 = OpTypeFunction %void
+         %65 = OpTypeFunction %void
  %main_inner = OpFunction %void None %50
 %tint_local_index = OpFunctionParameter %uint
          %51 = OpLabel
-         %52 = OpIEqual %bool %tint_local_index %uint_0
+         %52 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %54 None
                OpBranchConditional %52 %55 %54
          %55 = OpLabel
@@ -107,9 +108,9 @@
                OpStore %wg_var %float_42 None
                OpReturn
                OpFunctionEnd
-       %main = OpFunction %void None %64
-         %65 = OpLabel
-         %66 = OpLoad %uint %main_local_invocation_index_Input None
-         %67 = OpFunctionCall %void %main_inner %66
+       %main = OpFunction %void None %65
+         %66 = OpLabel
+         %67 = OpLoad %uint %main_local_invocation_index_Input None
+         %68 = OpFunctionCall %void %main_inner %67
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.glsl b/test/tint/types/module_scope_vars_pointers.wgsl.expected.glsl
index 5d9ce65..1ef678e 100644
--- a/test/tint/types/module_scope_vars_pointers.wgsl.expected.glsl
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.glsl
@@ -3,7 +3,7 @@
 float p = 0.0f;
 shared float w;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = 0.0f;
   }
   barrier();
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.dxc.hlsl b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.dxc.hlsl
index eb76f21..561230f 100644
--- a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.dxc.hlsl
@@ -6,7 +6,7 @@
 static float p = 0.0f;
 groupshared float w;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.fxc.hlsl b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.fxc.hlsl
index eb76f21..561230f 100644
--- a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.fxc.hlsl
@@ -6,7 +6,7 @@
 static float p = 0.0f;
 groupshared float w;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     w = 0.0f;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl
index 633602a..4cb1c4a 100644
--- a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl
@@ -11,7 +11,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.w) = 0.0f;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.spvasm b/test/tint/types/module_scope_vars_pointers.wgsl.expected.spvasm
index 813f469..d4e48f6 100644
--- a/test/tint/types/module_scope_vars_pointers.wgsl.expected.spvasm
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.spvasm
@@ -28,7 +28,7 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %13 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
     %float_0 = OpConstant %float 0
      %uint_2 = OpConstant %uint 2
@@ -37,7 +37,7 @@
  %main_inner = OpFunction %void None %13
 %tint_local_index = OpFunctionParameter %uint
          %14 = OpLabel
-         %15 = OpIEqual %bool %tint_local_index %uint_0
+         %15 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %18 None
                OpBranchConditional %15 %19 %18
          %19 = OpLabel
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl
new file mode 100644
index 0000000..10b0b4c
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl
@@ -0,0 +1,6 @@
+var<workgroup> zero : array<i32, 23>;
+
+@compute @workgroup_size(13)
+fn main() {
+    var v = zero;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.dxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2d65f21
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.dxc.hlsl
@@ -0,0 +1,26 @@
+groupshared int zero[23];
+
+void tint_zero_workgroup_memory(uint local_idx) {
+  {
+    for(uint idx = local_idx; (idx < 23u); idx = (idx + 13u)) {
+      uint i = idx;
+      zero[i] = 0;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index : SV_GroupIndex;
+};
+
+void main_inner(uint local_invocation_index) {
+  tint_zero_workgroup_memory(local_invocation_index);
+  int v[23] = zero;
+}
+
+[numthreads(13, 1, 1)]
+void main(tint_symbol_1 tint_symbol) {
+  main_inner(tint_symbol.local_invocation_index);
+  return;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.fxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2d65f21
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.fxc.hlsl
@@ -0,0 +1,26 @@
+groupshared int zero[23];
+
+void tint_zero_workgroup_memory(uint local_idx) {
+  {
+    for(uint idx = local_idx; (idx < 23u); idx = (idx + 13u)) {
+      uint i = idx;
+      zero[i] = 0;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index : SV_GroupIndex;
+};
+
+void main_inner(uint local_invocation_index) {
+  tint_zero_workgroup_memory(local_invocation_index);
+  int v[23] = zero;
+}
+
+[numthreads(13, 1, 1)]
+void main(tint_symbol_1 tint_symbol) {
+  main_inner(tint_symbol.local_invocation_index);
+  return;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.glsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.glsl
new file mode 100644
index 0000000..9375f8d
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+#version 310 es
+
+shared int zero[23];
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 23u)) {
+        break;
+      }
+      zero[v_2] = 0;
+      {
+        v_1 = (v_2 + 13u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  int v[23] = zero;
+}
+layout(local_size_x = 13, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.dxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.dxc.hlsl
new file mode 100644
index 0000000..3502817
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.dxc.hlsl
@@ -0,0 +1,31 @@
+struct main_inputs {
+  uint tint_local_index : SV_GroupIndex;
+};
+
+
+groupshared int zero[23];
+void main_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 23u)) {
+        break;
+      }
+      zero[v_2] = int(0);
+      {
+        v_1 = (v_2 + 13u);
+      }
+      continue;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  int v[23] = zero;
+}
+
+[numthreads(13, 1, 1)]
+void main(main_inputs inputs) {
+  main_inner(inputs.tint_local_index);
+}
+
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.fxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.fxc.hlsl
new file mode 100644
index 0000000..3502817
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.fxc.hlsl
@@ -0,0 +1,31 @@
+struct main_inputs {
+  uint tint_local_index : SV_GroupIndex;
+};
+
+
+groupshared int zero[23];
+void main_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 23u)) {
+        break;
+      }
+      zero[v_2] = int(0);
+      {
+        v_1 = (v_2 + 13u);
+      }
+      continue;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  int v[23] = zero;
+}
+
+[numthreads(13, 1, 1)]
+void main(main_inputs inputs) {
+  main_inner(inputs.tint_local_index);
+}
+
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d49d33e
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.ir.msl
@@ -0,0 +1,51 @@
+#include <metal_stdlib>
+using namespace metal;
+
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct tint_module_vars_struct {
+  threadgroup tint_array<int, 23>* zero;
+};
+
+#define TINT_ISOLATE_UB(VOLATILE_NAME) \
+  {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
+
+struct tint_symbol_2 {
+  tint_array<int, 23> tint_symbol_1;
+};
+
+void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      TINT_ISOLATE_UB(tint_volatile_false)
+      uint const v_2 = v_1;
+      if ((v_2 >= 23u)) {
+        break;
+      }
+      (*tint_module_vars.zero)[v_2] = 0;
+      {
+        v_1 = (v_2 + 13u);
+      }
+      continue;
+    }
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  tint_array<int, 23> v = (*tint_module_vars.zero);
+}
+
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_2* v_3 [[threadgroup(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.zero=(&(*v_3).tint_symbol_1)};
+  tint_symbol_inner(tint_local_index, tint_module_vars);
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.msl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.msl
new file mode 100644
index 0000000..60badb1
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.msl
@@ -0,0 +1,39 @@
+#include <metal_stdlib>
+
+using namespace metal;
+
+template<typename T, size_t N>
+struct tint_array {
+    const constant T& operator[](size_t i) const constant { return elements[i]; }
+    device T& operator[](size_t i) device { return elements[i]; }
+    const device T& operator[](size_t i) const device { return elements[i]; }
+    thread T& operator[](size_t i) thread { return elements[i]; }
+    const thread T& operator[](size_t i) const thread { return elements[i]; }
+    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+    T elements[N];
+};
+
+#define TINT_ISOLATE_UB(VOLATILE_NAME) \
+  {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
+
+void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<int, 23>* const tint_symbol_1) {
+  for(uint idx = local_idx; (idx < 23u); idx = (idx + 13u)) {
+    TINT_ISOLATE_UB(tint_volatile_false);
+    uint const i = idx;
+    (*(tint_symbol_1))[i] = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+}
+
+void tint_symbol_inner(uint local_invocation_index, threadgroup tint_array<int, 23>* const tint_symbol_2) {
+  tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+  tint_array<int, 23> v = *(tint_symbol_2);
+}
+
+kernel void tint_symbol(uint local_invocation_index [[thread_index_in_threadgroup]]) {
+  threadgroup tint_array<int, 23> tint_symbol_3;
+  tint_symbol_inner(local_invocation_index, &(tint_symbol_3));
+  return;
+}
+
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.spvasm b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.spvasm
new file mode 100644
index 0000000..50ff376
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.spvasm
@@ -0,0 +1,71 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main" %main_local_invocation_index_Input
+               OpExecutionMode %main LocalSize 13 1 1
+               OpName %zero "zero"
+               OpName %main_local_invocation_index_Input "main_local_invocation_index_Input"
+               OpName %main_inner "main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %v "v"
+               OpName %main "main"
+               OpDecorate %_arr_int_uint_23 ArrayStride 4
+               OpDecorate %main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_23 = OpConstant %uint 23
+%_arr_int_uint_23 = OpTypeArray %int %uint_23
+%_ptr_Workgroup__arr_int_uint_23 = OpTypePointer Workgroup %_arr_int_uint_23
+       %zero = OpVariable %_ptr_Workgroup__arr_int_uint_23 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+      %int_0 = OpConstant %int 0
+    %uint_13 = OpConstant %uint 13
+     %uint_2 = OpConstant %uint 2
+   %uint_264 = OpConstant %uint 264
+%_ptr_Function__arr_int_uint_23 = OpTypePointer Function %_arr_int_uint_23
+         %36 = OpTypeFunction %void
+ %main_inner = OpFunction %void None %12
+%tint_local_index = OpFunctionParameter %uint
+         %13 = OpLabel
+          %v = OpVariable %_ptr_Function__arr_int_uint_23 Function
+               OpBranch %14
+         %14 = OpLabel
+               OpBranch %17
+         %17 = OpLabel
+         %19 = OpPhi %uint %tint_local_index %14 %20 %16
+               OpLoopMerge %18 %16 None
+               OpBranch %15
+         %15 = OpLabel
+         %21 = OpUGreaterThanEqual %bool %19 %uint_23
+               OpSelectionMerge %23 None
+               OpBranchConditional %21 %24 %23
+         %24 = OpLabel
+               OpBranch %18
+         %23 = OpLabel
+         %25 = OpAccessChain %_ptr_Workgroup_int %zero %19
+               OpStore %25 %int_0 None
+               OpBranch %16
+         %16 = OpLabel
+         %20 = OpIAdd %uint %19 %uint_13
+               OpBranch %17
+         %18 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_264
+         %32 = OpLoad %_arr_int_uint_23 %zero None
+               OpStore %v %32
+               OpReturn
+               OpFunctionEnd
+       %main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpLoad %uint %main_local_invocation_index_Input None
+         %39 = OpFunctionCall %void %main_inner %38
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.wgsl b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.wgsl
new file mode 100644
index 0000000..8623ffb
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_large.wgsl.expected.wgsl
@@ -0,0 +1,6 @@
+var<workgroup> zero : array<i32, 23>;
+
+@compute @workgroup_size(13)
+fn main() {
+  var v = zero;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl
new file mode 100644
index 0000000..31a4871
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl
@@ -0,0 +1,6 @@
+var<workgroup> zero : array<i32, 3>;
+
+@compute @workgroup_size(10)
+fn main() {
+    var v = zero;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.dxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..e653d0f
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.dxc.hlsl
@@ -0,0 +1,24 @@
+groupshared int zero[3];
+
+void tint_zero_workgroup_memory(uint local_idx) {
+  if ((local_idx < 3u)) {
+    uint i = local_idx;
+    zero[i] = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index : SV_GroupIndex;
+};
+
+void main_inner(uint local_invocation_index) {
+  tint_zero_workgroup_memory(local_invocation_index);
+  int v[3] = zero;
+}
+
+[numthreads(10, 1, 1)]
+void main(tint_symbol_1 tint_symbol) {
+  main_inner(tint_symbol.local_invocation_index);
+  return;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.fxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..e653d0f
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.fxc.hlsl
@@ -0,0 +1,24 @@
+groupshared int zero[3];
+
+void tint_zero_workgroup_memory(uint local_idx) {
+  if ((local_idx < 3u)) {
+    uint i = local_idx;
+    zero[i] = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index : SV_GroupIndex;
+};
+
+void main_inner(uint local_invocation_index) {
+  tint_zero_workgroup_memory(local_invocation_index);
+  int v[3] = zero;
+}
+
+[numthreads(10, 1, 1)]
+void main(tint_symbol_1 tint_symbol) {
+  main_inner(tint_symbol.local_invocation_index);
+  return;
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.glsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.glsl
new file mode 100644
index 0000000..177ccb5
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+
+shared int zero[3];
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index < 3u)) {
+    zero[tint_local_index] = 0;
+  }
+  barrier();
+  int v[3] = zero;
+}
+layout(local_size_x = 10, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.dxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.dxc.hlsl
new file mode 100644
index 0000000..ceb3d20
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.dxc.hlsl
@@ -0,0 +1,19 @@
+struct main_inputs {
+  uint tint_local_index : SV_GroupIndex;
+};
+
+
+groupshared int zero[3];
+void main_inner(uint tint_local_index) {
+  if ((tint_local_index < 3u)) {
+    zero[tint_local_index] = int(0);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  int v[3] = zero;
+}
+
+[numthreads(10, 1, 1)]
+void main(main_inputs inputs) {
+  main_inner(inputs.tint_local_index);
+}
+
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.fxc.hlsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.fxc.hlsl
new file mode 100644
index 0000000..ceb3d20
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.fxc.hlsl
@@ -0,0 +1,19 @@
+struct main_inputs {
+  uint tint_local_index : SV_GroupIndex;
+};
+
+
+groupshared int zero[3];
+void main_inner(uint tint_local_index) {
+  if ((tint_local_index < 3u)) {
+    zero[tint_local_index] = int(0);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  int v[3] = zero;
+}
+
+[numthreads(10, 1, 1)]
+void main(main_inputs inputs) {
+  main_inner(inputs.tint_local_index);
+}
+
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.msl
new file mode 100644
index 0000000..baecf61
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.ir.msl
@@ -0,0 +1,35 @@
+#include <metal_stdlib>
+using namespace metal;
+
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct tint_module_vars_struct {
+  threadgroup tint_array<int, 3>* zero;
+};
+
+struct tint_symbol_2 {
+  tint_array<int, 3> tint_symbol_1;
+};
+
+void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
+  if ((tint_local_index < 3u)) {
+    (*tint_module_vars.zero)[tint_local_index] = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  tint_array<int, 3> v = (*tint_module_vars.zero);
+}
+
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_2* v_1 [[threadgroup(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.zero=(&(*v_1).tint_symbol_1)};
+  tint_symbol_inner(tint_local_index, tint_module_vars);
+}
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.msl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.msl
new file mode 100644
index 0000000..a9cdfbd
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.msl
@@ -0,0 +1,35 @@
+#include <metal_stdlib>
+
+using namespace metal;
+
+template<typename T, size_t N>
+struct tint_array {
+    const constant T& operator[](size_t i) const constant { return elements[i]; }
+    device T& operator[](size_t i) device { return elements[i]; }
+    const device T& operator[](size_t i) const device { return elements[i]; }
+    thread T& operator[](size_t i) thread { return elements[i]; }
+    const thread T& operator[](size_t i) const thread { return elements[i]; }
+    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+    T elements[N];
+};
+
+void tint_zero_workgroup_memory(uint local_idx, threadgroup tint_array<int, 3>* const tint_symbol_1) {
+  if ((local_idx < 3u)) {
+    uint const i = local_idx;
+    (*(tint_symbol_1))[i] = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+}
+
+void tint_symbol_inner(uint local_invocation_index, threadgroup tint_array<int, 3>* const tint_symbol_2) {
+  tint_zero_workgroup_memory(local_invocation_index, tint_symbol_2);
+  tint_array<int, 3> v = *(tint_symbol_2);
+}
+
+kernel void tint_symbol(uint local_invocation_index [[thread_index_in_threadgroup]]) {
+  threadgroup tint_array<int, 3> tint_symbol_3;
+  tint_symbol_inner(local_invocation_index, &(tint_symbol_3));
+  return;
+}
+
diff --git a/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.spvasm b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.spvasm
new file mode 100644
index 0000000..858b0a0
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.spvasm
@@ -0,0 +1,57 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 32
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main" %main_local_invocation_index_Input
+               OpExecutionMode %main LocalSize 10 1 1
+               OpName %zero "zero"
+               OpName %main_local_invocation_index_Input "main_local_invocation_index_Input"
+               OpName %main_inner "main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %v "v"
+               OpName %main "main"
+               OpDecorate %_arr_int_uint_3 ArrayStride 4
+               OpDecorate %main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+     %uint_3 = OpConstant %uint 3
+%_arr_int_uint_3 = OpTypeArray %int %uint_3
+%_ptr_Workgroup__arr_int_uint_3 = OpTypePointer Workgroup %_arr_int_uint_3
+       %zero = OpVariable %_ptr_Workgroup__arr_int_uint_3 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+   %uint_264 = OpConstant %uint 264
+%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
+         %28 = OpTypeFunction %void
+ %main_inner = OpFunction %void None %12
+%tint_local_index = OpFunctionParameter %uint
+         %13 = OpLabel
+          %v = OpVariable %_ptr_Function__arr_int_uint_3 Function
+         %14 = OpULessThan %bool %tint_local_index %uint_3
+               OpSelectionMerge %16 None
+               OpBranchConditional %14 %17 %16
+         %17 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_int %zero %tint_local_index
+               OpStore %18 %int_0 None
+               OpBranch %16
+         %16 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_264
+         %24 = OpLoad %_arr_int_uint_3 %zero None
+               OpStore %v %24
+               OpReturn
+               OpFunctionEnd
+       %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/var/initialization/workgroup/array/u32_small.wgsl.expected.wgsl b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.wgsl
new file mode 100644
index 0000000..60677ac
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/u32_small.wgsl.expected.wgsl
@@ -0,0 +1,6 @@
+var<workgroup> zero : array<i32, 3>;
+
+@compute @workgroup_size(10)
+fn main() {
+  var v = zero;
+}
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.glsl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.glsl
index e72d94c..6ad354f 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.glsl
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 shared mat2x3 v;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = mat2x3(vec3(0.0f), vec3(0.0f));
   }
   barrier();
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.dxc.hlsl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.dxc.hlsl
index 6d6da45..496b322 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.dxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared float2x3 v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = float2x3((0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.fxc.hlsl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.fxc.hlsl
index 6d6da45..496b322 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.fxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared float2x3 v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = float2x3((0.0f).xxx, (0.0f).xxx);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
index fb1e5e1..5c6c7df 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
@@ -26,7 +26,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.v)[0u].packed = packed_float3(float2x3(float3(0.0f), float3(0.0f))[0u]);
     (*tint_module_vars.v)[1u].packed = packed_float3(float2x3(float3(0.0f), float3(0.0f))[1u]);
   }
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.spvasm b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.spvasm
index fcbbdeb..c814618 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.spvasm
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.spvasm
@@ -23,7 +23,7 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %12 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %19 = OpConstantNull %mat2v3float
      %uint_2 = OpConstant %uint 2
@@ -32,7 +32,7 @@
  %main_inner = OpFunction %void None %12
 %tint_local_index = OpFunctionParameter %uint
          %13 = OpLabel
-         %14 = OpIEqual %bool %tint_local_index %uint_0
+         %14 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %17 None
                OpBranchConditional %14 %18 %17
          %18 = OpLabel
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.glsl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.glsl
index 8513dca3..5ee364a 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.glsl
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 shared int v;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = 0;
   }
   barrier();
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.dxc.hlsl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.dxc.hlsl
index a859b51..2979617 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.dxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.fxc.hlsl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.fxc.hlsl
index a859b51..2979617 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.fxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
index ba7c3e9..1846e86 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
@@ -10,7 +10,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.v) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.spvasm b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.spvasm
index aa9395a..716c9d1 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.spvasm
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.spvasm
@@ -22,7 +22,7 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %10 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
       %int_0 = OpConstant %int 0
      %uint_2 = OpConstant %uint 2
@@ -31,7 +31,7 @@
  %main_inner = OpFunction %void None %10
 %tint_local_index = OpFunctionParameter %uint
          %11 = OpLabel
-         %12 = OpIEqual %bool %tint_local_index %uint_0
+         %12 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %15 None
                OpBranchConditional %12 %16 %15
          %16 = OpLabel
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.glsl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.glsl
index a3d45d9..0f3f717 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.glsl
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.glsl
@@ -8,7 +8,7 @@
 
 shared S v;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = S(0, 0.0f);
   }
   barrier();
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.dxc.hlsl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.dxc.hlsl
index f147d3d..87bf290 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.dxc.hlsl
@@ -10,7 +10,7 @@
 
 groupshared S v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S v_1 = (S)0;
     v = v_1;
   }
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.fxc.hlsl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.fxc.hlsl
index f147d3d..87bf290 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.fxc.hlsl
@@ -10,7 +10,7 @@
 
 groupshared S v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     S v_1 = (S)0;
     v = v_1;
   }
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
index 760f60f..7916e20 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.v) = S{};
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.spvasm b/test/tint/var/initialization/workgroup/struct.wgsl.expected.spvasm
index 4021c5c..2f94027 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.spvasm
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.spvasm
@@ -28,7 +28,7 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %12 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %19 = OpConstantNull %S
      %uint_2 = OpConstant %uint 2
@@ -37,7 +37,7 @@
  %main_inner = OpFunction %void None %12
 %tint_local_index = OpFunctionParameter %uint
          %13 = OpLabel
-         %14 = OpIEqual %bool %tint_local_index %uint_0
+         %14 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %17 None
                OpBranchConditional %14 %18 %17
          %18 = OpLabel
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.glsl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.glsl
index b1748a2..83e42bf 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.glsl
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 shared ivec3 v;
 void tint_symbol_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = ivec3(0);
   }
   barrier();
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.dxc.hlsl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.dxc.hlsl
index 108ce6d..61bd1a4 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.dxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int3 v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = (int(0)).xxx;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.fxc.hlsl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.fxc.hlsl
index 108ce6d..61bd1a4 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.fxc.hlsl
@@ -5,7 +5,7 @@
 
 groupshared int3 v;
 void main_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     v = (int(0)).xxx;
   }
   GroupMemoryBarrierWithGroupSync();
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
index 5a7846b..5ebf763 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
@@ -10,7 +10,7 @@
 };
 
 void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.v) = packed_int3(int3(0));
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.spvasm b/test/tint/var/initialization/workgroup/vector.wgsl.expected.spvasm
index 4313d4b..2499d08 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.spvasm
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.spvasm
@@ -22,7 +22,7 @@
 %main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
          %11 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
          %18 = OpConstantNull %v3int
      %uint_2 = OpConstant %uint 2
@@ -31,7 +31,7 @@
  %main_inner = OpFunction %void None %11
 %tint_local_index = OpFunctionParameter %uint
          %12 = OpLabel
-         %13 = OpIEqual %bool %tint_local_index %uint_0
+         %13 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %16 None
                OpBranchConditional %13 %17 %16
          %17 = OpLabel
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.glsl b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.glsl
index 54df802..1e2741f 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.glsl
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.glsl
@@ -101,7 +101,7 @@
 shared mat2 m98;
 shared mat2 m99;
 void tint_symbol_inner(uint idx) {
-  if ((idx == 0u)) {
+  if ((idx < 1u)) {
     m00 = mat2(vec2(0.0f), vec2(0.0f));
     m01 = mat2(vec2(0.0f), vec2(0.0f));
     m02 = mat2(vec2(0.0f), vec2(0.0f));
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.dxc.hlsl b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.dxc.hlsl
index 9714f5c..7290271 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.dxc.hlsl
@@ -104,7 +104,7 @@
 groupshared float2x2 m98;
 groupshared float2x2 m99;
 void tint_symbol_inner(uint idx) {
-  if ((idx == 0u)) {
+  if ((idx < 1u)) {
     m00 = float2x2((0.0f).xx, (0.0f).xx);
     m01 = float2x2((0.0f).xx, (0.0f).xx);
     m02 = float2x2((0.0f).xx, (0.0f).xx);
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.fxc.hlsl b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.fxc.hlsl
index 9714f5c..7290271 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.fxc.hlsl
@@ -104,7 +104,7 @@
 groupshared float2x2 m98;
 groupshared float2x2 m99;
 void tint_symbol_inner(uint idx) {
-  if ((idx == 0u)) {
+  if ((idx < 1u)) {
     m00 = float2x2((0.0f).xx, (0.0f).xx);
     m01 = float2x2((0.0f).xx, (0.0f).xx);
     m02 = float2x2((0.0f).xx, (0.0f).xx);
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl
index 8735dba..b169a22 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl
@@ -208,7 +208,7 @@
 };
 
 void tint_symbol_inner(uint idx, tint_module_vars_struct tint_module_vars) {
-  if ((idx == 0u)) {
+  if ((idx < 1u)) {
     (*tint_module_vars.m00) = float2x2(float2(0.0f), float2(0.0f));
     (*tint_module_vars.m01) = float2x2(float2(0.0f), float2(0.0f));
     (*tint_module_vars.m02) = float2x2(float2(0.0f), float2(0.0f));
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.spvasm b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.spvasm
index da5a83f..79251bd 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.spvasm
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.spvasm
@@ -221,7 +221,7 @@
 %tint_symbol_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
        %void = OpTypeVoid
         %111 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
         %118 = OpConstantNull %mat2v2float
      %uint_2 = OpConstant %uint 2
@@ -235,7 +235,7 @@
 %tint_symbol_inner = OpFunction %void None %111
         %idx = OpFunctionParameter %uint
         %112 = OpLabel
-        %113 = OpIEqual %bool %idx %uint_0
+        %113 = OpULessThan %bool %idx %uint_1
                OpSelectionMerge %116 None
                OpBranchConditional %113 %117 %116
         %117 = OpLabel
diff --git a/test/tint/var/uses/workgroup.wgsl.expected.glsl b/test/tint/var/uses/workgroup.wgsl.expected.glsl
index 343757a..367101b 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.glsl
+++ b/test/tint/var/uses/workgroup.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   a = (a + 1);
 }
 void main1_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     a = 0;
   }
   barrier();
@@ -23,7 +23,7 @@
   b = (b * 2);
 }
 void main2_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     b = 0;
   }
   barrier();
@@ -57,7 +57,7 @@
   no_uses();
 }
 void main3_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     a = 0;
     b = 0;
   }
diff --git a/test/tint/var/uses/workgroup.wgsl.expected.ir.dxc.hlsl b/test/tint/var/uses/workgroup.wgsl.expected.ir.dxc.hlsl
index 666cfd9..2618321 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/var/uses/workgroup.wgsl.expected.ir.dxc.hlsl
@@ -38,7 +38,7 @@
 }
 
 void main1_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     a = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
@@ -47,7 +47,7 @@
 }
 
 void main2_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     b = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
@@ -56,7 +56,7 @@
 }
 
 void main3_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     a = int(0);
     b = int(0);
   }
diff --git a/test/tint/var/uses/workgroup.wgsl.expected.ir.fxc.hlsl b/test/tint/var/uses/workgroup.wgsl.expected.ir.fxc.hlsl
index 666cfd9..2618321 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/var/uses/workgroup.wgsl.expected.ir.fxc.hlsl
@@ -38,7 +38,7 @@
 }
 
 void main1_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     a = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
@@ -47,7 +47,7 @@
 }
 
 void main2_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     b = int(0);
   }
   GroupMemoryBarrierWithGroupSync();
@@ -56,7 +56,7 @@
 }
 
 void main3_inner(uint tint_local_index) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     a = int(0);
     b = int(0);
   }
diff --git a/test/tint/var/uses/workgroup.wgsl.expected.ir.msl b/test/tint/var/uses/workgroup.wgsl.expected.ir.msl
index 6e10372..adb751f 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/var/uses/workgroup.wgsl.expected.ir.msl
@@ -44,7 +44,7 @@
 }
 
 void main1_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.a) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
@@ -53,7 +53,7 @@
 }
 
 void main2_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.b) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
@@ -62,7 +62,7 @@
 }
 
 void main3_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
-  if ((tint_local_index == 0u)) {
+  if ((tint_local_index < 1u)) {
     (*tint_module_vars.a) = 0;
     (*tint_module_vars.b) = 0;
   }
diff --git a/test/tint/var/uses/workgroup.wgsl.expected.spvasm b/test/tint/var/uses/workgroup.wgsl.expected.spvasm
index bf5eed8..f391625 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.spvasm
+++ b/test/tint/var/uses/workgroup.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
       %int_2 = OpConstant %int 2
       %int_0 = OpConstant %int 0
          %37 = OpTypeFunction %void %uint
-     %uint_0 = OpConstant %uint 0
+     %uint_1 = OpConstant %uint 1
        %bool = OpTypeBool
      %uint_2 = OpConstant %uint 2
    %uint_264 = OpConstant %uint 264
@@ -95,7 +95,7 @@
 %main1_inner = OpFunction %void None %37
 %tint_local_index = OpFunctionParameter %uint
          %38 = OpLabel
-         %39 = OpIEqual %bool %tint_local_index %uint_0
+         %39 = OpULessThan %bool %tint_local_index %uint_1
                OpSelectionMerge %42 None
                OpBranchConditional %39 %43 %42
          %43 = OpLabel
@@ -110,7 +110,7 @@
 %main2_inner = OpFunction %void None %37
 %tint_local_index_0 = OpFunctionParameter %uint
          %51 = OpLabel
-         %52 = OpIEqual %bool %tint_local_index_0 %uint_0
+         %52 = OpULessThan %bool %tint_local_index_0 %uint_1
                OpSelectionMerge %53 None
                OpBranchConditional %52 %54 %53
          %54 = OpLabel
@@ -125,7 +125,7 @@
 %main3_inner = OpFunction %void None %37
 %tint_local_index_1 = OpFunctionParameter %uint
          %60 = OpLabel
-         %61 = OpIEqual %bool %tint_local_index_1 %uint_0
+         %61 = OpULessThan %bool %tint_local_index_1 %uint_1
                OpSelectionMerge %62 None
                OpBranchConditional %61 %63 %62
          %63 = OpLabel