Handle trace-scope execution masks properly.

Previously, trace-scope always used the current execution mask. In
practice, this doesn't work because the execution mask can change in
the middle of a block.

The SkVM code generator handles this by storing off the execution
mask when a trace-scope +1 is written, and reusing that mask when
the corresponding -1 is written. SkRP now mimics this approach. We
now have two calls `pushTraceScopeMask` and `discardTraceScopeMask`.
These compute `TraceMask & ExecutionMask` and save it onto the top
of the current stack. Scope increases and decreases use this mask
directly and do not check the current execution mask.

Change-Id: Ied97f51bf0a60c31d6b5a99b11b25e3a5b45ef60
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/664178
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
index b21d83b..cf1dba4 100644
--- a/src/opts/SkRasterPipeline_opts.h
+++ b/src/opts/SkRasterPipeline_opts.h
@@ -3428,8 +3428,11 @@
 }
 
 STAGE_TAIL(trace_scope, SkRasterPipeline_TraceScopeCtx* ctx) {
+    // Note that trace_scope intentionally does not incorporate the execution mask. Otherwise, the
+    // scopes would become unbalanced if the execution mask changed in the middle of a block. The
+    // caller is responsible for providing a combined trace- and execution-mask.
     I32* traceMask = (I32*)ctx->traceMask;
-    if (any(execution_mask() & *traceMask)) {
+    if (any(*traceMask)) {
         ctx->traceHook->scope(ctx->delta);
     }
 }
diff --git a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp
index 0a209eb..1c52aea 100644
--- a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp
@@ -145,13 +145,13 @@
     /** Returns the stack ID of this AutoStack. */
     int stackID() { return fStackID; }
 
-    /** Clones values from the top of the active stack onto this one. */
+    /** Clones values from this stack onto the top of the active stack. */
     void pushClone(int slots);
 
-    /** Clones values from a fixed range of the active stack onto this one. */
+    /** Clones values from a fixed range of this stack onto the top of the active stack. */
     void pushClone(SlotRange range, int offsetFromStackTop);
 
-    /** Clones values from a dynamic range of the active stack onto this one. */
+    /** Clones values from a dynamic range of this stack onto the top of the active stack. */
     void pushCloneIndirect(SlotRange range, int dynamicStackID, int offsetFromStackTop);
 
 private:
@@ -339,7 +339,13 @@
      */
     void emitTraceLine(Position pos);
 
-    /** Emits a trace_scope opcode, which alters the SkSL variable-scope depth. */
+    /**
+     * Emits a trace_scope opcode, which alters the SkSL variable-scope depth.
+     * Unlike the other trace ops, trace_scope takes a dedicated mask instead of the trace-scope
+     * mask. Call `pushTraceScopeMask` to synthesize this mask; discard it when you're done.
+     */
+    void pushTraceScopeMask();
+    void discardTraceScopeMask();
     void emitTraceScope(int delta);
 
     /** Prepares our position-to-line-offset conversion table (stored in `fLineOffsets`). */
@@ -1331,9 +1337,26 @@
     }
 }
 
+void Generator::pushTraceScopeMask() {
+    if (this->shouldWriteTraceOps()) {
+        // Take the intersection of the trace mask and the execution mask. To do this, start with an
+        // all-zero mask, then use select to overwrite those zeros with the trace mask across all
+        // executing lanes. We'll get the trace mask in executing lanes, and zero in dead lanes.
+        fBuilder.push_literal_i(0);
+        fTraceMask->pushClone(/*slots=*/1);
+        fBuilder.select(/*slots=*/1);
+    }
+}
+
+void Generator::discardTraceScopeMask() {
+    if (this->shouldWriteTraceOps()) {
+        this->discardExpression(/*slots=*/1);
+    }
+}
+
 void Generator::emitTraceScope(int delta) {
-    if (fDebugTrace && fWriteTraceOps) {
-        fBuilder.trace_scope(fTraceMask->stackID(), delta);
+    if (this->shouldWriteTraceOps()) {
+        fBuilder.trace_scope(this->currentStack(), delta);
     }
 }
 
@@ -1454,6 +1477,7 @@
         this->emitTraceLine(b.fPosition);
         ++fInsideCompoundStatement;
     } else {
+        this->pushTraceScopeMask();
         this->emitTraceScope(+1);
     }
 
@@ -1467,6 +1491,7 @@
         --fInsideCompoundStatement;
     } else {
         this->emitTraceScope(-1);
+        this->discardTraceScopeMask();
     }
 
     return true;
@@ -1559,6 +1584,7 @@
 
     // We want the loop index to disappear at the end of the loop, so wrap the for statement in a
     // trace scope.
+    this->pushTraceScopeMask();
     this->emitTraceScope(+1);
 
     // If no lanes are active, skip over the loop entirely. This guards against looping forever;
@@ -1613,6 +1639,7 @@
     fBuilder.label(loopExitID);
 
     this->emitTraceScope(-1);
+    this->discardTraceScopeMask();
     return true;
 }
 
@@ -1632,6 +1659,7 @@
 
     // We want the loop index to disappear at the end of the loop, so wrap the for statement in a
     // trace scope.
+    this->pushTraceScopeMask();
     this->emitTraceScope(+1);
 
     // Set up a break target.
@@ -1714,6 +1742,7 @@
     fBuilder.disableExecutionMaskWrites();
 
     this->emitTraceScope(-1);
+    this->discardTraceScopeMask();
     return true;
 }
 
diff --git a/tests/SkRasterPipelineTest.cpp b/tests/SkRasterPipelineTest.cpp
index aaf4a99..2bf0347 100644
--- a/tests/SkRasterPipelineTest.cpp
+++ b/tests/SkRasterPipelineTest.cpp
@@ -1011,7 +1011,7 @@
     p.append(SkRasterPipelineOp::trace_scope, &kTraceScope5);
     p.run(0,0,N,1);
 
-    REPORTER_ASSERT(r, (trace.fBuffer == TArray<int>{1, -5}));
+    REPORTER_ASSERT(r, (trace.fBuffer == TArray<int>{+1, +4, -5}));
 }
 
 DEF_TEST(SkRasterPipeline_CopySlotsMasked, r) {
diff --git a/tests/sksl/runtime/ArrayIndexing.skrp b/tests/sksl/runtime/ArrayIndexing.skrp
index 51ecaf7..57c6117 100644
--- a/tests/sksl/runtime/ArrayIndexing.skrp
+++ b/tests/sksl/runtime/ArrayIndexing.skrp
@@ -1,162 +1,198 @@
-    1. store_device_xy01              $10..13 = DeviceCoords.xy01
-    2. copy_constant                  $12 = 0x3F000000 (0.5)
-    3. copy_constant                  $13 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $10..11 = equal($10..11, $12..13)
-    5. bitwise_and_int                $10 &= $11
+    1. store_device_xy01              $15..18 = DeviceCoords.xy01
+    2. copy_constant                  $17 = 0x3F000000 (0.5)
+    3. copy_constant                  $18 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $15..16 = equal($15..16, $17..18)
+    5. bitwise_and_int                $15 &= $16
     6. store_src_rg                   xy = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
-    8. trace_enter                    TraceEnter(float4 main(float2 xy)) when $10 is true
-    9. trace_var                      TraceVar(xy) when $10 is true
-   10. trace_scope                    TraceScope(+1) when $10 is true
-   11. trace_line                     TraceLine(38) when $10 is true
-   12. trace_enter                    TraceEnter(float index_by_literal()) when $10 is true
-   13. trace_scope                    TraceScope(+1) when $10 is true
-   14. trace_line                     TraceLine(5) when $10 is true
-   15. copy_constant                  $0 = u1[0]
-   16. copy_slot_unmasked             [index_by_literal].result = $0
-   17. trace_var                      TraceVar([index_by_literal].result) when $10 is true
-   18. trace_scope                    TraceScope(-1) when $10 is true
-   19. trace_exit                     TraceExit(float index_by_literal()) when $10 is true
-   20. copy_slot_unmasked             $0 = [index_by_literal].result
-   21. label                          label 0x00000000
-   22. trace_enter                    TraceEnter(float index_by_loop()) when $10 is true
-   23. trace_scope                    TraceScope(+1) when $10 is true
-   24. trace_line                     TraceLine(10) when $10 is true
-   25. zero_slot_unmasked             sum = 0
-   26. trace_var                      TraceVar(sum) when $10 is true
-   27. trace_scope                    TraceScope(+1) when $10 is true
-   28. trace_line                     TraceLine(11) when $10 is true
-   29. copy_constant                  i = 0x00000003 (4.203895e-45)
-   30. trace_var                      TraceVar(i) when $10 is true
-   31. label                          label 0x00000003
-   32. trace_scope                    TraceScope(+1) when $10 is true
-   33. trace_line                     TraceLine(12) when $10 is true
-   34. copy_slot_unmasked             $1 = sum
-   35. copy_slot_unmasked             $7 = i
-   36. copy_from_indirect_uniform_unm $2 = Indirect(u2[0] + $7)
-   37. add_float                      $1 += $2
-   38. copy_slot_unmasked             sum = $1
-   39. trace_var                      TraceVar(sum) when $10 is true
-   40. trace_scope                    TraceScope(-1) when $10 is true
-   41. trace_line                     TraceLine(11) when $10 is true
-   42. copy_slot_unmasked             $1 = i
-   43. copy_constant                  $2 = 0x00000001 (1.401298e-45)
-   44. sub_int                        $1 -= $2
-   45. copy_slot_unmasked             i = $1
-   46. trace_var                      TraceVar(i) when $10 is true
-   47. zero_slot_unmasked             $1 = 0
-   48. copy_slot_unmasked             $2 = i
-   49. cmple_int                      $1 = lessThanEqual($1, $2)
-   50. stack_rewind
-   51. branch_if_no_active_lanes_eq   branch -20 (label 3 at #31) if no lanes of $1 == 0x00000000 (0.0)
-   52. label                          label 0x00000002
-   53. trace_scope                    TraceScope(-1) when $10 is true
-   54. trace_line                     TraceLine(14) when $10 is true
-   55. copy_slot_unmasked             [index_by_loop].result = sum
-   56. trace_var                      TraceVar([index_by_loop].result) when $10 is true
-   57. trace_scope                    TraceScope(-1) when $10 is true
-   58. trace_exit                     TraceExit(float index_by_loop()) when $10 is true
-   59. copy_slot_unmasked             $1 = [index_by_loop].result
-   60. label                          label 0x00000001
-   61. trace_enter                    TraceEnter(float index_by_complex_loop()) when $10 is true
-   62. trace_scope                    TraceScope(+1) when $10 is true
-   63. trace_line                     TraceLine(19) when $10 is true
-   64. copy_constant                  prod = 0x3F800000 (1.0)
-   65. trace_var                      TraceVar(prod) when $10 is true
-   66. trace_scope                    TraceScope(+1) when $10 is true
-   67. trace_line                     TraceLine(20) when $10 is true
-   68. zero_slot_unmasked             i₁ = 0
-   69. trace_var                      TraceVar(i₁) when $10 is true
-   70. label                          label 0x00000006
-   71. trace_scope                    TraceScope(+1) when $10 is true
-   72. trace_line                     TraceLine(21) when $10 is true
-   73. copy_slot_unmasked             $2 = prod
-   74. copy_slot_unmasked             $7 = i₁
-   75. copy_constant                  $8 = 0x00000002 (2.802597e-45)
-   76. cmplt_int                      $7 = lessThan($7, $8)
-   77. copy_slot_unmasked             $8 = i₁
-   78. zero_slot_unmasked             $9 = 0
-   79. mix_int                        $7 = mix($8, $9, $7)
-   80. copy_from_indirect_uniform_unm $3 = Indirect(u3[0] + $7)
-   81. mul_float                      $2 *= $3
-   82. copy_slot_unmasked             prod = $2
-   83. trace_var                      TraceVar(prod) when $10 is true
-   84. trace_scope                    TraceScope(-1) when $10 is true
-   85. trace_line                     TraceLine(20) when $10 is true
-   86. copy_slot_unmasked             $2 = i₁
-   87. copy_constant                  $3 = 0x00000001 (1.401298e-45)
-   88. add_int                        $2 += $3
-   89. copy_slot_unmasked             i₁ = $2
-   90. trace_var                      TraceVar(i₁) when $10 is true
-   91. copy_slot_unmasked             $2 = i₁
-   92. copy_constant                  $3 = 0x00000004 (5.605194e-45)
-   93. cmplt_int                      $2 = lessThan($2, $3)
-   94. stack_rewind
-   95. branch_if_no_active_lanes_eq   branch -25 (label 6 at #70) if no lanes of $2 == 0x00000000 (0.0)
-   96. label                          label 0x00000005
-   97. trace_scope                    TraceScope(-1) when $10 is true
-   98. trace_line                     TraceLine(23) when $10 is true
-   99. copy_slot_unmasked             [index_by_complex_loop].result = prod
-  100. trace_var                      TraceVar([index_by_complex_loop].result) when $10 is true
-  101. trace_scope                    TraceScope(-1) when $10 is true
-  102. trace_exit                     TraceExit(float index_by_complex_loop()) when $10 is true
-  103. copy_slot_unmasked             $2 = [index_by_complex_loop].result
-  104. label                          label 0x00000004
-  105. trace_enter                    TraceEnter(float index_out_of_bounds_checked()) when $10 is true
-  106. trace_scope                    TraceScope(+1) when $10 is true
-  107. trace_line                     TraceLine(28) when $10 is true
-  108. zero_slot_unmasked             sum₁ = 0
-  109. trace_var                      TraceVar(sum₁) when $10 is true
-  110. trace_scope                    TraceScope(+1) when $10 is true
-  111. trace_line                     TraceLine(29) when $10 is true
-  112. copy_constant                  f = 0xC0133333 (-2.3)
-  113. trace_var                      TraceVar(f) when $10 is true
-  114. label                          label 0x0000000A
-  115. trace_scope                    TraceScope(+1) when $10 is true
-  116. trace_line                     TraceLine(30) when $10 is true
-  117. store_condition_mask           $3 = CondMask
-  118. zero_slot_unmasked             $4 = 0
-  119. copy_slot_unmasked             $5 = f
-  120. cmplt_float                    $4 = lessThan($4, $5)
-  121. copy_slot_unmasked             $5 = f
-  122. copy_constant                  $6 = 0x41800000 (16.0)
-  123. cmplt_float                    $5 = lessThan($5, $6)
-  124. bitwise_and_int                $4 &= $5
-  125. merge_condition_mask           CondMask = $3 & $4
-  126. trace_scope                    TraceScope(+1) when $10 is true
-  127. trace_line                     TraceLine(31) when $10 is true
-  128. copy_slot_unmasked             $5 = sum₁
-  129. copy_slot_unmasked             $7 = f
-  130. cast_to_int_from_float         $7 = FloatToInt($7)
-  131. copy_from_indirect_uniform_unm $6 = Indirect(u4[0] + $7)
-  132. sub_float                      $5 -= $6
-  133. copy_slot_masked               sum₁ = Mask($5)
-  134. trace_var                      TraceVar(sum₁) when $10 is true
-  135. trace_scope                    TraceScope(-1) when $10 is true
-  136. load_condition_mask            CondMask = $3
-  137. trace_scope                    TraceScope(-1) when $10 is true
-  138. trace_line                     TraceLine(29) when $10 is true
-  139. copy_slot_unmasked             $3 = f
-  140. copy_constant                  $4 = 0x406CCCCD (3.7)
-  141. add_float                      $3 += $4
-  142. copy_slot_unmasked             f = $3
-  143. trace_var                      TraceVar(f) when $10 is true
-  144. copy_slot_unmasked             $3 = f
-  145. copy_constant                  $4 = 0x41880000 (17.0)
-  146. cmplt_float                    $3 = lessThan($3, $4)
-  147. stack_rewind
-  148. branch_if_no_active_lanes_eq   branch -34 (label 10 at #114) if no lanes of $3 == 0x00000000 (0.0)
-  149. label                          label 0x00000009
-  150. trace_scope                    TraceScope(-1) when $10 is true
-  151. trace_line                     TraceLine(34) when $10 is true
-  152. copy_slot_unmasked             [index_out_of_bounds_checked].result = sum₁
-  153. trace_var                      TraceVar([index_out_of_bounds_checked].result) when $10 is true
-  154. trace_scope                    TraceScope(-1) when $10 is true
-  155. trace_exit                     TraceExit(float index_out_of_bounds_checked()) when $10 is true
-  156. copy_slot_unmasked             $3 = [index_out_of_bounds_checked].result
-  157. label                          label 0x00000008
-  158. copy_4_slots_unmasked          [main].result = $0..3
-  159. trace_var                      TraceVar([main].result) when $10 is true
-  160. trace_scope                    TraceScope(-1) when $10 is true
-  161. trace_exit                     TraceExit(float4 main(float2 xy)) when $10 is true
-  162. load_src                       src.rgba = [main].result
+    8. trace_enter                    TraceEnter(float4 main(float2 xy)) when $15 is true
+    9. trace_var                      TraceVar(xy) when $15 is true
+   10. zero_slot_unmasked             $0 = 0
+   11. copy_slot_unmasked             $1 = $15
+   12. copy_slot_masked               $0 = Mask($1)
+   13. trace_scope                    TraceScope(+1) when $0 is true
+   14. trace_line                     TraceLine(38) when $15 is true
+   15. trace_enter                    TraceEnter(float index_by_literal()) when $15 is true
+   16. zero_slot_unmasked             $1 = 0
+   17. copy_slot_unmasked             $2 = $15
+   18. copy_slot_masked               $1 = Mask($2)
+   19. trace_scope                    TraceScope(+1) when $1 is true
+   20. trace_line                     TraceLine(5) when $15 is true
+   21. copy_constant                  $2 = u1[0]
+   22. copy_slot_unmasked             [index_by_literal].result = $2
+   23. trace_var                      TraceVar([index_by_literal].result) when $15 is true
+   24. trace_scope                    TraceScope(-1) when $1 is true
+   25. trace_exit                     TraceExit(float index_by_literal()) when $15 is true
+   26. copy_slot_unmasked             $1 = [index_by_literal].result
+   27. label                          label 0x00000000
+   28. trace_enter                    TraceEnter(float index_by_loop()) when $15 is true
+   29. zero_slot_unmasked             $2 = 0
+   30. copy_slot_unmasked             $3 = $15
+   31. copy_slot_masked               $2 = Mask($3)
+   32. trace_scope                    TraceScope(+1) when $2 is true
+   33. trace_line                     TraceLine(10) when $15 is true
+   34. zero_slot_unmasked             sum = 0
+   35. trace_var                      TraceVar(sum) when $15 is true
+   36. zero_slot_unmasked             $3 = 0
+   37. copy_slot_unmasked             $4 = $15
+   38. copy_slot_masked               $3 = Mask($4)
+   39. trace_scope                    TraceScope(+1) when $3 is true
+   40. trace_line                     TraceLine(11) when $15 is true
+   41. copy_constant                  i = 0x00000003 (4.203895e-45)
+   42. trace_var                      TraceVar(i) when $15 is true
+   43. label                          label 0x00000003
+   44. zero_slot_unmasked             $4 = 0
+   45. copy_slot_unmasked             $5 = $15
+   46. copy_slot_masked               $4 = Mask($5)
+   47. trace_scope                    TraceScope(+1) when $4 is true
+   48. trace_line                     TraceLine(12) when $15 is true
+   49. copy_slot_unmasked             $5 = sum
+   50. copy_slot_unmasked             $12 = i
+   51. copy_from_indirect_uniform_unm $6 = Indirect(u2[0] + $12)
+   52. add_float                      $5 += $6
+   53. copy_slot_unmasked             sum = $5
+   54. trace_var                      TraceVar(sum) when $15 is true
+   55. trace_scope                    TraceScope(-1) when $4 is true
+   56. trace_line                     TraceLine(11) when $15 is true
+   57. copy_slot_unmasked             $4 = i
+   58. copy_constant                  $5 = 0x00000001 (1.401298e-45)
+   59. sub_int                        $4 -= $5
+   60. copy_slot_unmasked             i = $4
+   61. trace_var                      TraceVar(i) when $15 is true
+   62. zero_slot_unmasked             $4 = 0
+   63. copy_slot_unmasked             $5 = i
+   64. cmple_int                      $4 = lessThanEqual($4, $5)
+   65. stack_rewind
+   66. branch_if_no_active_lanes_eq   branch -23 (label 3 at #43) if no lanes of $4 == 0x00000000 (0.0)
+   67. label                          label 0x00000002
+   68. trace_scope                    TraceScope(-1) when $3 is true
+   69. trace_line                     TraceLine(14) when $15 is true
+   70. copy_slot_unmasked             [index_by_loop].result = sum
+   71. trace_var                      TraceVar([index_by_loop].result) when $15 is true
+   72. trace_scope                    TraceScope(-1) when $2 is true
+   73. trace_exit                     TraceExit(float index_by_loop()) when $15 is true
+   74. copy_slot_unmasked             $2 = [index_by_loop].result
+   75. label                          label 0x00000001
+   76. trace_enter                    TraceEnter(float index_by_complex_loop()) when $15 is true
+   77. zero_slot_unmasked             $3 = 0
+   78. copy_slot_unmasked             $4 = $15
+   79. copy_slot_masked               $3 = Mask($4)
+   80. trace_scope                    TraceScope(+1) when $3 is true
+   81. trace_line                     TraceLine(19) when $15 is true
+   82. copy_constant                  prod = 0x3F800000 (1.0)
+   83. trace_var                      TraceVar(prod) when $15 is true
+   84. zero_slot_unmasked             $4 = 0
+   85. copy_slot_unmasked             $5 = $15
+   86. copy_slot_masked               $4 = Mask($5)
+   87. trace_scope                    TraceScope(+1) when $4 is true
+   88. trace_line                     TraceLine(20) when $15 is true
+   89. zero_slot_unmasked             i₁ = 0
+   90. trace_var                      TraceVar(i₁) when $15 is true
+   91. label                          label 0x00000006
+   92. zero_slot_unmasked             $5 = 0
+   93. copy_slot_unmasked             $6 = $15
+   94. copy_slot_masked               $5 = Mask($6)
+   95. trace_scope                    TraceScope(+1) when $5 is true
+   96. trace_line                     TraceLine(21) when $15 is true
+   97. copy_slot_unmasked             $6 = prod
+   98. copy_slot_unmasked             $12 = i₁
+   99. copy_constant                  $13 = 0x00000002 (2.802597e-45)
+  100. cmplt_int                      $12 = lessThan($12, $13)
+  101. copy_slot_unmasked             $13 = i₁
+  102. zero_slot_unmasked             $14 = 0
+  103. mix_int                        $12 = mix($13, $14, $12)
+  104. copy_from_indirect_uniform_unm $7 = Indirect(u3[0] + $12)
+  105. mul_float                      $6 *= $7
+  106. copy_slot_unmasked             prod = $6
+  107. trace_var                      TraceVar(prod) when $15 is true
+  108. trace_scope                    TraceScope(-1) when $5 is true
+  109. trace_line                     TraceLine(20) when $15 is true
+  110. copy_slot_unmasked             $5 = i₁
+  111. copy_constant                  $6 = 0x00000001 (1.401298e-45)
+  112. add_int                        $5 += $6
+  113. copy_slot_unmasked             i₁ = $5
+  114. trace_var                      TraceVar(i₁) when $15 is true
+  115. copy_slot_unmasked             $5 = i₁
+  116. copy_constant                  $6 = 0x00000004 (5.605194e-45)
+  117. cmplt_int                      $5 = lessThan($5, $6)
+  118. stack_rewind
+  119. branch_if_no_active_lanes_eq   branch -28 (label 6 at #91) if no lanes of $5 == 0x00000000 (0.0)
+  120. label                          label 0x00000005
+  121. trace_scope                    TraceScope(-1) when $4 is true
+  122. trace_line                     TraceLine(23) when $15 is true
+  123. copy_slot_unmasked             [index_by_complex_loop].result = prod
+  124. trace_var                      TraceVar([index_by_complex_loop].result) when $15 is true
+  125. trace_scope                    TraceScope(-1) when $3 is true
+  126. trace_exit                     TraceExit(float index_by_complex_loop()) when $15 is true
+  127. copy_slot_unmasked             $3 = [index_by_complex_loop].result
+  128. label                          label 0x00000004
+  129. trace_enter                    TraceEnter(float index_out_of_bounds_checked()) when $15 is true
+  130. zero_slot_unmasked             $4 = 0
+  131. copy_slot_unmasked             $5 = $15
+  132. copy_slot_masked               $4 = Mask($5)
+  133. trace_scope                    TraceScope(+1) when $4 is true
+  134. trace_line                     TraceLine(28) when $15 is true
+  135. zero_slot_unmasked             sum₁ = 0
+  136. trace_var                      TraceVar(sum₁) when $15 is true
+  137. zero_slot_unmasked             $5 = 0
+  138. copy_slot_unmasked             $6 = $15
+  139. copy_slot_masked               $5 = Mask($6)
+  140. trace_scope                    TraceScope(+1) when $5 is true
+  141. trace_line                     TraceLine(29) when $15 is true
+  142. copy_constant                  f = 0xC0133333 (-2.3)
+  143. trace_var                      TraceVar(f) when $15 is true
+  144. label                          label 0x0000000A
+  145. zero_slot_unmasked             $6 = 0
+  146. copy_slot_unmasked             $7 = $15
+  147. copy_slot_masked               $6 = Mask($7)
+  148. trace_scope                    TraceScope(+1) when $6 is true
+  149. trace_line                     TraceLine(30) when $15 is true
+  150. store_condition_mask           $7 = CondMask
+  151. zero_slot_unmasked             $8 = 0
+  152. copy_slot_unmasked             $9 = f
+  153. cmplt_float                    $8 = lessThan($8, $9)
+  154. copy_slot_unmasked             $9 = f
+  155. copy_constant                  $10 = 0x41800000 (16.0)
+  156. cmplt_float                    $9 = lessThan($9, $10)
+  157. bitwise_and_int                $8 &= $9
+  158. merge_condition_mask           CondMask = $7 & $8
+  159. zero_slot_unmasked             $9 = 0
+  160. copy_slot_unmasked             $10 = $15
+  161. copy_slot_masked               $9 = Mask($10)
+  162. trace_scope                    TraceScope(+1) when $9 is true
+  163. trace_line                     TraceLine(31) when $15 is true
+  164. copy_slot_unmasked             $10 = sum₁
+  165. copy_slot_unmasked             $12 = f
+  166. cast_to_int_from_float         $12 = FloatToInt($12)
+  167. copy_from_indirect_uniform_unm $11 = Indirect(u4[0] + $12)
+  168. sub_float                      $10 -= $11
+  169. copy_slot_masked               sum₁ = Mask($10)
+  170. trace_var                      TraceVar(sum₁) when $15 is true
+  171. trace_scope                    TraceScope(-1) when $9 is true
+  172. load_condition_mask            CondMask = $7
+  173. trace_scope                    TraceScope(-1) when $6 is true
+  174. trace_line                     TraceLine(29) when $15 is true
+  175. copy_slot_unmasked             $6 = f
+  176. copy_constant                  $7 = 0x406CCCCD (3.7)
+  177. add_float                      $6 += $7
+  178. copy_slot_unmasked             f = $6
+  179. trace_var                      TraceVar(f) when $15 is true
+  180. copy_slot_unmasked             $6 = f
+  181. copy_constant                  $7 = 0x41880000 (17.0)
+  182. cmplt_float                    $6 = lessThan($6, $7)
+  183. stack_rewind
+  184. branch_if_no_active_lanes_eq   branch -40 (label 10 at #144) if no lanes of $6 == 0x00000000 (0.0)
+  185. label                          label 0x00000009
+  186. trace_scope                    TraceScope(-1) when $5 is true
+  187. trace_line                     TraceLine(34) when $15 is true
+  188. copy_slot_unmasked             [index_out_of_bounds_checked].result = sum₁
+  189. trace_var                      TraceVar([index_out_of_bounds_checked].result) when $15 is true
+  190. trace_scope                    TraceScope(-1) when $4 is true
+  191. trace_exit                     TraceExit(float index_out_of_bounds_checked()) when $15 is true
+  192. copy_slot_unmasked             $4 = [index_out_of_bounds_checked].result
+  193. label                          label 0x00000008
+  194. copy_4_slots_unmasked          [main].result = $1..4
+  195. trace_var                      TraceVar([main].result) when $15 is true
+  196. trace_scope                    TraceScope(-1) when $0 is true
+  197. trace_exit                     TraceExit(float4 main(float2 xy)) when $15 is true
+  198. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/runtime/Commutative.skrp b/tests/sksl/runtime/Commutative.skrp
index 0c2e8795..bbc0656 100644
--- a/tests/sksl/runtime/Commutative.skrp
+++ b/tests/sksl/runtime/Commutative.skrp
@@ -1,204 +1,207 @@
-    1. store_device_xy01              $12..15 = DeviceCoords.xy01
-    2. copy_constant                  $14 = 0x3F000000 (0.5)
-    3. copy_constant                  $15 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $12..13 = equal($12..13, $14..15)
-    5. bitwise_and_int                $12 &= $13
+    1. store_device_xy01              $13..16 = DeviceCoords.xy01
+    2. copy_constant                  $15 = 0x3F000000 (0.5)
+    3. copy_constant                  $16 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $13..14 = equal($13..14, $15..16)
+    5. bitwise_and_int                $13 &= $14
     6. store_src_rg                   xy = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
-    8. trace_enter                    TraceEnter(half4 main(float2 xy)) when $12 is true
-    9. trace_var                      TraceVar(xy) when $12 is true
-   10. trace_scope                    TraceScope(+1) when $12 is true
-   11. trace_line                     TraceLine(10) when $12 is true
-   12. copy_constant                  ok = 0xFFFFFFFF
-   13. trace_var                      TraceVar(ok) when $12 is true
-   14. trace_line                     TraceLine(11) when $12 is true
-   15. copy_constant                  $0 = testMatrix2x2(0)
-   16. cast_to_int_from_float         $0 = FloatToInt($0)
-   17. copy_slot_unmasked             a = $0
-   18. trace_var                      TraceVar(a) when $12 is true
-   19. copy_2_constants               $0..1 = testMatrix2x2(0..1)
-   20. swizzle_1                      $0 = ($0..1).y
-   21. cast_to_int_from_float         $0 = FloatToInt($0)
-   22. copy_slot_unmasked             b = $0
-   23. trace_var                      TraceVar(b) when $12 is true
-   24. trace_line                     TraceLine(12) when $12 is true
-   25. copy_constant                  $0 = testMatrix2x2(2)
-   26. copy_slot_unmasked             c = $0
-   27. trace_var                      TraceVar(c) when $12 is true
-   28. copy_2_constants               $0..1 = testMatrix2x2(2..3)
-   29. swizzle_1                      $0 = ($0..1).y
-   30. copy_slot_unmasked             d = $0
-   31. trace_var                      TraceVar(d) when $12 is true
-   32. trace_line                     TraceLine(14) when $12 is true
-   33. copy_2_slots_unmasked          $0..1 = a, b
-   34. bitwise_and_int                $0 &= $1
-   35. copy_slot_unmasked             a_and_b = $0
-   36. trace_var                      TraceVar(a_and_b) when $12 is true
-   37. trace_line                     TraceLine(15) when $12 is true
-   38. copy_slot_unmasked             $0 = b
-   39. copy_slot_unmasked             $1 = a
-   40. bitwise_and_int                $0 &= $1
-   41. copy_slot_unmasked             b_and_a = $0
-   42. trace_var                      TraceVar(b_and_a) when $12 is true
-   43. trace_line                     TraceLine(16) when $12 is true
-   44. copy_slot_unmasked             $0 = ok
-   45. copy_2_slots_unmasked          $1..2 = a_and_b, b_and_a
-   46. cmpeq_int                      $1 = equal($1, $2)
-   47. bitwise_and_int                $0 &= $1
-   48. copy_slot_unmasked             ok = $0
-   49. trace_var                      TraceVar(ok) when $12 is true
-   50. trace_line                     TraceLine(18) when $12 is true
-   51. copy_2_slots_unmasked          $0..1 = a, b
-   52. bitwise_or_int                 $0 |= $1
-   53. copy_slot_unmasked             a_or_b = $0
-   54. trace_var                      TraceVar(a_or_b) when $12 is true
-   55. trace_line                     TraceLine(19) when $12 is true
-   56. copy_slot_unmasked             $0 = b
-   57. copy_slot_unmasked             $1 = a
-   58. bitwise_or_int                 $0 |= $1
-   59. copy_slot_unmasked             b_or_a = $0
-   60. trace_var                      TraceVar(b_or_a) when $12 is true
-   61. trace_line                     TraceLine(20) when $12 is true
-   62. copy_slot_unmasked             $0 = ok
-   63. copy_2_slots_unmasked          $1..2 = a_or_b, b_or_a
-   64. cmpeq_int                      $1 = equal($1, $2)
-   65. bitwise_and_int                $0 &= $1
-   66. copy_slot_unmasked             ok = $0
-   67. trace_var                      TraceVar(ok) when $12 is true
-   68. trace_line                     TraceLine(22) when $12 is true
-   69. copy_2_slots_unmasked          $0..1 = a, b
-   70. bitwise_xor_int                $0 ^= $1
-   71. copy_slot_unmasked             a_xor_b = $0
-   72. trace_var                      TraceVar(a_xor_b) when $12 is true
-   73. trace_line                     TraceLine(23) when $12 is true
-   74. copy_slot_unmasked             $0 = b
-   75. copy_slot_unmasked             $1 = a
-   76. bitwise_xor_int                $0 ^= $1
-   77. copy_slot_unmasked             b_xor_a = $0
-   78. trace_var                      TraceVar(b_xor_a) when $12 is true
-   79. trace_line                     TraceLine(24) when $12 is true
-   80. copy_slot_unmasked             $0 = ok
-   81. copy_2_slots_unmasked          $1..2 = a_xor_b, b_xor_a
-   82. cmpeq_int                      $1 = equal($1, $2)
-   83. bitwise_and_int                $0 &= $1
-   84. copy_slot_unmasked             ok = $0
-   85. trace_var                      TraceVar(ok) when $12 is true
-   86. trace_line                     TraceLine(26) when $12 is true
-   87. copy_2_slots_unmasked          $0..1 = a, b
-   88. cmpeq_int                      $0 = equal($0, $1)
-   89. copy_slot_unmasked             a_eq_b = $0
-   90. trace_var                      TraceVar(a_eq_b) when $12 is true
-   91. trace_line                     TraceLine(27) when $12 is true
-   92. copy_slot_unmasked             $0 = b
-   93. copy_slot_unmasked             $1 = a
-   94. cmpeq_int                      $0 = equal($0, $1)
-   95. copy_slot_unmasked             b_eq_a = $0
-   96. trace_var                      TraceVar(b_eq_a) when $12 is true
-   97. trace_line                     TraceLine(28) when $12 is true
-   98. copy_slot_unmasked             $0 = ok
-   99. copy_2_slots_unmasked          $1..2 = a_eq_b, b_eq_a
-  100. cmpeq_int                      $1 = equal($1, $2)
-  101. bitwise_and_int                $0 &= $1
-  102. copy_slot_unmasked             ok = $0
-  103. trace_var                      TraceVar(ok) when $12 is true
-  104. trace_line                     TraceLine(30) when $12 is true
-  105. copy_2_slots_unmasked          $0..1 = a, b
-  106. cmpne_int                      $0 = notEqual($0, $1)
-  107. copy_slot_unmasked             a_neq_b = $0
-  108. trace_var                      TraceVar(a_neq_b) when $12 is true
-  109. trace_line                     TraceLine(31) when $12 is true
-  110. copy_slot_unmasked             $0 = b
-  111. copy_slot_unmasked             $1 = a
-  112. cmpne_int                      $0 = notEqual($0, $1)
-  113. copy_slot_unmasked             b_neq_a = $0
-  114. trace_var                      TraceVar(b_neq_a) when $12 is true
-  115. trace_line                     TraceLine(32) when $12 is true
-  116. copy_slot_unmasked             $0 = ok
-  117. copy_2_slots_unmasked          $1..2 = a_neq_b, b_neq_a
-  118. cmpeq_int                      $1 = equal($1, $2)
-  119. bitwise_and_int                $0 &= $1
-  120. copy_slot_unmasked             ok = $0
-  121. trace_var                      TraceVar(ok) when $12 is true
-  122. trace_line                     TraceLine(34) when $12 is true
-  123. copy_2_slots_unmasked          $0..1 = a, b
-  124. add_int                        $0 += $1
-  125. copy_slot_unmasked             a_add_b = $0
-  126. trace_var                      TraceVar(a_add_b) when $12 is true
-  127. trace_line                     TraceLine(35) when $12 is true
-  128. copy_slot_unmasked             $0 = b
-  129. copy_slot_unmasked             $1 = a
-  130. add_int                        $0 += $1
-  131. copy_slot_unmasked             b_add_a = $0
-  132. trace_var                      TraceVar(b_add_a) when $12 is true
-  133. trace_line                     TraceLine(36) when $12 is true
-  134. copy_slot_unmasked             $0 = ok
-  135. copy_2_slots_unmasked          $1..2 = a_add_b, b_add_a
-  136. cmpeq_int                      $1 = equal($1, $2)
-  137. bitwise_and_int                $0 &= $1
-  138. copy_slot_unmasked             ok = $0
-  139. trace_var                      TraceVar(ok) when $12 is true
-  140. trace_line                     TraceLine(38) when $12 is true
-  141. copy_2_slots_unmasked          $0..1 = c, d
-  142. add_float                      $0 += $1
-  143. copy_slot_unmasked             c_add_d = $0
-  144. trace_var                      TraceVar(c_add_d) when $12 is true
-  145. trace_line                     TraceLine(39) when $12 is true
-  146. copy_slot_unmasked             $0 = d
-  147. copy_slot_unmasked             $1 = c
-  148. add_float                      $0 += $1
-  149. copy_slot_unmasked             d_add_c = $0
-  150. trace_var                      TraceVar(d_add_c) when $12 is true
-  151. trace_line                     TraceLine(40) when $12 is true
-  152. copy_slot_unmasked             $0 = ok
-  153. copy_2_slots_unmasked          $1..2 = c_add_d, d_add_c
-  154. cmpeq_float                    $1 = equal($1, $2)
-  155. bitwise_and_int                $0 &= $1
-  156. copy_slot_unmasked             ok = $0
-  157. trace_var                      TraceVar(ok) when $12 is true
-  158. trace_line                     TraceLine(42) when $12 is true
-  159. copy_2_slots_unmasked          $0..1 = a, b
-  160. mul_int                        $0 *= $1
-  161. copy_slot_unmasked             a_mul_b = $0
-  162. trace_var                      TraceVar(a_mul_b) when $12 is true
-  163. trace_line                     TraceLine(43) when $12 is true
-  164. copy_slot_unmasked             $0 = b
-  165. copy_slot_unmasked             $1 = a
-  166. mul_int                        $0 *= $1
-  167. copy_slot_unmasked             b_mul_a = $0
-  168. trace_var                      TraceVar(b_mul_a) when $12 is true
-  169. trace_line                     TraceLine(44) when $12 is true
-  170. copy_slot_unmasked             $0 = ok
-  171. copy_2_slots_unmasked          $1..2 = a_mul_b, b_mul_a
-  172. cmpeq_int                      $1 = equal($1, $2)
-  173. bitwise_and_int                $0 &= $1
-  174. copy_slot_unmasked             ok = $0
-  175. trace_var                      TraceVar(ok) when $12 is true
-  176. trace_line                     TraceLine(46) when $12 is true
-  177. copy_2_slots_unmasked          $0..1 = c, d
-  178. mul_float                      $0 *= $1
-  179. copy_slot_unmasked             c_mul_d = $0
-  180. trace_var                      TraceVar(c_mul_d) when $12 is true
-  181. trace_line                     TraceLine(47) when $12 is true
-  182. copy_slot_unmasked             $0 = d
-  183. copy_slot_unmasked             $1 = c
-  184. mul_float                      $0 *= $1
-  185. copy_slot_unmasked             d_mul_c = $0
-  186. trace_var                      TraceVar(d_mul_c) when $12 is true
-  187. trace_line                     TraceLine(48) when $12 is true
-  188. copy_slot_unmasked             $0 = ok
-  189. copy_2_slots_unmasked          $1..2 = c_mul_d, d_mul_c
-  190. cmpeq_float                    $1 = equal($1, $2)
-  191. bitwise_and_int                $0 &= $1
-  192. copy_slot_unmasked             ok = $0
-  193. trace_var                      TraceVar(ok) when $12 is true
-  194. trace_line                     TraceLine(50) when $12 is true
-  195. copy_slot_unmasked             $0 = ok
-  196. swizzle_4                      $0..3 = ($0..3).xxxx
-  197. copy_4_constants               $4..7 = colorRed
-  198. copy_4_constants               $8..11 = colorGreen
-  199. mix_4_ints                     $0..3 = mix($4..7, $8..11, $0..3)
-  200. copy_4_slots_unmasked          [main].result = $0..3
-  201. trace_var                      TraceVar([main].result) when $12 is true
-  202. trace_scope                    TraceScope(-1) when $12 is true
-  203. trace_exit                     TraceExit(half4 main(float2 xy)) when $12 is true
-  204. load_src                       src.rgba = [main].result
+    8. trace_enter                    TraceEnter(half4 main(float2 xy)) when $13 is true
+    9. trace_var                      TraceVar(xy) when $13 is true
+   10. zero_slot_unmasked             $0 = 0
+   11. copy_slot_unmasked             $1 = $13
+   12. copy_slot_masked               $0 = Mask($1)
+   13. trace_scope                    TraceScope(+1) when $0 is true
+   14. trace_line                     TraceLine(10) when $13 is true
+   15. copy_constant                  ok = 0xFFFFFFFF
+   16. trace_var                      TraceVar(ok) when $13 is true
+   17. trace_line                     TraceLine(11) when $13 is true
+   18. copy_constant                  $1 = testMatrix2x2(0)
+   19. cast_to_int_from_float         $1 = FloatToInt($1)
+   20. copy_slot_unmasked             a = $1
+   21. trace_var                      TraceVar(a) when $13 is true
+   22. copy_2_constants               $1..2 = testMatrix2x2(0..1)
+   23. swizzle_1                      $1 = ($1..2).y
+   24. cast_to_int_from_float         $1 = FloatToInt($1)
+   25. copy_slot_unmasked             b = $1
+   26. trace_var                      TraceVar(b) when $13 is true
+   27. trace_line                     TraceLine(12) when $13 is true
+   28. copy_constant                  $1 = testMatrix2x2(2)
+   29. copy_slot_unmasked             c = $1
+   30. trace_var                      TraceVar(c) when $13 is true
+   31. copy_2_constants               $1..2 = testMatrix2x2(2..3)
+   32. swizzle_1                      $1 = ($1..2).y
+   33. copy_slot_unmasked             d = $1
+   34. trace_var                      TraceVar(d) when $13 is true
+   35. trace_line                     TraceLine(14) when $13 is true
+   36. copy_2_slots_unmasked          $1..2 = a, b
+   37. bitwise_and_int                $1 &= $2
+   38. copy_slot_unmasked             a_and_b = $1
+   39. trace_var                      TraceVar(a_and_b) when $13 is true
+   40. trace_line                     TraceLine(15) when $13 is true
+   41. copy_slot_unmasked             $1 = b
+   42. copy_slot_unmasked             $2 = a
+   43. bitwise_and_int                $1 &= $2
+   44. copy_slot_unmasked             b_and_a = $1
+   45. trace_var                      TraceVar(b_and_a) when $13 is true
+   46. trace_line                     TraceLine(16) when $13 is true
+   47. copy_slot_unmasked             $1 = ok
+   48. copy_2_slots_unmasked          $2..3 = a_and_b, b_and_a
+   49. cmpeq_int                      $2 = equal($2, $3)
+   50. bitwise_and_int                $1 &= $2
+   51. copy_slot_unmasked             ok = $1
+   52. trace_var                      TraceVar(ok) when $13 is true
+   53. trace_line                     TraceLine(18) when $13 is true
+   54. copy_2_slots_unmasked          $1..2 = a, b
+   55. bitwise_or_int                 $1 |= $2
+   56. copy_slot_unmasked             a_or_b = $1
+   57. trace_var                      TraceVar(a_or_b) when $13 is true
+   58. trace_line                     TraceLine(19) when $13 is true
+   59. copy_slot_unmasked             $1 = b
+   60. copy_slot_unmasked             $2 = a
+   61. bitwise_or_int                 $1 |= $2
+   62. copy_slot_unmasked             b_or_a = $1
+   63. trace_var                      TraceVar(b_or_a) when $13 is true
+   64. trace_line                     TraceLine(20) when $13 is true
+   65. copy_slot_unmasked             $1 = ok
+   66. copy_2_slots_unmasked          $2..3 = a_or_b, b_or_a
+   67. cmpeq_int                      $2 = equal($2, $3)
+   68. bitwise_and_int                $1 &= $2
+   69. copy_slot_unmasked             ok = $1
+   70. trace_var                      TraceVar(ok) when $13 is true
+   71. trace_line                     TraceLine(22) when $13 is true
+   72. copy_2_slots_unmasked          $1..2 = a, b
+   73. bitwise_xor_int                $1 ^= $2
+   74. copy_slot_unmasked             a_xor_b = $1
+   75. trace_var                      TraceVar(a_xor_b) when $13 is true
+   76. trace_line                     TraceLine(23) when $13 is true
+   77. copy_slot_unmasked             $1 = b
+   78. copy_slot_unmasked             $2 = a
+   79. bitwise_xor_int                $1 ^= $2
+   80. copy_slot_unmasked             b_xor_a = $1
+   81. trace_var                      TraceVar(b_xor_a) when $13 is true
+   82. trace_line                     TraceLine(24) when $13 is true
+   83. copy_slot_unmasked             $1 = ok
+   84. copy_2_slots_unmasked          $2..3 = a_xor_b, b_xor_a
+   85. cmpeq_int                      $2 = equal($2, $3)
+   86. bitwise_and_int                $1 &= $2
+   87. copy_slot_unmasked             ok = $1
+   88. trace_var                      TraceVar(ok) when $13 is true
+   89. trace_line                     TraceLine(26) when $13 is true
+   90. copy_2_slots_unmasked          $1..2 = a, b
+   91. cmpeq_int                      $1 = equal($1, $2)
+   92. copy_slot_unmasked             a_eq_b = $1
+   93. trace_var                      TraceVar(a_eq_b) when $13 is true
+   94. trace_line                     TraceLine(27) when $13 is true
+   95. copy_slot_unmasked             $1 = b
+   96. copy_slot_unmasked             $2 = a
+   97. cmpeq_int                      $1 = equal($1, $2)
+   98. copy_slot_unmasked             b_eq_a = $1
+   99. trace_var                      TraceVar(b_eq_a) when $13 is true
+  100. trace_line                     TraceLine(28) when $13 is true
+  101. copy_slot_unmasked             $1 = ok
+  102. copy_2_slots_unmasked          $2..3 = a_eq_b, b_eq_a
+  103. cmpeq_int                      $2 = equal($2, $3)
+  104. bitwise_and_int                $1 &= $2
+  105. copy_slot_unmasked             ok = $1
+  106. trace_var                      TraceVar(ok) when $13 is true
+  107. trace_line                     TraceLine(30) when $13 is true
+  108. copy_2_slots_unmasked          $1..2 = a, b
+  109. cmpne_int                      $1 = notEqual($1, $2)
+  110. copy_slot_unmasked             a_neq_b = $1
+  111. trace_var                      TraceVar(a_neq_b) when $13 is true
+  112. trace_line                     TraceLine(31) when $13 is true
+  113. copy_slot_unmasked             $1 = b
+  114. copy_slot_unmasked             $2 = a
+  115. cmpne_int                      $1 = notEqual($1, $2)
+  116. copy_slot_unmasked             b_neq_a = $1
+  117. trace_var                      TraceVar(b_neq_a) when $13 is true
+  118. trace_line                     TraceLine(32) when $13 is true
+  119. copy_slot_unmasked             $1 = ok
+  120. copy_2_slots_unmasked          $2..3 = a_neq_b, b_neq_a
+  121. cmpeq_int                      $2 = equal($2, $3)
+  122. bitwise_and_int                $1 &= $2
+  123. copy_slot_unmasked             ok = $1
+  124. trace_var                      TraceVar(ok) when $13 is true
+  125. trace_line                     TraceLine(34) when $13 is true
+  126. copy_2_slots_unmasked          $1..2 = a, b
+  127. add_int                        $1 += $2
+  128. copy_slot_unmasked             a_add_b = $1
+  129. trace_var                      TraceVar(a_add_b) when $13 is true
+  130. trace_line                     TraceLine(35) when $13 is true
+  131. copy_slot_unmasked             $1 = b
+  132. copy_slot_unmasked             $2 = a
+  133. add_int                        $1 += $2
+  134. copy_slot_unmasked             b_add_a = $1
+  135. trace_var                      TraceVar(b_add_a) when $13 is true
+  136. trace_line                     TraceLine(36) when $13 is true
+  137. copy_slot_unmasked             $1 = ok
+  138. copy_2_slots_unmasked          $2..3 = a_add_b, b_add_a
+  139. cmpeq_int                      $2 = equal($2, $3)
+  140. bitwise_and_int                $1 &= $2
+  141. copy_slot_unmasked             ok = $1
+  142. trace_var                      TraceVar(ok) when $13 is true
+  143. trace_line                     TraceLine(38) when $13 is true
+  144. copy_2_slots_unmasked          $1..2 = c, d
+  145. add_float                      $1 += $2
+  146. copy_slot_unmasked             c_add_d = $1
+  147. trace_var                      TraceVar(c_add_d) when $13 is true
+  148. trace_line                     TraceLine(39) when $13 is true
+  149. copy_slot_unmasked             $1 = d
+  150. copy_slot_unmasked             $2 = c
+  151. add_float                      $1 += $2
+  152. copy_slot_unmasked             d_add_c = $1
+  153. trace_var                      TraceVar(d_add_c) when $13 is true
+  154. trace_line                     TraceLine(40) when $13 is true
+  155. copy_slot_unmasked             $1 = ok
+  156. copy_2_slots_unmasked          $2..3 = c_add_d, d_add_c
+  157. cmpeq_float                    $2 = equal($2, $3)
+  158. bitwise_and_int                $1 &= $2
+  159. copy_slot_unmasked             ok = $1
+  160. trace_var                      TraceVar(ok) when $13 is true
+  161. trace_line                     TraceLine(42) when $13 is true
+  162. copy_2_slots_unmasked          $1..2 = a, b
+  163. mul_int                        $1 *= $2
+  164. copy_slot_unmasked             a_mul_b = $1
+  165. trace_var                      TraceVar(a_mul_b) when $13 is true
+  166. trace_line                     TraceLine(43) when $13 is true
+  167. copy_slot_unmasked             $1 = b
+  168. copy_slot_unmasked             $2 = a
+  169. mul_int                        $1 *= $2
+  170. copy_slot_unmasked             b_mul_a = $1
+  171. trace_var                      TraceVar(b_mul_a) when $13 is true
+  172. trace_line                     TraceLine(44) when $13 is true
+  173. copy_slot_unmasked             $1 = ok
+  174. copy_2_slots_unmasked          $2..3 = a_mul_b, b_mul_a
+  175. cmpeq_int                      $2 = equal($2, $3)
+  176. bitwise_and_int                $1 &= $2
+  177. copy_slot_unmasked             ok = $1
+  178. trace_var                      TraceVar(ok) when $13 is true
+  179. trace_line                     TraceLine(46) when $13 is true
+  180. copy_2_slots_unmasked          $1..2 = c, d
+  181. mul_float                      $1 *= $2
+  182. copy_slot_unmasked             c_mul_d = $1
+  183. trace_var                      TraceVar(c_mul_d) when $13 is true
+  184. trace_line                     TraceLine(47) when $13 is true
+  185. copy_slot_unmasked             $1 = d
+  186. copy_slot_unmasked             $2 = c
+  187. mul_float                      $1 *= $2
+  188. copy_slot_unmasked             d_mul_c = $1
+  189. trace_var                      TraceVar(d_mul_c) when $13 is true
+  190. trace_line                     TraceLine(48) when $13 is true
+  191. copy_slot_unmasked             $1 = ok
+  192. copy_2_slots_unmasked          $2..3 = c_mul_d, d_mul_c
+  193. cmpeq_float                    $2 = equal($2, $3)
+  194. bitwise_and_int                $1 &= $2
+  195. copy_slot_unmasked             ok = $1
+  196. trace_var                      TraceVar(ok) when $13 is true
+  197. trace_line                     TraceLine(50) when $13 is true
+  198. copy_slot_unmasked             $1 = ok
+  199. swizzle_4                      $1..4 = ($1..4).xxxx
+  200. copy_4_constants               $5..8 = colorRed
+  201. copy_4_constants               $9..12 = colorGreen
+  202. mix_4_ints                     $1..4 = mix($5..8, $9..12, $1..4)
+  203. copy_4_slots_unmasked          [main].result = $1..4
+  204. trace_var                      TraceVar([main].result) when $13 is true
+  205. trace_scope                    TraceScope(-1) when $0 is true
+  206. trace_exit                     TraceExit(half4 main(float2 xy)) when $13 is true
+  207. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/runtime/GlobalVariables.skrp b/tests/sksl/runtime/GlobalVariables.skrp
index 1abedd9..872dc0b4 100644
--- a/tests/sksl/runtime/GlobalVariables.skrp
+++ b/tests/sksl/runtime/GlobalVariables.skrp
@@ -1,35 +1,41 @@
-    1. store_device_xy01              $1..4 = DeviceCoords.xy01
-    2. copy_constant                  $3 = 0x3F000000 (0.5)
-    3. copy_constant                  $4 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $1..2 = equal($1..2, $3..4)
-    5. bitwise_and_int                $1 &= $2
+    1. store_device_xy01              $3..6 = DeviceCoords.xy01
+    2. copy_constant                  $5 = 0x3F000000 (0.5)
+    3. copy_constant                  $6 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $3..4 = equal($3..4, $5..6)
+    5. bitwise_and_int                $3 &= $4
     6. store_src_rg                   xy = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
     8. copy_constant                  gInitialized = 0xBF800000 (-1.0)
-    9. trace_var                      TraceVar(gInitialized) when $1 is true
+    9. trace_var                      TraceVar(gInitialized) when $3 is true
    10. copy_constant                  gInitializedFromOther = 0x3F800000 (1.0)
-   11. trace_var                      TraceVar(gInitializedFromOther) when $1 is true
+   11. trace_var                      TraceVar(gInitializedFromOther) when $3 is true
    12. zero_slot_unmasked             gUninitialized = 0
-   13. trace_var                      TraceVar(gUninitialized) when $1 is true
-   14. trace_enter                    TraceEnter(float4 main(float2 xy)) when $1 is true
-   15. trace_var                      TraceVar(xy) when $1 is true
-   16. trace_scope                    TraceScope(+1) when $1 is true
-   17. trace_line                     TraceLine(12) when $1 is true
-   18. trace_enter                    TraceEnter(void init_globals()) when $1 is true
-   19. trace_scope                    TraceScope(+1) when $1 is true
-   20. trace_line                     TraceLine(8) when $1 is true
-   21. copy_constant                  $0 = 0x3F800000 (1.0)
-   22. copy_slot_unmasked             gUninitialized = $0
-   23. trace_var                      TraceVar(gUninitialized) when $1 is true
-   24. trace_scope                    TraceScope(-1) when $1 is true
-   25. trace_exit                     TraceExit(void init_globals()) when $1 is true
-   26. label                          label 0x00000000
-   27. trace_line                     TraceLine(13) when $1 is true
-   28. zero_slot_unmasked             [main].result(0) = 0
-   29. copy_slot_unmasked             [main].result(1) = gInitializedFromOther
-   30. zero_slot_unmasked             [main].result(2) = 0
-   31. copy_slot_unmasked             [main].result(3) = gUninitialized
-   32. trace_var                      TraceVar([main].result) when $1 is true
-   33. trace_scope                    TraceScope(-1) when $1 is true
-   34. trace_exit                     TraceExit(float4 main(float2 xy)) when $1 is true
-   35. load_src                       src.rgba = [main].result
+   13. trace_var                      TraceVar(gUninitialized) when $3 is true
+   14. trace_enter                    TraceEnter(float4 main(float2 xy)) when $3 is true
+   15. trace_var                      TraceVar(xy) when $3 is true
+   16. zero_slot_unmasked             $0 = 0
+   17. copy_slot_unmasked             $1 = $3
+   18. copy_slot_masked               $0 = Mask($1)
+   19. trace_scope                    TraceScope(+1) when $0 is true
+   20. trace_line                     TraceLine(12) when $3 is true
+   21. trace_enter                    TraceEnter(void init_globals()) when $3 is true
+   22. zero_slot_unmasked             $1 = 0
+   23. copy_slot_unmasked             $2 = $3
+   24. copy_slot_masked               $1 = Mask($2)
+   25. trace_scope                    TraceScope(+1) when $1 is true
+   26. trace_line                     TraceLine(8) when $3 is true
+   27. copy_constant                  $2 = 0x3F800000 (1.0)
+   28. copy_slot_unmasked             gUninitialized = $2
+   29. trace_var                      TraceVar(gUninitialized) when $3 is true
+   30. trace_scope                    TraceScope(-1) when $1 is true
+   31. trace_exit                     TraceExit(void init_globals()) when $3 is true
+   32. label                          label 0x00000000
+   33. trace_line                     TraceLine(13) when $3 is true
+   34. zero_slot_unmasked             [main].result(0) = 0
+   35. copy_slot_unmasked             [main].result(1) = gInitializedFromOther
+   36. zero_slot_unmasked             [main].result(2) = 0
+   37. copy_slot_unmasked             [main].result(3) = gUninitialized
+   38. trace_var                      TraceVar([main].result) when $3 is true
+   39. trace_scope                    TraceScope(-1) when $0 is true
+   40. trace_exit                     TraceExit(float4 main(float2 xy)) when $3 is true
+   41. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/runtime/LoopFloat.skrp b/tests/sksl/runtime/LoopFloat.skrp
index d9c0b23..036bd16 100644
--- a/tests/sksl/runtime/LoopFloat.skrp
+++ b/tests/sksl/runtime/LoopFloat.skrp
@@ -1,605 +1,707 @@
-    1. store_device_xy01              $28..31 = DeviceCoords.xy01
-    2. copy_constant                  $30 = 0x3F000000 (0.5)
-    3. copy_constant                  $31 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $28..29 = equal($28..29, $30..31)
-    5. bitwise_and_int                $28 &= $29
+    1. store_device_xy01              $40..43 = DeviceCoords.xy01
+    2. copy_constant                  $42 = 0x3F000000 (0.5)
+    3. copy_constant                  $43 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $40..41 = equal($40..41, $42..43)
+    5. bitwise_and_int                $40 &= $41
     6. store_src_rg                   pos = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
     8. zero_slot_unmasked             kZero = 0
-    9. trace_var                      TraceVar(kZero) when $28 is true
+    9. trace_var                      TraceVar(kZero) when $40 is true
    10. copy_constant                  kTen = 0x41200000 (10.0)
-   11. trace_var                      TraceVar(kTen) when $28 is true
-   12. trace_enter                    TraceEnter(half4 main(float2 pos)) when $28 is true
-   13. trace_var                      TraceVar(pos) when $28 is true
-   14. trace_scope                    TraceScope(+1) when $28 is true
-   15. trace_line                     TraceLine(116) when $28 is true
-   16. copy_slot_unmasked             $6 = pos(0)
-   17. copy_constant                  $7 = colorGreen(1)
-   18. max_float                      $6 = max($6, $7)
-   19. copy_constant                  $7 = colorGreen(3)
-   20. min_float                      $6 = min($6, $7)
-   21. copy_constant                  $7 = 0x40A00000 (5.0)
-   22. mul_float                      $6 *= $7
-   23. copy_slot_unmasked             five = $6
-   24. trace_var                      TraceVar(five) when $28 is true
-   25. trace_line                     TraceLine(117) when $28 is true
-   26. store_condition_mask           $42 = CondMask
-   27. store_condition_mask           $52 = CondMask
-   28. store_condition_mask           $32 = CondMask
-   29. store_condition_mask           $78 = CondMask
-   30. store_condition_mask           $62 = CondMask
-   31. store_condition_mask           $24 = CondMask
-   32. store_condition_mask           $72 = CondMask
-   33. store_condition_mask           $18 = CondMask
-   34. store_condition_mask           $0 = CondMask
-   35. branch_if_no_lanes_active      branch_if_no_lanes_active +54 (label 10 at #89)
-   36. copy_slot_unmasked             five₁ = five
-   37. trace_var                      TraceVar(five₁) when $28 is true
-   38. trace_enter                    TraceEnter(float return_loop(float five)) when $28 is true
-   39. store_return_mask              $1 = RetMask
-   40. trace_scope                    TraceScope(+1) when $28 is true
-   41. trace_scope                    TraceScope(+1) when $28 is true
-   42. trace_line                     TraceLine(8) when $28 is true
-   43. copy_slot_unmasked             i = kZero
-   44. trace_var                      TraceVar(i) when $28 is true
-   45. store_loop_mask                $2 = LoopMask
-   46. jump                           jump +24 (label 12 at #70)
-   47. label                          label 0x0000000D
-   48. trace_scope                    TraceScope(+1) when $28 is true
-   49. trace_line                     TraceLine(9) when $28 is true
-   50. store_condition_mask           $3 = CondMask
-   51. copy_slot_unmasked             $4 = i
-   52. copy_slot_unmasked             $5 = five₁
-   53. cmpeq_float                    $4 = equal($4, $5)
-   54. merge_condition_mask           CondMask = $3 & $4
-   55. trace_scope                    TraceScope(+1) when $28 is true
-   56. trace_line                     TraceLine(9) when $28 is true
-   57. copy_slot_unmasked             $5 = i
-   58. copy_slot_masked               [return_loop].result = Mask($5)
-   59. trace_var                      TraceVar([return_loop].result) when $28 is true
-   60. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
-   61. trace_scope                    TraceScope(-1) when $28 is true
-   62. load_condition_mask            CondMask = $3
-   63. trace_scope                    TraceScope(-1) when $28 is true
-   64. trace_line                     TraceLine(8) when $28 is true
-   65. copy_slot_unmasked             $3 = i
-   66. copy_constant                  $4 = 0x3F800000 (1.0)
-   67. add_float                      $3 += $4
-   68. copy_slot_masked               i = Mask($3)
-   69. trace_var                      TraceVar(i) when $28 is true
-   70. label                          label 0x0000000C
-   71. copy_slot_unmasked             $3 = i
-   72. copy_constant                  $4 = 0x41200000 (10.0)
-   73. cmplt_float                    $3 = lessThan($3, $4)
-   74. merge_loop_mask                LoopMask &= $3
-   75. stack_rewind
-   76. branch_if_any_lanes_active     branch_if_any_lanes_active -29 (label 13 at #47)
-   77. label                          label 0x0000000B
-   78. load_loop_mask                 LoopMask = $2
-   79. trace_scope                    TraceScope(-1) when $28 is true
-   80. trace_line                     TraceLine(11) when $28 is true
-   81. zero_slot_unmasked             $2 = 0
-   82. copy_slot_masked               [return_loop].result = Mask($2)
-   83. trace_var                      TraceVar([return_loop].result) when $28 is true
-   84. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
-   85. trace_scope                    TraceScope(-1) when $28 is true
-   86. load_return_mask               RetMask = $1
-   87. trace_exit                     TraceExit(float return_loop(float five)) when $28 is true
-   88. copy_slot_unmasked             $1 = [return_loop].result
-   89. label                          label 0x0000000A
-   90. copy_constant                  $2 = 0x40A00000 (5.0)
-   91. cmpeq_float                    $1 = equal($1, $2)
-   92. zero_slot_unmasked             $19 = 0
-   93. merge_condition_mask           CondMask = $0 & $1
-   94. branch_if_no_lanes_active      branch_if_no_lanes_active +64 (label 9 at #158)
-   95. copy_slot_unmasked             five₂ = five
-   96. trace_var                      TraceVar(five₂) when $28 is true
-   97. trace_enter                    TraceEnter(float continue_loop(float five)) when $28 is true
-   98. trace_scope                    TraceScope(+1) when $28 is true
-   99. trace_line                     TraceLine(17) when $28 is true
-  100. zero_slot_unmasked             sum = 0
-  101. trace_var                      TraceVar(sum) when $28 is true
-  102. trace_scope                    TraceScope(+1) when $28 is true
-  103. trace_line                     TraceLine(18) when $28 is true
-  104. zero_slot_unmasked             i₁ = 0
-  105. trace_var                      TraceVar(i₁) when $28 is true
-  106. store_loop_mask                $20 = LoopMask
-  107. jump                           jump +30 (label 16 at #137)
-  108. label                          label 0x00000011
-  109. zero_slot_unmasked             $88 = 0
-  110. trace_scope                    TraceScope(+1) when $28 is true
-  111. trace_line                     TraceLine(19) when $28 is true
-  112. store_condition_mask           $21 = CondMask
-  113. copy_slot_unmasked             $22 = i₁
-  114. copy_slot_unmasked             $23 = five₂
-  115. cmplt_float                    $22 = lessThan($22, $23)
-  116. merge_condition_mask           CondMask = $21 & $22
-  117. trace_scope                    TraceScope(+1) when $28 is true
-  118. trace_line                     TraceLine(19) when $28 is true
-  119. copy_constant                  $89 = 0xFFFFFFFF
-  120. copy_slot_masked               $88 = Mask($89)
-  121. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
-  122. trace_scope                    TraceScope(-1) when $28 is true
-  123. load_condition_mask            CondMask = $21
-  124. trace_line                     TraceLine(20) when $28 is true
-  125. copy_2_slots_unmasked          $21..22 = sum, i₁
-  126. add_float                      $21 += $22
-  127. copy_slot_masked               sum = Mask($21)
-  128. trace_var                      TraceVar(sum) when $28 is true
-  129. trace_scope                    TraceScope(-1) when $28 is true
-  130. reenable_loop_mask             LoopMask |= $88
-  131. trace_line                     TraceLine(18) when $28 is true
-  132. copy_slot_unmasked             $21 = i₁
-  133. copy_constant                  $22 = 0x3F800000 (1.0)
-  134. add_float                      $21 += $22
-  135. copy_slot_masked               i₁ = Mask($21)
-  136. trace_var                      TraceVar(i₁) when $28 is true
-  137. label                          label 0x00000010
-  138. copy_slot_unmasked             $21 = i₁
-  139. copy_slot_unmasked             $22 = kTen
-  140. cmplt_float                    $21 = lessThan($21, $22)
-  141. merge_loop_mask                LoopMask &= $21
-  142. stack_rewind
-  143. branch_if_any_lanes_active     branch_if_any_lanes_active -35 (label 17 at #108)
-  144. label                          label 0x0000000F
-  145. load_loop_mask                 LoopMask = $20
-  146. trace_scope                    TraceScope(-1) when $28 is true
-  147. trace_line                     TraceLine(22) when $28 is true
-  148. copy_slot_unmasked             $20 = sum
-  149. copy_slot_masked               [continue_loop].result = Mask($20)
-  150. trace_var                      TraceVar([continue_loop].result) when $28 is true
-  151. trace_scope                    TraceScope(-1) when $28 is true
-  152. trace_exit                     TraceExit(float continue_loop(float five)) when $28 is true
-  153. copy_slot_unmasked             $20 = [continue_loop].result
-  154. label                          label 0x0000000E
-  155. copy_constant                  $21 = 0x420C0000 (35.0)
-  156. cmpeq_float                    $20 = equal($20, $21)
-  157. copy_slot_masked               $19 = Mask($20)
-  158. label                          label 0x00000009
-  159. load_condition_mask            CondMask = $0
-  160. zero_slot_unmasked             $73 = 0
-  161. merge_condition_mask           CondMask = $18 & $19
-  162. branch_if_no_lanes_active      branch_if_no_lanes_active +65 (label 8 at #227)
-  163. copy_slot_unmasked             five₃ = five
-  164. trace_var                      TraceVar(five₃) when $28 is true
-  165. trace_enter                    TraceEnter(float break_loop(float five)) when $28 is true
-  166. trace_scope                    TraceScope(+1) when $28 is true
-  167. trace_line                     TraceLine(27) when $28 is true
-  168. zero_slot_unmasked             sum₁ = 0
-  169. trace_var                      TraceVar(sum₁) when $28 is true
-  170. trace_line                     TraceLine(28) when $28 is true
-  171. copy_constant                  kOne = 0x3F800000 (1.0)
-  172. trace_var                      TraceVar(kOne) when $28 is true
-  173. trace_scope                    TraceScope(+1) when $28 is true
-  174. trace_line                     TraceLine(29) when $28 is true
-  175. zero_slot_unmasked             i₂ = 0
-  176. trace_var                      TraceVar(i₂) when $28 is true
-  177. store_loop_mask                $74 = LoopMask
-  178. jump                           jump +28 (label 20 at #206)
-  179. label                          label 0x00000015
-  180. trace_scope                    TraceScope(+1) when $28 is true
-  181. trace_line                     TraceLine(30) when $28 is true
-  182. store_condition_mask           $75 = CondMask
-  183. copy_slot_unmasked             $76 = five₃
-  184. copy_slot_unmasked             $77 = i₂
-  185. cmplt_float                    $76 = lessThan($76, $77)
-  186. merge_condition_mask           CondMask = $75 & $76
-  187. trace_scope                    TraceScope(+1) when $28 is true
-  188. trace_line                     TraceLine(30) when $28 is true
-  189. branch_if_all_lanes_active     branch_if_all_lanes_active +24 (label 19 at #213)
-  190. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
-  191. trace_scope                    TraceScope(-1) when $28 is true
-  192. load_condition_mask            CondMask = $75
-  193. trace_line                     TraceLine(31) when $28 is true
-  194. copy_slot_unmasked             $75 = sum₁
-  195. copy_slot_unmasked             $76 = i₂
-  196. add_float                      $75 += $76
-  197. copy_slot_masked               sum₁ = Mask($75)
-  198. trace_var                      TraceVar(sum₁) when $28 is true
-  199. trace_scope                    TraceScope(-1) when $28 is true
-  200. trace_line                     TraceLine(29) when $28 is true
-  201. copy_slot_unmasked             $75 = i₂
-  202. copy_slot_unmasked             $76 = kOne
-  203. add_float                      $75 += $76
-  204. copy_slot_masked               i₂ = Mask($75)
-  205. trace_var                      TraceVar(i₂) when $28 is true
-  206. label                          label 0x00000014
-  207. copy_slot_unmasked             $75 = i₂
-  208. copy_constant                  $76 = 0x41200000 (10.0)
-  209. cmplt_float                    $75 = lessThan($75, $76)
-  210. merge_loop_mask                LoopMask &= $75
-  211. stack_rewind
-  212. branch_if_any_lanes_active     branch_if_any_lanes_active -33 (label 21 at #179)
-  213. label                          label 0x00000013
-  214. load_loop_mask                 LoopMask = $74
-  215. trace_scope                    TraceScope(-1) when $28 is true
-  216. trace_line                     TraceLine(33) when $28 is true
-  217. copy_slot_unmasked             $74 = sum₁
-  218. copy_slot_masked               [break_loop].result = Mask($74)
-  219. trace_var                      TraceVar([break_loop].result) when $28 is true
-  220. trace_scope                    TraceScope(-1) when $28 is true
-  221. trace_exit                     TraceExit(float break_loop(float five)) when $28 is true
-  222. copy_slot_unmasked             $74 = [break_loop].result
-  223. label                          label 0x00000012
-  224. copy_constant                  $75 = 0x41700000 (15.0)
-  225. cmpeq_float                    $74 = equal($74, $75)
-  226. copy_slot_masked               $73 = Mask($74)
-  227. label                          label 0x00000008
-  228. load_condition_mask            CondMask = $18
-  229. zero_slot_unmasked             $25 = 0
-  230. merge_condition_mask           CondMask = $72 & $73
-  231. branch_if_no_lanes_active      branch_if_no_lanes_active +46 (label 7 at #277)
-  232. trace_enter                    TraceEnter(float float_loop()) when $28 is true
-  233. trace_scope                    TraceScope(+1) when $28 is true
-  234. trace_line                     TraceLine(38) when $28 is true
-  235. zero_slot_unmasked             sum₂ = 0
-  236. trace_var                      TraceVar(sum₂) when $28 is true
-  237. trace_scope                    TraceScope(+1) when $28 is true
-  238. branch_if_no_lanes_active      branch_if_no_lanes_active +23 (label 23 at #261)
-  239. trace_line                     TraceLine(39) when $28 is true
-  240. copy_constant                  i₃ = 0x3DFBE76D (0.123)
-  241. trace_var                      TraceVar(i₃) when $28 is true
-  242. label                          label 0x00000018
-  243. trace_scope                    TraceScope(+1) when $28 is true
-  244. trace_line                     TraceLine(40) when $28 is true
-  245. copy_2_slots_unmasked          $26..27 = sum₂, i₃
-  246. add_float                      $26 += $27
-  247. copy_slot_masked               sum₂ = Mask($26)
-  248. trace_var                      TraceVar(sum₂) when $28 is true
-  249. trace_scope                    TraceScope(-1) when $28 is true
-  250. trace_line                     TraceLine(39) when $28 is true
-  251. copy_slot_unmasked             $26 = i₃
-  252. copy_constant                  $27 = 0x3DE353F8 (0.111)
-  253. add_float                      $26 += $27
-  254. copy_slot_masked               i₃ = Mask($26)
-  255. trace_var                      TraceVar(i₃) when $28 is true
-  256. copy_slot_unmasked             $26 = i₃
-  257. copy_constant                  $27 = 0x3F19999A (0.6)
-  258. cmplt_float                    $26 = lessThan($26, $27)
-  259. stack_rewind
-  260. branch_if_no_active_lanes_eq   branch -18 (label 24 at #242) if no lanes of $26 == 0x00000000 (0.0)
-  261. label                          label 0x00000017
-  262. trace_scope                    TraceScope(-1) when $28 is true
-  263. trace_line                     TraceLine(42) when $28 is true
-  264. copy_slot_unmasked             $26 = sum₂
-  265. copy_constant                  $27 = 0x3FDCCCCD (1.725)
-  266. sub_float                      $26 -= $27
-  267. copy_slot_masked               [float_loop].result = Mask($26)
-  268. trace_var                      TraceVar([float_loop].result) when $28 is true
-  269. trace_scope                    TraceScope(-1) when $28 is true
-  270. trace_exit                     TraceExit(float float_loop()) when $28 is true
-  271. copy_slot_unmasked             $26 = [float_loop].result
-  272. label                          label 0x00000016
-  273. abs_float                      $26 = abs($26)
-  274. copy_constant                  $27 = 0x3CCCCCCD (0.025)
-  275. cmplt_float                    $26 = lessThan($26, $27)
-  276. copy_slot_masked               $25 = Mask($26)
-  277. label                          label 0x00000007
-  278. load_condition_mask            CondMask = $72
-  279. zero_slot_unmasked             $63 = 0
-  280. merge_condition_mask           CondMask = $24 & $25
-  281. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 6 at #332)
-  282. trace_enter                    TraceEnter(bool loop_operator_le()) when $28 is true
-  283. trace_scope                    TraceScope(+1) when $28 is true
-  284. trace_line                     TraceLine(47) when $28 is true
-  285. trace_line                     TraceLine(48) when $28 is true
-  286. trace_line                     TraceLine(50) when $28 is true
-  287. copy_constant                  $64 = 0x41100000 (9.0)
-  288. swizzle_4                      $64..67 = ($64..67).xxxx
-  289. copy_4_slots_unmasked          result = $64..67
-  290. trace_var                      TraceVar(result) when $28 is true
-  291. trace_scope                    TraceScope(+1) when $28 is true
-  292. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 26 at #314)
-  293. trace_line                     TraceLine(51) when $28 is true
-  294. copy_constant                  i₄ = 0x3F800000 (1.0)
-  295. trace_var                      TraceVar(i₄) when $28 is true
-  296. label                          label 0x0000001B
-  297. trace_scope                    TraceScope(+1) when $28 is true
-  298. trace_line                     TraceLine(52) when $28 is true
-  299. copy_4_slots_unmasked          $64..67 = result(1..3), i₄
-  300. copy_4_slots_masked            result = Mask($64..67)
-  301. trace_var                      TraceVar(result) when $28 is true
-  302. trace_scope                    TraceScope(-1) when $28 is true
-  303. trace_line                     TraceLine(51) when $28 is true
-  304. copy_slot_unmasked             $64 = i₄
-  305. copy_constant                  $65 = 0x3F800000 (1.0)
-  306. add_float                      $64 += $65
-  307. copy_slot_masked               i₄ = Mask($64)
-  308. trace_var                      TraceVar(i₄) when $28 is true
-  309. copy_slot_unmasked             $64 = i₄
-  310. copy_constant                  $65 = 0x40400000 (3.0)
-  311. cmple_float                    $64 = lessThanEqual($64, $65)
-  312. stack_rewind
-  313. branch_if_no_active_lanes_eq   branch -17 (label 27 at #296) if no lanes of $64 == 0x00000000 (0.0)
-  314. label                          label 0x0000001A
-  315. trace_scope                    TraceScope(-1) when $28 is true
-  316. trace_line                     TraceLine(54) when $28 is true
-  317. copy_4_slots_unmasked          $64..67 = result
-  318. copy_constant                  $68 = 0x41100000 (9.0)
-  319. copy_constant                  $69 = 0x3F800000 (1.0)
-  320. copy_constant                  $70 = 0x40000000 (2.0)
-  321. copy_constant                  $71 = 0x40400000 (3.0)
-  322. cmpeq_4_floats                 $64..67 = equal($64..67, $68..71)
-  323. bitwise_and_2_ints             $64..65 &= $66..67
-  324. bitwise_and_int                $64 &= $65
-  325. copy_slot_masked               [loop_operator_le].result = Mask($64)
-  326. trace_var                      TraceVar([loop_operator_le].result) when $28 is true
-  327. trace_scope                    TraceScope(-1) when $28 is true
-  328. trace_exit                     TraceExit(bool loop_operator_le()) when $28 is true
-  329. copy_slot_unmasked             $64 = [loop_operator_le].result
-  330. label                          label 0x00000019
-  331. copy_slot_masked               $63 = Mask($64)
-  332. label                          label 0x00000006
-  333. load_condition_mask            CondMask = $24
-  334. zero_slot_unmasked             $79 = 0
-  335. merge_condition_mask           CondMask = $62 & $63
-  336. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 5 at #387)
-  337. trace_enter                    TraceEnter(bool loop_operator_lt()) when $28 is true
-  338. trace_scope                    TraceScope(+1) when $28 is true
-  339. trace_line                     TraceLine(59) when $28 is true
-  340. trace_line                     TraceLine(60) when $28 is true
-  341. trace_line                     TraceLine(62) when $28 is true
-  342. copy_constant                  $80 = 0x41100000 (9.0)
-  343. swizzle_4                      $80..83 = ($80..83).xxxx
-  344. copy_4_slots_unmasked          result₁ = $80..83
-  345. trace_var                      TraceVar(result₁) when $28 is true
-  346. trace_scope                    TraceScope(+1) when $28 is true
-  347. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 29 at #369)
-  348. trace_line                     TraceLine(63) when $28 is true
-  349. copy_constant                  i₅ = 0x3F800000 (1.0)
-  350. trace_var                      TraceVar(i₅) when $28 is true
-  351. label                          label 0x0000001E
-  352. trace_scope                    TraceScope(+1) when $28 is true
-  353. trace_line                     TraceLine(64) when $28 is true
-  354. copy_4_slots_unmasked          $80..83 = result₁(1..3), i₅
-  355. copy_4_slots_masked            result₁ = Mask($80..83)
-  356. trace_var                      TraceVar(result₁) when $28 is true
-  357. trace_scope                    TraceScope(-1) when $28 is true
-  358. trace_line                     TraceLine(63) when $28 is true
-  359. copy_slot_unmasked             $80 = i₅
-  360. copy_constant                  $81 = 0x3F800000 (1.0)
-  361. add_float                      $80 += $81
-  362. copy_slot_masked               i₅ = Mask($80)
-  363. trace_var                      TraceVar(i₅) when $28 is true
-  364. copy_slot_unmasked             $80 = i₅
-  365. copy_constant                  $81 = 0x40800000 (4.0)
-  366. cmplt_float                    $80 = lessThan($80, $81)
-  367. stack_rewind
-  368. branch_if_no_active_lanes_eq   branch -17 (label 30 at #351) if no lanes of $80 == 0x00000000 (0.0)
-  369. label                          label 0x0000001D
-  370. trace_scope                    TraceScope(-1) when $28 is true
-  371. trace_line                     TraceLine(66) when $28 is true
-  372. copy_4_slots_unmasked          $80..83 = result₁
-  373. copy_constant                  $84 = 0x41100000 (9.0)
-  374. copy_constant                  $85 = 0x3F800000 (1.0)
-  375. copy_constant                  $86 = 0x40000000 (2.0)
-  376. copy_constant                  $87 = 0x40400000 (3.0)
-  377. cmpeq_4_floats                 $80..83 = equal($80..83, $84..87)
-  378. bitwise_and_2_ints             $80..81 &= $82..83
-  379. bitwise_and_int                $80 &= $81
-  380. copy_slot_masked               [loop_operator_lt].result = Mask($80)
-  381. trace_var                      TraceVar([loop_operator_lt].result) when $28 is true
-  382. trace_scope                    TraceScope(-1) when $28 is true
-  383. trace_exit                     TraceExit(bool loop_operator_lt()) when $28 is true
-  384. copy_slot_unmasked             $80 = [loop_operator_lt].result
-  385. label                          label 0x0000001C
-  386. copy_slot_masked               $79 = Mask($80)
-  387. label                          label 0x00000005
-  388. load_condition_mask            CondMask = $62
-  389. zero_slot_unmasked             $33 = 0
-  390. merge_condition_mask           CondMask = $78 & $79
-  391. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 4 at #442)
-  392. trace_enter                    TraceEnter(bool loop_operator_ge()) when $28 is true
-  393. trace_scope                    TraceScope(+1) when $28 is true
-  394. trace_line                     TraceLine(71) when $28 is true
-  395. trace_line                     TraceLine(72) when $28 is true
-  396. trace_line                     TraceLine(74) when $28 is true
-  397. copy_constant                  $34 = 0x41100000 (9.0)
-  398. swizzle_4                      $34..37 = ($34..37).xxxx
-  399. copy_4_slots_unmasked          result₂ = $34..37
-  400. trace_var                      TraceVar(result₂) when $28 is true
-  401. trace_scope                    TraceScope(+1) when $28 is true
-  402. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 32 at #424)
-  403. trace_line                     TraceLine(75) when $28 is true
-  404. copy_constant                  i₆ = 0x40400000 (3.0)
-  405. trace_var                      TraceVar(i₆) when $28 is true
-  406. label                          label 0x00000021
-  407. trace_scope                    TraceScope(+1) when $28 is true
-  408. trace_line                     TraceLine(76) when $28 is true
-  409. copy_4_slots_unmasked          $34..37 = result₂(1..3), i₆
-  410. copy_4_slots_masked            result₂ = Mask($34..37)
-  411. trace_var                      TraceVar(result₂) when $28 is true
-  412. trace_scope                    TraceScope(-1) when $28 is true
-  413. trace_line                     TraceLine(75) when $28 is true
-  414. copy_slot_unmasked             $34 = i₆
-  415. copy_constant                  $35 = 0x3F800000 (1.0)
-  416. sub_float                      $34 -= $35
-  417. copy_slot_masked               i₆ = Mask($34)
-  418. trace_var                      TraceVar(i₆) when $28 is true
-  419. copy_constant                  $34 = 0x3F800000 (1.0)
-  420. copy_slot_unmasked             $35 = i₆
-  421. cmple_float                    $34 = lessThanEqual($34, $35)
-  422. stack_rewind
-  423. branch_if_no_active_lanes_eq   branch -17 (label 33 at #406) if no lanes of $34 == 0x00000000 (0.0)
-  424. label                          label 0x00000020
-  425. trace_scope                    TraceScope(-1) when $28 is true
-  426. trace_line                     TraceLine(78) when $28 is true
-  427. copy_4_slots_unmasked          $34..37 = result₂
-  428. copy_constant                  $38 = 0x41100000 (9.0)
-  429. copy_constant                  $39 = 0x40400000 (3.0)
-  430. copy_constant                  $40 = 0x40000000 (2.0)
-  431. copy_constant                  $41 = 0x3F800000 (1.0)
-  432. cmpeq_4_floats                 $34..37 = equal($34..37, $38..41)
-  433. bitwise_and_2_ints             $34..35 &= $36..37
-  434. bitwise_and_int                $34 &= $35
-  435. copy_slot_masked               [loop_operator_ge].result = Mask($34)
-  436. trace_var                      TraceVar([loop_operator_ge].result) when $28 is true
-  437. trace_scope                    TraceScope(-1) when $28 is true
-  438. trace_exit                     TraceExit(bool loop_operator_ge()) when $28 is true
-  439. copy_slot_unmasked             $34 = [loop_operator_ge].result
-  440. label                          label 0x0000001F
-  441. copy_slot_masked               $33 = Mask($34)
-  442. label                          label 0x00000004
-  443. load_condition_mask            CondMask = $78
-  444. zero_slot_unmasked             $53 = 0
-  445. merge_condition_mask           CondMask = $32 & $33
-  446. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 3 at #497)
-  447. trace_enter                    TraceEnter(bool loop_operator_gt()) when $28 is true
-  448. trace_scope                    TraceScope(+1) when $28 is true
-  449. trace_line                     TraceLine(83) when $28 is true
-  450. trace_line                     TraceLine(84) when $28 is true
-  451. trace_line                     TraceLine(86) when $28 is true
-  452. copy_constant                  $54 = 0x41100000 (9.0)
-  453. swizzle_4                      $54..57 = ($54..57).xxxx
-  454. copy_4_slots_unmasked          result₃ = $54..57
-  455. trace_var                      TraceVar(result₃) when $28 is true
-  456. trace_scope                    TraceScope(+1) when $28 is true
-  457. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 35 at #479)
-  458. trace_line                     TraceLine(87) when $28 is true
-  459. copy_constant                  i₇ = 0x40400000 (3.0)
-  460. trace_var                      TraceVar(i₇) when $28 is true
-  461. label                          label 0x00000024
-  462. trace_scope                    TraceScope(+1) when $28 is true
-  463. trace_line                     TraceLine(88) when $28 is true
-  464. copy_4_slots_unmasked          $54..57 = result₃(1..3), i₇
-  465. copy_4_slots_masked            result₃ = Mask($54..57)
-  466. trace_var                      TraceVar(result₃) when $28 is true
-  467. trace_scope                    TraceScope(-1) when $28 is true
-  468. trace_line                     TraceLine(87) when $28 is true
-  469. copy_slot_unmasked             $54 = i₇
-  470. copy_constant                  $55 = 0x3F800000 (1.0)
-  471. sub_float                      $54 -= $55
-  472. copy_slot_masked               i₇ = Mask($54)
-  473. trace_var                      TraceVar(i₇) when $28 is true
-  474. zero_slot_unmasked             $54 = 0
-  475. copy_slot_unmasked             $55 = i₇
-  476. cmplt_float                    $54 = lessThan($54, $55)
-  477. stack_rewind
-  478. branch_if_no_active_lanes_eq   branch -17 (label 36 at #461) if no lanes of $54 == 0x00000000 (0.0)
-  479. label                          label 0x00000023
-  480. trace_scope                    TraceScope(-1) when $28 is true
-  481. trace_line                     TraceLine(90) when $28 is true
-  482. copy_4_slots_unmasked          $54..57 = result₃
-  483. copy_constant                  $58 = 0x41100000 (9.0)
-  484. copy_constant                  $59 = 0x40400000 (3.0)
-  485. copy_constant                  $60 = 0x40000000 (2.0)
-  486. copy_constant                  $61 = 0x3F800000 (1.0)
-  487. cmpeq_4_floats                 $54..57 = equal($54..57, $58..61)
-  488. bitwise_and_2_ints             $54..55 &= $56..57
-  489. bitwise_and_int                $54 &= $55
-  490. copy_slot_masked               [loop_operator_gt].result = Mask($54)
-  491. trace_var                      TraceVar([loop_operator_gt].result) when $28 is true
-  492. trace_scope                    TraceScope(-1) when $28 is true
-  493. trace_exit                     TraceExit(bool loop_operator_gt()) when $28 is true
-  494. copy_slot_unmasked             $54 = [loop_operator_gt].result
-  495. label                          label 0x00000022
-  496. copy_slot_masked               $53 = Mask($54)
-  497. label                          label 0x00000003
-  498. load_condition_mask            CondMask = $32
-  499. zero_slot_unmasked             $43 = 0
-  500. merge_condition_mask           CondMask = $52 & $53
-  501. branch_if_no_lanes_active      branch_if_no_lanes_active +40 (label 2 at #541)
-  502. trace_enter                    TraceEnter(bool loop_operator_eq()) when $28 is true
-  503. trace_scope                    TraceScope(+1) when $28 is true
-  504. trace_line                     TraceLine(106) when $28 is true
-  505. trace_line                     TraceLine(108) when $28 is true
-  506. copy_constant                  $44 = 0x41100000 (9.0)
-  507. swizzle_4                      $44..47 = ($44..47).xxxx
-  508. copy_4_slots_unmasked          result₄ = $44..47
-  509. trace_var                      TraceVar(result₄) when $28 is true
-  510. trace_scope                    TraceScope(+1) when $28 is true
-  511. branch_if_no_lanes_active      branch_if_no_lanes_active +12 (label 38 at #523)
-  512. trace_line                     TraceLine(109) when $28 is true
-  513. copy_constant                  i₈ = 0x3F800000 (1.0)
-  514. trace_var                      TraceVar(i₈) when $28 is true
-  515. label                          label 0x00000027
-  516. trace_scope                    TraceScope(+1) when $28 is true
-  517. trace_line                     TraceLine(110) when $28 is true
-  518. copy_4_slots_unmasked          $44..47 = result₄(1..3), i₈
-  519. copy_4_slots_masked            result₄ = Mask($44..47)
-  520. trace_var                      TraceVar(result₄) when $28 is true
-  521. trace_scope                    TraceScope(-1) when $28 is true
-  522. trace_line                     TraceLine(109) when $28 is true
-  523. label                          label 0x00000026
-  524. trace_scope                    TraceScope(-1) when $28 is true
-  525. trace_line                     TraceLine(112) when $28 is true
-  526. copy_4_slots_unmasked          $44..47 = result₄
-  527. copy_constant                  $48 = 0x41100000 (9.0)
-  528. copy_constant                  $49 = 0x41100000 (9.0)
-  529. copy_constant                  $50 = 0x41100000 (9.0)
-  530. copy_constant                  $51 = 0x3F800000 (1.0)
-  531. cmpeq_4_floats                 $44..47 = equal($44..47, $48..51)
-  532. bitwise_and_2_ints             $44..45 &= $46..47
-  533. bitwise_and_int                $44 &= $45
-  534. copy_slot_masked               [loop_operator_eq].result = Mask($44)
-  535. trace_var                      TraceVar([loop_operator_eq].result) when $28 is true
-  536. trace_scope                    TraceScope(-1) when $28 is true
-  537. trace_exit                     TraceExit(bool loop_operator_eq()) when $28 is true
-  538. copy_slot_unmasked             $44 = [loop_operator_eq].result
-  539. label                          label 0x00000025
-  540. copy_slot_masked               $43 = Mask($44)
-  541. label                          label 0x00000002
-  542. load_condition_mask            CondMask = $52
-  543. zero_slot_unmasked             $6 = 0
-  544. merge_condition_mask           CondMask = $42 & $43
-  545. branch_if_no_lanes_active      branch_if_no_lanes_active +50 (label 1 at #595)
-  546. trace_enter                    TraceEnter(bool loop_operator_ne()) when $28 is true
-  547. trace_scope                    TraceScope(+1) when $28 is true
-  548. trace_line                     TraceLine(95) when $28 is true
-  549. trace_line                     TraceLine(97) when $28 is true
-  550. copy_constant                  $7 = 0x41100000 (9.0)
-  551. swizzle_4                      $7..10 = ($7..10).xxxx
-  552. copy_4_slots_unmasked          result₅ = $7..10
-  553. trace_var                      TraceVar(result₅) when $28 is true
-  554. trace_scope                    TraceScope(+1) when $28 is true
-  555. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 41 at #577)
-  556. trace_line                     TraceLine(98) when $28 is true
-  557. copy_constant                  i₉ = 0x3F800000 (1.0)
-  558. trace_var                      TraceVar(i₉) when $28 is true
-  559. label                          label 0x0000002A
-  560. trace_scope                    TraceScope(+1) when $28 is true
-  561. trace_line                     TraceLine(99) when $28 is true
-  562. copy_4_slots_unmasked          $7..10 = result₅(1..3), i₉
-  563. copy_4_slots_masked            result₅ = Mask($7..10)
-  564. trace_var                      TraceVar(result₅) when $28 is true
-  565. trace_scope                    TraceScope(-1) when $28 is true
-  566. trace_line                     TraceLine(98) when $28 is true
-  567. copy_slot_unmasked             $7 = i₉
-  568. copy_constant                  $8 = 0x3F800000 (1.0)
-  569. add_float                      $7 += $8
-  570. copy_slot_masked               i₉ = Mask($7)
-  571. trace_var                      TraceVar(i₉) when $28 is true
-  572. copy_slot_unmasked             $7 = i₉
-  573. copy_constant                  $8 = 0x40800000 (4.0)
-  574. cmpne_float                    $7 = notEqual($7, $8)
-  575. stack_rewind
-  576. branch_if_no_active_lanes_eq   branch -17 (label 42 at #559) if no lanes of $7 == 0x00000000 (0.0)
-  577. label                          label 0x00000029
-  578. trace_scope                    TraceScope(-1) when $28 is true
-  579. trace_line                     TraceLine(101) when $28 is true
-  580. copy_4_slots_unmasked          $7..10 = result₅
-  581. copy_constant                  $11 = 0x41100000 (9.0)
-  582. copy_constant                  $12 = 0x3F800000 (1.0)
-  583. copy_constant                  $13 = 0x40000000 (2.0)
-  584. copy_constant                  $14 = 0x40400000 (3.0)
-  585. cmpeq_4_floats                 $7..10 = equal($7..10, $11..14)
-  586. bitwise_and_2_ints             $7..8 &= $9..10
-  587. bitwise_and_int                $7 &= $8
-  588. copy_slot_masked               [loop_operator_ne].result = Mask($7)
-  589. trace_var                      TraceVar([loop_operator_ne].result) when $28 is true
-  590. trace_scope                    TraceScope(-1) when $28 is true
-  591. trace_exit                     TraceExit(bool loop_operator_ne()) when $28 is true
-  592. copy_slot_unmasked             $7 = [loop_operator_ne].result
-  593. label                          label 0x00000028
-  594. copy_slot_masked               $6 = Mask($7)
-  595. label                          label 0x00000001
-  596. load_condition_mask            CondMask = $42
-  597. swizzle_4                      $6..9 = ($6..9).xxxx
-  598. copy_4_constants               $10..13 = colorRed
-  599. copy_4_constants               $14..17 = colorGreen
-  600. mix_4_ints                     $6..9 = mix($10..13, $14..17, $6..9)
-  601. copy_4_slots_unmasked          [main].result = $6..9
-  602. trace_var                      TraceVar([main].result) when $28 is true
-  603. trace_scope                    TraceScope(-1) when $28 is true
-  604. trace_exit                     TraceExit(half4 main(float2 pos)) when $28 is true
-  605. load_src                       src.rgba = [main].result
+   11. trace_var                      TraceVar(kTen) when $40 is true
+   12. trace_enter                    TraceEnter(half4 main(float2 pos)) when $40 is true
+   13. trace_var                      TraceVar(pos) when $40 is true
+   14. zero_slot_unmasked             $10 = 0
+   15. copy_slot_unmasked             $11 = $40
+   16. copy_slot_masked               $10 = Mask($11)
+   17. trace_scope                    TraceScope(+1) when $10 is true
+   18. trace_line                     TraceLine(116) when $40 is true
+   19. copy_slot_unmasked             $11 = pos(0)
+   20. copy_constant                  $12 = colorGreen(1)
+   21. max_float                      $11 = max($11, $12)
+   22. copy_constant                  $12 = colorGreen(3)
+   23. min_float                      $11 = min($11, $12)
+   24. copy_constant                  $12 = 0x40A00000 (5.0)
+   25. mul_float                      $11 *= $12
+   26. copy_slot_unmasked             five = $11
+   27. trace_var                      TraceVar(five) when $40 is true
+   28. trace_line                     TraceLine(117) when $40 is true
+   29. store_condition_mask           $55 = CondMask
+   30. store_condition_mask           $66 = CondMask
+   31. store_condition_mask           $44 = CondMask
+   32. store_condition_mask           $98 = CondMask
+   33. store_condition_mask           $77 = CondMask
+   34. store_condition_mask           $33 = CondMask
+   35. store_condition_mask           $88 = CondMask
+   36. store_condition_mask           $23 = CondMask
+   37. store_condition_mask           $0 = CondMask
+   38. branch_if_no_lanes_active      branch_if_no_lanes_active +66 (label 10 at #104)
+   39. copy_slot_unmasked             five₁ = five
+   40. trace_var                      TraceVar(five₁) when $40 is true
+   41. trace_enter                    TraceEnter(float return_loop(float five)) when $40 is true
+   42. store_return_mask              $1 = RetMask
+   43. zero_slot_unmasked             $2 = 0
+   44. copy_slot_unmasked             $3 = $40
+   45. copy_slot_masked               $2 = Mask($3)
+   46. trace_scope                    TraceScope(+1) when $2 is true
+   47. zero_slot_unmasked             $3 = 0
+   48. copy_slot_unmasked             $4 = $40
+   49. copy_slot_masked               $3 = Mask($4)
+   50. trace_scope                    TraceScope(+1) when $3 is true
+   51. trace_line                     TraceLine(8) when $40 is true
+   52. copy_slot_unmasked             i = kZero
+   53. trace_var                      TraceVar(i) when $40 is true
+   54. store_loop_mask                $4 = LoopMask
+   55. jump                           jump +30 (label 12 at #85)
+   56. label                          label 0x0000000D
+   57. zero_slot_unmasked             $5 = 0
+   58. copy_slot_unmasked             $6 = $40
+   59. copy_slot_masked               $5 = Mask($6)
+   60. trace_scope                    TraceScope(+1) when $5 is true
+   61. trace_line                     TraceLine(9) when $40 is true
+   62. store_condition_mask           $6 = CondMask
+   63. copy_slot_unmasked             $7 = i
+   64. copy_slot_unmasked             $8 = five₁
+   65. cmpeq_float                    $7 = equal($7, $8)
+   66. merge_condition_mask           CondMask = $6 & $7
+   67. zero_slot_unmasked             $8 = 0
+   68. copy_slot_unmasked             $9 = $40
+   69. copy_slot_masked               $8 = Mask($9)
+   70. trace_scope                    TraceScope(+1) when $8 is true
+   71. trace_line                     TraceLine(9) when $40 is true
+   72. copy_slot_unmasked             $9 = i
+   73. copy_slot_masked               [return_loop].result = Mask($9)
+   74. trace_var                      TraceVar([return_loop].result) when $40 is true
+   75. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
+   76. trace_scope                    TraceScope(-1) when $8 is true
+   77. load_condition_mask            CondMask = $6
+   78. trace_scope                    TraceScope(-1) when $5 is true
+   79. trace_line                     TraceLine(8) when $40 is true
+   80. copy_slot_unmasked             $5 = i
+   81. copy_constant                  $6 = 0x3F800000 (1.0)
+   82. add_float                      $5 += $6
+   83. copy_slot_masked               i = Mask($5)
+   84. trace_var                      TraceVar(i) when $40 is true
+   85. label                          label 0x0000000C
+   86. copy_slot_unmasked             $5 = i
+   87. copy_constant                  $6 = 0x41200000 (10.0)
+   88. cmplt_float                    $5 = lessThan($5, $6)
+   89. merge_loop_mask                LoopMask &= $5
+   90. stack_rewind
+   91. branch_if_any_lanes_active     branch_if_any_lanes_active -35 (label 13 at #56)
+   92. label                          label 0x0000000B
+   93. load_loop_mask                 LoopMask = $4
+   94. trace_scope                    TraceScope(-1) when $3 is true
+   95. trace_line                     TraceLine(11) when $40 is true
+   96. zero_slot_unmasked             $3 = 0
+   97. copy_slot_masked               [return_loop].result = Mask($3)
+   98. trace_var                      TraceVar([return_loop].result) when $40 is true
+   99. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
+  100. trace_scope                    TraceScope(-1) when $2 is true
+  101. load_return_mask               RetMask = $1
+  102. trace_exit                     TraceExit(float return_loop(float five)) when $40 is true
+  103. copy_slot_unmasked             $1 = [return_loop].result
+  104. label                          label 0x0000000A
+  105. copy_constant                  $2 = 0x40A00000 (5.0)
+  106. cmpeq_float                    $1 = equal($1, $2)
+  107. zero_slot_unmasked             $24 = 0
+  108. merge_condition_mask           CondMask = $0 & $1
+  109. branch_if_no_lanes_active      branch_if_no_lanes_active +76 (label 9 at #185)
+  110. copy_slot_unmasked             five₂ = five
+  111. trace_var                      TraceVar(five₂) when $40 is true
+  112. trace_enter                    TraceEnter(float continue_loop(float five)) when $40 is true
+  113. zero_slot_unmasked             $25 = 0
+  114. copy_slot_unmasked             $26 = $40
+  115. copy_slot_masked               $25 = Mask($26)
+  116. trace_scope                    TraceScope(+1) when $25 is true
+  117. trace_line                     TraceLine(17) when $40 is true
+  118. zero_slot_unmasked             sum = 0
+  119. trace_var                      TraceVar(sum) when $40 is true
+  120. zero_slot_unmasked             $26 = 0
+  121. copy_slot_unmasked             $27 = $40
+  122. copy_slot_masked               $26 = Mask($27)
+  123. trace_scope                    TraceScope(+1) when $26 is true
+  124. trace_line                     TraceLine(18) when $40 is true
+  125. zero_slot_unmasked             i₁ = 0
+  126. trace_var                      TraceVar(i₁) when $40 is true
+  127. store_loop_mask                $27 = LoopMask
+  128. jump                           jump +36 (label 16 at #164)
+  129. label                          label 0x00000011
+  130. zero_slot_unmasked             $109 = 0
+  131. zero_slot_unmasked             $28 = 0
+  132. copy_slot_unmasked             $29 = $40
+  133. copy_slot_masked               $28 = Mask($29)
+  134. trace_scope                    TraceScope(+1) when $28 is true
+  135. trace_line                     TraceLine(19) when $40 is true
+  136. store_condition_mask           $29 = CondMask
+  137. copy_slot_unmasked             $30 = i₁
+  138. copy_slot_unmasked             $31 = five₂
+  139. cmplt_float                    $30 = lessThan($30, $31)
+  140. merge_condition_mask           CondMask = $29 & $30
+  141. zero_slot_unmasked             $31 = 0
+  142. copy_slot_unmasked             $32 = $40
+  143. copy_slot_masked               $31 = Mask($32)
+  144. trace_scope                    TraceScope(+1) when $31 is true
+  145. trace_line                     TraceLine(19) when $40 is true
+  146. copy_constant                  $110 = 0xFFFFFFFF
+  147. copy_slot_masked               $109 = Mask($110)
+  148. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
+  149. trace_scope                    TraceScope(-1) when $31 is true
+  150. load_condition_mask            CondMask = $29
+  151. trace_line                     TraceLine(20) when $40 is true
+  152. copy_2_slots_unmasked          $29..30 = sum, i₁
+  153. add_float                      $29 += $30
+  154. copy_slot_masked               sum = Mask($29)
+  155. trace_var                      TraceVar(sum) when $40 is true
+  156. trace_scope                    TraceScope(-1) when $28 is true
+  157. reenable_loop_mask             LoopMask |= $109
+  158. trace_line                     TraceLine(18) when $40 is true
+  159. copy_slot_unmasked             $28 = i₁
+  160. copy_constant                  $29 = 0x3F800000 (1.0)
+  161. add_float                      $28 += $29
+  162. copy_slot_masked               i₁ = Mask($28)
+  163. trace_var                      TraceVar(i₁) when $40 is true
+  164. label                          label 0x00000010
+  165. copy_slot_unmasked             $28 = i₁
+  166. copy_slot_unmasked             $29 = kTen
+  167. cmplt_float                    $28 = lessThan($28, $29)
+  168. merge_loop_mask                LoopMask &= $28
+  169. stack_rewind
+  170. branch_if_any_lanes_active     branch_if_any_lanes_active -41 (label 17 at #129)
+  171. label                          label 0x0000000F
+  172. load_loop_mask                 LoopMask = $27
+  173. trace_scope                    TraceScope(-1) when $26 is true
+  174. trace_line                     TraceLine(22) when $40 is true
+  175. copy_slot_unmasked             $26 = sum
+  176. copy_slot_masked               [continue_loop].result = Mask($26)
+  177. trace_var                      TraceVar([continue_loop].result) when $40 is true
+  178. trace_scope                    TraceScope(-1) when $25 is true
+  179. trace_exit                     TraceExit(float continue_loop(float five)) when $40 is true
+  180. copy_slot_unmasked             $25 = [continue_loop].result
+  181. label                          label 0x0000000E
+  182. copy_constant                  $26 = 0x420C0000 (35.0)
+  183. cmpeq_float                    $25 = equal($25, $26)
+  184. copy_slot_masked               $24 = Mask($25)
+  185. label                          label 0x00000009
+  186. load_condition_mask            CondMask = $0
+  187. zero_slot_unmasked             $89 = 0
+  188. merge_condition_mask           CondMask = $23 & $24
+  189. branch_if_no_lanes_active      branch_if_no_lanes_active +77 (label 8 at #266)
+  190. copy_slot_unmasked             five₃ = five
+  191. trace_var                      TraceVar(five₃) when $40 is true
+  192. trace_enter                    TraceEnter(float break_loop(float five)) when $40 is true
+  193. zero_slot_unmasked             $90 = 0
+  194. copy_slot_unmasked             $91 = $40
+  195. copy_slot_masked               $90 = Mask($91)
+  196. trace_scope                    TraceScope(+1) when $90 is true
+  197. trace_line                     TraceLine(27) when $40 is true
+  198. zero_slot_unmasked             sum₁ = 0
+  199. trace_var                      TraceVar(sum₁) when $40 is true
+  200. trace_line                     TraceLine(28) when $40 is true
+  201. copy_constant                  kOne = 0x3F800000 (1.0)
+  202. trace_var                      TraceVar(kOne) when $40 is true
+  203. zero_slot_unmasked             $91 = 0
+  204. copy_slot_unmasked             $92 = $40
+  205. copy_slot_masked               $91 = Mask($92)
+  206. trace_scope                    TraceScope(+1) when $91 is true
+  207. trace_line                     TraceLine(29) when $40 is true
+  208. zero_slot_unmasked             i₂ = 0
+  209. trace_var                      TraceVar(i₂) when $40 is true
+  210. store_loop_mask                $92 = LoopMask
+  211. jump                           jump +34 (label 20 at #245)
+  212. label                          label 0x00000015
+  213. zero_slot_unmasked             $93 = 0
+  214. copy_slot_unmasked             $94 = $40
+  215. copy_slot_masked               $93 = Mask($94)
+  216. trace_scope                    TraceScope(+1) when $93 is true
+  217. trace_line                     TraceLine(30) when $40 is true
+  218. store_condition_mask           $94 = CondMask
+  219. copy_slot_unmasked             $95 = five₃
+  220. copy_slot_unmasked             $96 = i₂
+  221. cmplt_float                    $95 = lessThan($95, $96)
+  222. merge_condition_mask           CondMask = $94 & $95
+  223. zero_slot_unmasked             $96 = 0
+  224. copy_slot_unmasked             $97 = $40
+  225. copy_slot_masked               $96 = Mask($97)
+  226. trace_scope                    TraceScope(+1) when $96 is true
+  227. trace_line                     TraceLine(30) when $40 is true
+  228. branch_if_all_lanes_active     branch_if_all_lanes_active +24 (label 19 at #252)
+  229. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
+  230. trace_scope                    TraceScope(-1) when $96 is true
+  231. load_condition_mask            CondMask = $94
+  232. trace_line                     TraceLine(31) when $40 is true
+  233. copy_slot_unmasked             $94 = sum₁
+  234. copy_slot_unmasked             $95 = i₂
+  235. add_float                      $94 += $95
+  236. copy_slot_masked               sum₁ = Mask($94)
+  237. trace_var                      TraceVar(sum₁) when $40 is true
+  238. trace_scope                    TraceScope(-1) when $93 is true
+  239. trace_line                     TraceLine(29) when $40 is true
+  240. copy_slot_unmasked             $93 = i₂
+  241. copy_slot_unmasked             $94 = kOne
+  242. add_float                      $93 += $94
+  243. copy_slot_masked               i₂ = Mask($93)
+  244. trace_var                      TraceVar(i₂) when $40 is true
+  245. label                          label 0x00000014
+  246. copy_slot_unmasked             $93 = i₂
+  247. copy_constant                  $94 = 0x41200000 (10.0)
+  248. cmplt_float                    $93 = lessThan($93, $94)
+  249. merge_loop_mask                LoopMask &= $93
+  250. stack_rewind
+  251. branch_if_any_lanes_active     branch_if_any_lanes_active -39 (label 21 at #212)
+  252. label                          label 0x00000013
+  253. load_loop_mask                 LoopMask = $92
+  254. trace_scope                    TraceScope(-1) when $91 is true
+  255. trace_line                     TraceLine(33) when $40 is true
+  256. copy_slot_unmasked             $91 = sum₁
+  257. copy_slot_masked               [break_loop].result = Mask($91)
+  258. trace_var                      TraceVar([break_loop].result) when $40 is true
+  259. trace_scope                    TraceScope(-1) when $90 is true
+  260. trace_exit                     TraceExit(float break_loop(float five)) when $40 is true
+  261. copy_slot_unmasked             $90 = [break_loop].result
+  262. label                          label 0x00000012
+  263. copy_constant                  $91 = 0x41700000 (15.0)
+  264. cmpeq_float                    $90 = equal($90, $91)
+  265. copy_slot_masked               $89 = Mask($90)
+  266. label                          label 0x00000008
+  267. load_condition_mask            CondMask = $23
+  268. zero_slot_unmasked             $34 = 0
+  269. merge_condition_mask           CondMask = $88 & $89
+  270. branch_if_no_lanes_active      branch_if_no_lanes_active +55 (label 7 at #325)
+  271. trace_enter                    TraceEnter(float float_loop()) when $40 is true
+  272. zero_slot_unmasked             $35 = 0
+  273. copy_slot_unmasked             $36 = $40
+  274. copy_slot_masked               $35 = Mask($36)
+  275. trace_scope                    TraceScope(+1) when $35 is true
+  276. trace_line                     TraceLine(38) when $40 is true
+  277. zero_slot_unmasked             sum₂ = 0
+  278. trace_var                      TraceVar(sum₂) when $40 is true
+  279. zero_slot_unmasked             $36 = 0
+  280. copy_slot_unmasked             $37 = $40
+  281. copy_slot_masked               $36 = Mask($37)
+  282. trace_scope                    TraceScope(+1) when $36 is true
+  283. branch_if_no_lanes_active      branch_if_no_lanes_active +26 (label 23 at #309)
+  284. trace_line                     TraceLine(39) when $40 is true
+  285. copy_constant                  i₃ = 0x3DFBE76D (0.123)
+  286. trace_var                      TraceVar(i₃) when $40 is true
+  287. label                          label 0x00000018
+  288. zero_slot_unmasked             $37 = 0
+  289. copy_slot_unmasked             $38 = $40
+  290. copy_slot_masked               $37 = Mask($38)
+  291. trace_scope                    TraceScope(+1) when $37 is true
+  292. trace_line                     TraceLine(40) when $40 is true
+  293. copy_2_slots_unmasked          $38..39 = sum₂, i₃
+  294. add_float                      $38 += $39
+  295. copy_slot_masked               sum₂ = Mask($38)
+  296. trace_var                      TraceVar(sum₂) when $40 is true
+  297. trace_scope                    TraceScope(-1) when $37 is true
+  298. trace_line                     TraceLine(39) when $40 is true
+  299. copy_slot_unmasked             $37 = i₃
+  300. copy_constant                  $38 = 0x3DE353F8 (0.111)
+  301. add_float                      $37 += $38
+  302. copy_slot_masked               i₃ = Mask($37)
+  303. trace_var                      TraceVar(i₃) when $40 is true
+  304. copy_slot_unmasked             $37 = i₃
+  305. copy_constant                  $38 = 0x3F19999A (0.6)
+  306. cmplt_float                    $37 = lessThan($37, $38)
+  307. stack_rewind
+  308. branch_if_no_active_lanes_eq   branch -21 (label 24 at #287) if no lanes of $37 == 0x00000000 (0.0)
+  309. label                          label 0x00000017
+  310. trace_scope                    TraceScope(-1) when $36 is true
+  311. trace_line                     TraceLine(42) when $40 is true
+  312. copy_slot_unmasked             $36 = sum₂
+  313. copy_constant                  $37 = 0x3FDCCCCD (1.725)
+  314. sub_float                      $36 -= $37
+  315. copy_slot_masked               [float_loop].result = Mask($36)
+  316. trace_var                      TraceVar([float_loop].result) when $40 is true
+  317. trace_scope                    TraceScope(-1) when $35 is true
+  318. trace_exit                     TraceExit(float float_loop()) when $40 is true
+  319. copy_slot_unmasked             $35 = [float_loop].result
+  320. label                          label 0x00000016
+  321. abs_float                      $35 = abs($35)
+  322. copy_constant                  $36 = 0x3CCCCCCD (0.025)
+  323. cmplt_float                    $35 = lessThan($35, $36)
+  324. copy_slot_masked               $34 = Mask($35)
+  325. label                          label 0x00000007
+  326. load_condition_mask            CondMask = $88
+  327. zero_slot_unmasked             $78 = 0
+  328. merge_condition_mask           CondMask = $33 & $34
+  329. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 6 at #389)
+  330. trace_enter                    TraceEnter(bool loop_operator_le()) when $40 is true
+  331. zero_slot_unmasked             $79 = 0
+  332. copy_slot_unmasked             $80 = $40
+  333. copy_slot_masked               $79 = Mask($80)
+  334. trace_scope                    TraceScope(+1) when $79 is true
+  335. trace_line                     TraceLine(47) when $40 is true
+  336. trace_line                     TraceLine(48) when $40 is true
+  337. trace_line                     TraceLine(50) when $40 is true
+  338. copy_constant                  $80 = 0x41100000 (9.0)
+  339. swizzle_4                      $80..83 = ($80..83).xxxx
+  340. copy_4_slots_unmasked          result = $80..83
+  341. trace_var                      TraceVar(result) when $40 is true
+  342. zero_slot_unmasked             $80 = 0
+  343. copy_slot_unmasked             $81 = $40
+  344. copy_slot_masked               $80 = Mask($81)
+  345. trace_scope                    TraceScope(+1) when $80 is true
+  346. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 26 at #371)
+  347. trace_line                     TraceLine(51) when $40 is true
+  348. copy_constant                  i₄ = 0x3F800000 (1.0)
+  349. trace_var                      TraceVar(i₄) when $40 is true
+  350. label                          label 0x0000001B
+  351. zero_slot_unmasked             $81 = 0
+  352. copy_slot_unmasked             $82 = $40
+  353. copy_slot_masked               $81 = Mask($82)
+  354. trace_scope                    TraceScope(+1) when $81 is true
+  355. trace_line                     TraceLine(52) when $40 is true
+  356. copy_4_slots_unmasked          $82..85 = result(1..3), i₄
+  357. copy_4_slots_masked            result = Mask($82..85)
+  358. trace_var                      TraceVar(result) when $40 is true
+  359. trace_scope                    TraceScope(-1) when $81 is true
+  360. trace_line                     TraceLine(51) when $40 is true
+  361. copy_slot_unmasked             $81 = i₄
+  362. copy_constant                  $82 = 0x3F800000 (1.0)
+  363. add_float                      $81 += $82
+  364. copy_slot_masked               i₄ = Mask($81)
+  365. trace_var                      TraceVar(i₄) when $40 is true
+  366. copy_slot_unmasked             $81 = i₄
+  367. copy_constant                  $82 = 0x40400000 (3.0)
+  368. cmple_float                    $81 = lessThanEqual($81, $82)
+  369. stack_rewind
+  370. branch_if_no_active_lanes_eq   branch -20 (label 27 at #350) if no lanes of $81 == 0x00000000 (0.0)
+  371. label                          label 0x0000001A
+  372. trace_scope                    TraceScope(-1) when $80 is true
+  373. trace_line                     TraceLine(54) when $40 is true
+  374. copy_4_slots_unmasked          $80..83 = result
+  375. copy_constant                  $84 = 0x41100000 (9.0)
+  376. copy_constant                  $85 = 0x3F800000 (1.0)
+  377. copy_constant                  $86 = 0x40000000 (2.0)
+  378. copy_constant                  $87 = 0x40400000 (3.0)
+  379. cmpeq_4_floats                 $80..83 = equal($80..83, $84..87)
+  380. bitwise_and_2_ints             $80..81 &= $82..83
+  381. bitwise_and_int                $80 &= $81
+  382. copy_slot_masked               [loop_operator_le].result = Mask($80)
+  383. trace_var                      TraceVar([loop_operator_le].result) when $40 is true
+  384. trace_scope                    TraceScope(-1) when $79 is true
+  385. trace_exit                     TraceExit(bool loop_operator_le()) when $40 is true
+  386. copy_slot_unmasked             $79 = [loop_operator_le].result
+  387. label                          label 0x00000019
+  388. copy_slot_masked               $78 = Mask($79)
+  389. label                          label 0x00000006
+  390. load_condition_mask            CondMask = $33
+  391. zero_slot_unmasked             $99 = 0
+  392. merge_condition_mask           CondMask = $77 & $78
+  393. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 5 at #453)
+  394. trace_enter                    TraceEnter(bool loop_operator_lt()) when $40 is true
+  395. zero_slot_unmasked             $100 = 0
+  396. copy_slot_unmasked             $101 = $40
+  397. copy_slot_masked               $100 = Mask($101)
+  398. trace_scope                    TraceScope(+1) when $100 is true
+  399. trace_line                     TraceLine(59) when $40 is true
+  400. trace_line                     TraceLine(60) when $40 is true
+  401. trace_line                     TraceLine(62) when $40 is true
+  402. copy_constant                  $101 = 0x41100000 (9.0)
+  403. swizzle_4                      $101..104 = ($101..104).xxxx
+  404. copy_4_slots_unmasked          result₁ = $101..104
+  405. trace_var                      TraceVar(result₁) when $40 is true
+  406. zero_slot_unmasked             $101 = 0
+  407. copy_slot_unmasked             $102 = $40
+  408. copy_slot_masked               $101 = Mask($102)
+  409. trace_scope                    TraceScope(+1) when $101 is true
+  410. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 29 at #435)
+  411. trace_line                     TraceLine(63) when $40 is true
+  412. copy_constant                  i₅ = 0x3F800000 (1.0)
+  413. trace_var                      TraceVar(i₅) when $40 is true
+  414. label                          label 0x0000001E
+  415. zero_slot_unmasked             $102 = 0
+  416. copy_slot_unmasked             $103 = $40
+  417. copy_slot_masked               $102 = Mask($103)
+  418. trace_scope                    TraceScope(+1) when $102 is true
+  419. trace_line                     TraceLine(64) when $40 is true
+  420. copy_4_slots_unmasked          $103..106 = result₁(1..3), i₅
+  421. copy_4_slots_masked            result₁ = Mask($103..106)
+  422. trace_var                      TraceVar(result₁) when $40 is true
+  423. trace_scope                    TraceScope(-1) when $102 is true
+  424. trace_line                     TraceLine(63) when $40 is true
+  425. copy_slot_unmasked             $102 = i₅
+  426. copy_constant                  $103 = 0x3F800000 (1.0)
+  427. add_float                      $102 += $103
+  428. copy_slot_masked               i₅ = Mask($102)
+  429. trace_var                      TraceVar(i₅) when $40 is true
+  430. copy_slot_unmasked             $102 = i₅
+  431. copy_constant                  $103 = 0x40800000 (4.0)
+  432. cmplt_float                    $102 = lessThan($102, $103)
+  433. stack_rewind
+  434. branch_if_no_active_lanes_eq   branch -20 (label 30 at #414) if no lanes of $102 == 0x00000000 (0.0)
+  435. label                          label 0x0000001D
+  436. trace_scope                    TraceScope(-1) when $101 is true
+  437. trace_line                     TraceLine(66) when $40 is true
+  438. copy_4_slots_unmasked          $101..104 = result₁
+  439. copy_constant                  $105 = 0x41100000 (9.0)
+  440. copy_constant                  $106 = 0x3F800000 (1.0)
+  441. copy_constant                  $107 = 0x40000000 (2.0)
+  442. copy_constant                  $108 = 0x40400000 (3.0)
+  443. cmpeq_4_floats                 $101..104 = equal($101..104, $105..108)
+  444. bitwise_and_2_ints             $101..102 &= $103..104
+  445. bitwise_and_int                $101 &= $102
+  446. copy_slot_masked               [loop_operator_lt].result = Mask($101)
+  447. trace_var                      TraceVar([loop_operator_lt].result) when $40 is true
+  448. trace_scope                    TraceScope(-1) when $100 is true
+  449. trace_exit                     TraceExit(bool loop_operator_lt()) when $40 is true
+  450. copy_slot_unmasked             $100 = [loop_operator_lt].result
+  451. label                          label 0x0000001C
+  452. copy_slot_masked               $99 = Mask($100)
+  453. label                          label 0x00000005
+  454. load_condition_mask            CondMask = $77
+  455. zero_slot_unmasked             $45 = 0
+  456. merge_condition_mask           CondMask = $98 & $99
+  457. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 4 at #517)
+  458. trace_enter                    TraceEnter(bool loop_operator_ge()) when $40 is true
+  459. zero_slot_unmasked             $46 = 0
+  460. copy_slot_unmasked             $47 = $40
+  461. copy_slot_masked               $46 = Mask($47)
+  462. trace_scope                    TraceScope(+1) when $46 is true
+  463. trace_line                     TraceLine(71) when $40 is true
+  464. trace_line                     TraceLine(72) when $40 is true
+  465. trace_line                     TraceLine(74) when $40 is true
+  466. copy_constant                  $47 = 0x41100000 (9.0)
+  467. swizzle_4                      $47..50 = ($47..50).xxxx
+  468. copy_4_slots_unmasked          result₂ = $47..50
+  469. trace_var                      TraceVar(result₂) when $40 is true
+  470. zero_slot_unmasked             $47 = 0
+  471. copy_slot_unmasked             $48 = $40
+  472. copy_slot_masked               $47 = Mask($48)
+  473. trace_scope                    TraceScope(+1) when $47 is true
+  474. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 32 at #499)
+  475. trace_line                     TraceLine(75) when $40 is true
+  476. copy_constant                  i₆ = 0x40400000 (3.0)
+  477. trace_var                      TraceVar(i₆) when $40 is true
+  478. label                          label 0x00000021
+  479. zero_slot_unmasked             $48 = 0
+  480. copy_slot_unmasked             $49 = $40
+  481. copy_slot_masked               $48 = Mask($49)
+  482. trace_scope                    TraceScope(+1) when $48 is true
+  483. trace_line                     TraceLine(76) when $40 is true
+  484. copy_4_slots_unmasked          $49..52 = result₂(1..3), i₆
+  485. copy_4_slots_masked            result₂ = Mask($49..52)
+  486. trace_var                      TraceVar(result₂) when $40 is true
+  487. trace_scope                    TraceScope(-1) when $48 is true
+  488. trace_line                     TraceLine(75) when $40 is true
+  489. copy_slot_unmasked             $48 = i₆
+  490. copy_constant                  $49 = 0x3F800000 (1.0)
+  491. sub_float                      $48 -= $49
+  492. copy_slot_masked               i₆ = Mask($48)
+  493. trace_var                      TraceVar(i₆) when $40 is true
+  494. copy_constant                  $48 = 0x3F800000 (1.0)
+  495. copy_slot_unmasked             $49 = i₆
+  496. cmple_float                    $48 = lessThanEqual($48, $49)
+  497. stack_rewind
+  498. branch_if_no_active_lanes_eq   branch -20 (label 33 at #478) if no lanes of $48 == 0x00000000 (0.0)
+  499. label                          label 0x00000020
+  500. trace_scope                    TraceScope(-1) when $47 is true
+  501. trace_line                     TraceLine(78) when $40 is true
+  502. copy_4_slots_unmasked          $47..50 = result₂
+  503. copy_constant                  $51 = 0x41100000 (9.0)
+  504. copy_constant                  $52 = 0x40400000 (3.0)
+  505. copy_constant                  $53 = 0x40000000 (2.0)
+  506. copy_constant                  $54 = 0x3F800000 (1.0)
+  507. cmpeq_4_floats                 $47..50 = equal($47..50, $51..54)
+  508. bitwise_and_2_ints             $47..48 &= $49..50
+  509. bitwise_and_int                $47 &= $48
+  510. copy_slot_masked               [loop_operator_ge].result = Mask($47)
+  511. trace_var                      TraceVar([loop_operator_ge].result) when $40 is true
+  512. trace_scope                    TraceScope(-1) when $46 is true
+  513. trace_exit                     TraceExit(bool loop_operator_ge()) when $40 is true
+  514. copy_slot_unmasked             $46 = [loop_operator_ge].result
+  515. label                          label 0x0000001F
+  516. copy_slot_masked               $45 = Mask($46)
+  517. label                          label 0x00000004
+  518. load_condition_mask            CondMask = $98
+  519. zero_slot_unmasked             $67 = 0
+  520. merge_condition_mask           CondMask = $44 & $45
+  521. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 3 at #581)
+  522. trace_enter                    TraceEnter(bool loop_operator_gt()) when $40 is true
+  523. zero_slot_unmasked             $68 = 0
+  524. copy_slot_unmasked             $69 = $40
+  525. copy_slot_masked               $68 = Mask($69)
+  526. trace_scope                    TraceScope(+1) when $68 is true
+  527. trace_line                     TraceLine(83) when $40 is true
+  528. trace_line                     TraceLine(84) when $40 is true
+  529. trace_line                     TraceLine(86) when $40 is true
+  530. copy_constant                  $69 = 0x41100000 (9.0)
+  531. swizzle_4                      $69..72 = ($69..72).xxxx
+  532. copy_4_slots_unmasked          result₃ = $69..72
+  533. trace_var                      TraceVar(result₃) when $40 is true
+  534. zero_slot_unmasked             $69 = 0
+  535. copy_slot_unmasked             $70 = $40
+  536. copy_slot_masked               $69 = Mask($70)
+  537. trace_scope                    TraceScope(+1) when $69 is true
+  538. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 35 at #563)
+  539. trace_line                     TraceLine(87) when $40 is true
+  540. copy_constant                  i₇ = 0x40400000 (3.0)
+  541. trace_var                      TraceVar(i₇) when $40 is true
+  542. label                          label 0x00000024
+  543. zero_slot_unmasked             $70 = 0
+  544. copy_slot_unmasked             $71 = $40
+  545. copy_slot_masked               $70 = Mask($71)
+  546. trace_scope                    TraceScope(+1) when $70 is true
+  547. trace_line                     TraceLine(88) when $40 is true
+  548. copy_4_slots_unmasked          $71..74 = result₃(1..3), i₇
+  549. copy_4_slots_masked            result₃ = Mask($71..74)
+  550. trace_var                      TraceVar(result₃) when $40 is true
+  551. trace_scope                    TraceScope(-1) when $70 is true
+  552. trace_line                     TraceLine(87) when $40 is true
+  553. copy_slot_unmasked             $70 = i₇
+  554. copy_constant                  $71 = 0x3F800000 (1.0)
+  555. sub_float                      $70 -= $71
+  556. copy_slot_masked               i₇ = Mask($70)
+  557. trace_var                      TraceVar(i₇) when $40 is true
+  558. zero_slot_unmasked             $70 = 0
+  559. copy_slot_unmasked             $71 = i₇
+  560. cmplt_float                    $70 = lessThan($70, $71)
+  561. stack_rewind
+  562. branch_if_no_active_lanes_eq   branch -20 (label 36 at #542) if no lanes of $70 == 0x00000000 (0.0)
+  563. label                          label 0x00000023
+  564. trace_scope                    TraceScope(-1) when $69 is true
+  565. trace_line                     TraceLine(90) when $40 is true
+  566. copy_4_slots_unmasked          $69..72 = result₃
+  567. copy_constant                  $73 = 0x41100000 (9.0)
+  568. copy_constant                  $74 = 0x40400000 (3.0)
+  569. copy_constant                  $75 = 0x40000000 (2.0)
+  570. copy_constant                  $76 = 0x3F800000 (1.0)
+  571. cmpeq_4_floats                 $69..72 = equal($69..72, $73..76)
+  572. bitwise_and_2_ints             $69..70 &= $71..72
+  573. bitwise_and_int                $69 &= $70
+  574. copy_slot_masked               [loop_operator_gt].result = Mask($69)
+  575. trace_var                      TraceVar([loop_operator_gt].result) when $40 is true
+  576. trace_scope                    TraceScope(-1) when $68 is true
+  577. trace_exit                     TraceExit(bool loop_operator_gt()) when $40 is true
+  578. copy_slot_unmasked             $68 = [loop_operator_gt].result
+  579. label                          label 0x00000022
+  580. copy_slot_masked               $67 = Mask($68)
+  581. label                          label 0x00000003
+  582. load_condition_mask            CondMask = $44
+  583. zero_slot_unmasked             $56 = 0
+  584. merge_condition_mask           CondMask = $66 & $67
+  585. branch_if_no_lanes_active      branch_if_no_lanes_active +49 (label 2 at #634)
+  586. trace_enter                    TraceEnter(bool loop_operator_eq()) when $40 is true
+  587. zero_slot_unmasked             $57 = 0
+  588. copy_slot_unmasked             $58 = $40
+  589. copy_slot_masked               $57 = Mask($58)
+  590. trace_scope                    TraceScope(+1) when $57 is true
+  591. trace_line                     TraceLine(106) when $40 is true
+  592. trace_line                     TraceLine(108) when $40 is true
+  593. copy_constant                  $58 = 0x41100000 (9.0)
+  594. swizzle_4                      $58..61 = ($58..61).xxxx
+  595. copy_4_slots_unmasked          result₄ = $58..61
+  596. trace_var                      TraceVar(result₄) when $40 is true
+  597. zero_slot_unmasked             $58 = 0
+  598. copy_slot_unmasked             $59 = $40
+  599. copy_slot_masked               $58 = Mask($59)
+  600. trace_scope                    TraceScope(+1) when $58 is true
+  601. branch_if_no_lanes_active      branch_if_no_lanes_active +15 (label 38 at #616)
+  602. trace_line                     TraceLine(109) when $40 is true
+  603. copy_constant                  i₈ = 0x3F800000 (1.0)
+  604. trace_var                      TraceVar(i₈) when $40 is true
+  605. label                          label 0x00000027
+  606. zero_slot_unmasked             $59 = 0
+  607. copy_slot_unmasked             $60 = $40
+  608. copy_slot_masked               $59 = Mask($60)
+  609. trace_scope                    TraceScope(+1) when $59 is true
+  610. trace_line                     TraceLine(110) when $40 is true
+  611. copy_4_slots_unmasked          $60..63 = result₄(1..3), i₈
+  612. copy_4_slots_masked            result₄ = Mask($60..63)
+  613. trace_var                      TraceVar(result₄) when $40 is true
+  614. trace_scope                    TraceScope(-1) when $59 is true
+  615. trace_line                     TraceLine(109) when $40 is true
+  616. label                          label 0x00000026
+  617. trace_scope                    TraceScope(-1) when $58 is true
+  618. trace_line                     TraceLine(112) when $40 is true
+  619. copy_4_slots_unmasked          $58..61 = result₄
+  620. copy_constant                  $62 = 0x41100000 (9.0)
+  621. copy_constant                  $63 = 0x41100000 (9.0)
+  622. copy_constant                  $64 = 0x41100000 (9.0)
+  623. copy_constant                  $65 = 0x3F800000 (1.0)
+  624. cmpeq_4_floats                 $58..61 = equal($58..61, $62..65)
+  625. bitwise_and_2_ints             $58..59 &= $60..61
+  626. bitwise_and_int                $58 &= $59
+  627. copy_slot_masked               [loop_operator_eq].result = Mask($58)
+  628. trace_var                      TraceVar([loop_operator_eq].result) when $40 is true
+  629. trace_scope                    TraceScope(-1) when $57 is true
+  630. trace_exit                     TraceExit(bool loop_operator_eq()) when $40 is true
+  631. copy_slot_unmasked             $57 = [loop_operator_eq].result
+  632. label                          label 0x00000025
+  633. copy_slot_masked               $56 = Mask($57)
+  634. label                          label 0x00000002
+  635. load_condition_mask            CondMask = $66
+  636. zero_slot_unmasked             $11 = 0
+  637. merge_condition_mask           CondMask = $55 & $56
+  638. branch_if_no_lanes_active      branch_if_no_lanes_active +59 (label 1 at #697)
+  639. trace_enter                    TraceEnter(bool loop_operator_ne()) when $40 is true
+  640. zero_slot_unmasked             $12 = 0
+  641. copy_slot_unmasked             $13 = $40
+  642. copy_slot_masked               $12 = Mask($13)
+  643. trace_scope                    TraceScope(+1) when $12 is true
+  644. trace_line                     TraceLine(95) when $40 is true
+  645. trace_line                     TraceLine(97) when $40 is true
+  646. copy_constant                  $13 = 0x41100000 (9.0)
+  647. swizzle_4                      $13..16 = ($13..16).xxxx
+  648. copy_4_slots_unmasked          result₅ = $13..16
+  649. trace_var                      TraceVar(result₅) when $40 is true
+  650. zero_slot_unmasked             $13 = 0
+  651. copy_slot_unmasked             $14 = $40
+  652. copy_slot_masked               $13 = Mask($14)
+  653. trace_scope                    TraceScope(+1) when $13 is true
+  654. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 41 at #679)
+  655. trace_line                     TraceLine(98) when $40 is true
+  656. copy_constant                  i₉ = 0x3F800000 (1.0)
+  657. trace_var                      TraceVar(i₉) when $40 is true
+  658. label                          label 0x0000002A
+  659. zero_slot_unmasked             $14 = 0
+  660. copy_slot_unmasked             $15 = $40
+  661. copy_slot_masked               $14 = Mask($15)
+  662. trace_scope                    TraceScope(+1) when $14 is true
+  663. trace_line                     TraceLine(99) when $40 is true
+  664. copy_4_slots_unmasked          $15..18 = result₅(1..3), i₉
+  665. copy_4_slots_masked            result₅ = Mask($15..18)
+  666. trace_var                      TraceVar(result₅) when $40 is true
+  667. trace_scope                    TraceScope(-1) when $14 is true
+  668. trace_line                     TraceLine(98) when $40 is true
+  669. copy_slot_unmasked             $14 = i₉
+  670. copy_constant                  $15 = 0x3F800000 (1.0)
+  671. add_float                      $14 += $15
+  672. copy_slot_masked               i₉ = Mask($14)
+  673. trace_var                      TraceVar(i₉) when $40 is true
+  674. copy_slot_unmasked             $14 = i₉
+  675. copy_constant                  $15 = 0x40800000 (4.0)
+  676. cmpne_float                    $14 = notEqual($14, $15)
+  677. stack_rewind
+  678. branch_if_no_active_lanes_eq   branch -20 (label 42 at #658) if no lanes of $14 == 0x00000000 (0.0)
+  679. label                          label 0x00000029
+  680. trace_scope                    TraceScope(-1) when $13 is true
+  681. trace_line                     TraceLine(101) when $40 is true
+  682. copy_4_slots_unmasked          $13..16 = result₅
+  683. copy_constant                  $17 = 0x41100000 (9.0)
+  684. copy_constant                  $18 = 0x3F800000 (1.0)
+  685. copy_constant                  $19 = 0x40000000 (2.0)
+  686. copy_constant                  $20 = 0x40400000 (3.0)
+  687. cmpeq_4_floats                 $13..16 = equal($13..16, $17..20)
+  688. bitwise_and_2_ints             $13..14 &= $15..16
+  689. bitwise_and_int                $13 &= $14
+  690. copy_slot_masked               [loop_operator_ne].result = Mask($13)
+  691. trace_var                      TraceVar([loop_operator_ne].result) when $40 is true
+  692. trace_scope                    TraceScope(-1) when $12 is true
+  693. trace_exit                     TraceExit(bool loop_operator_ne()) when $40 is true
+  694. copy_slot_unmasked             $12 = [loop_operator_ne].result
+  695. label                          label 0x00000028
+  696. copy_slot_masked               $11 = Mask($12)
+  697. label                          label 0x00000001
+  698. load_condition_mask            CondMask = $55
+  699. swizzle_4                      $11..14 = ($11..14).xxxx
+  700. copy_4_constants               $15..18 = colorRed
+  701. copy_4_constants               $19..22 = colorGreen
+  702. mix_4_ints                     $11..14 = mix($15..18, $19..22, $11..14)
+  703. copy_4_slots_unmasked          [main].result = $11..14
+  704. trace_var                      TraceVar([main].result) when $40 is true
+  705. trace_scope                    TraceScope(-1) when $10 is true
+  706. trace_exit                     TraceExit(half4 main(float2 pos)) when $40 is true
+  707. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/runtime/LoopInt.skrp b/tests/sksl/runtime/LoopInt.skrp
index 54ebbeb..8c75435 100644
--- a/tests/sksl/runtime/LoopInt.skrp
+++ b/tests/sksl/runtime/LoopInt.skrp
@@ -1,555 +1,648 @@
-    1. store_device_xy01              $26..29 = DeviceCoords.xy01
-    2. copy_constant                  $28 = 0x3F000000 (0.5)
-    3. copy_constant                  $29 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $26..27 = equal($26..27, $28..29)
-    5. bitwise_and_int                $26 &= $27
+    1. store_device_xy01              $35..38 = DeviceCoords.xy01
+    2. copy_constant                  $37 = 0x3F000000 (0.5)
+    3. copy_constant                  $38 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $35..36 = equal($35..36, $37..38)
+    5. bitwise_and_int                $35 &= $36
     6. store_src_rg                   pos = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
     8. zero_slot_unmasked             kZero = 0
-    9. trace_var                      TraceVar(kZero) when $26 is true
+    9. trace_var                      TraceVar(kZero) when $35 is true
    10. copy_constant                  kTen = 0x0000000A (1.401298e-44)
-   11. trace_var                      TraceVar(kTen) when $26 is true
-   12. trace_enter                    TraceEnter(half4 main(float2 pos)) when $26 is true
-   13. trace_var                      TraceVar(pos) when $26 is true
-   14. trace_scope                    TraceScope(+1) when $26 is true
-   15. trace_line                     TraceLine(107) when $26 is true
-   16. copy_slot_unmasked             $2 = pos(0)
-   17. copy_constant                  $3 = colorGreen(1)
-   18. max_float                      $2 = max($2, $3)
-   19. copy_constant                  $3 = colorGreen(3)
-   20. min_float                      $2 = min($2, $3)
-   21. cast_to_int_from_float         $2 = FloatToInt($2)
-   22. copy_constant                  $3 = 0x00000005 (7.006492e-45)
-   23. mul_int                        $2 *= $3
-   24. copy_slot_unmasked             five = $2
-   25. trace_var                      TraceVar(five) when $26 is true
-   26. trace_line                     TraceLine(111) when $26 is true
-   27. store_condition_mask           $40 = CondMask
-   28. store_condition_mask           $50 = CondMask
-   29. store_condition_mask           $30 = CondMask
-   30. store_condition_mask           $76 = CondMask
-   31. store_condition_mask           $60 = CondMask
-   32. store_condition_mask           $20 = CondMask
-   33. store_condition_mask           $70 = CondMask
-   34. store_condition_mask           $14 = CondMask
-   35. branch_if_no_lanes_active      branch_if_no_lanes_active +54 (label 9 at #89)
-   36. copy_slot_unmasked             five₁ = five
-   37. trace_var                      TraceVar(five₁) when $26 is true
-   38. trace_enter                    TraceEnter(int return_loop(int five)) when $26 is true
-   39. store_return_mask              $15 = RetMask
-   40. trace_scope                    TraceScope(+1) when $26 is true
-   41. trace_scope                    TraceScope(+1) when $26 is true
-   42. trace_line                     TraceLine(8) when $26 is true
-   43. copy_slot_unmasked             i = kZero
-   44. trace_var                      TraceVar(i) when $26 is true
-   45. store_loop_mask                $16 = LoopMask
-   46. jump                           jump +24 (label 11 at #70)
-   47. label                          label 0x0000000C
-   48. trace_scope                    TraceScope(+1) when $26 is true
-   49. trace_line                     TraceLine(9) when $26 is true
-   50. store_condition_mask           $17 = CondMask
-   51. copy_slot_unmasked             $18 = i
-   52. copy_slot_unmasked             $19 = five₁
-   53. cmpeq_int                      $18 = equal($18, $19)
-   54. merge_condition_mask           CondMask = $17 & $18
-   55. trace_scope                    TraceScope(+1) when $26 is true
-   56. trace_line                     TraceLine(9) when $26 is true
-   57. copy_slot_unmasked             $19 = i
-   58. copy_slot_masked               [return_loop].result = Mask($19)
-   59. trace_var                      TraceVar([return_loop].result) when $26 is true
-   60. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
-   61. trace_scope                    TraceScope(-1) when $26 is true
-   62. load_condition_mask            CondMask = $17
-   63. trace_scope                    TraceScope(-1) when $26 is true
-   64. trace_line                     TraceLine(8) when $26 is true
-   65. copy_slot_unmasked             $17 = i
-   66. copy_constant                  $18 = 0x00000001 (1.401298e-45)
-   67. add_int                        $17 += $18
-   68. copy_slot_masked               i = Mask($17)
-   69. trace_var                      TraceVar(i) when $26 is true
-   70. label                          label 0x0000000B
-   71. copy_slot_unmasked             $17 = i
-   72. copy_constant                  $18 = 0x0000000A (1.401298e-44)
-   73. cmplt_int                      $17 = lessThan($17, $18)
-   74. merge_loop_mask                LoopMask &= $17
-   75. stack_rewind
-   76. branch_if_any_lanes_active     branch_if_any_lanes_active -29 (label 12 at #47)
-   77. label                          label 0x0000000A
-   78. load_loop_mask                 LoopMask = $16
-   79. trace_scope                    TraceScope(-1) when $26 is true
-   80. trace_line                     TraceLine(11) when $26 is true
-   81. zero_slot_unmasked             $16 = 0
-   82. copy_slot_masked               [return_loop].result = Mask($16)
-   83. trace_var                      TraceVar([return_loop].result) when $26 is true
-   84. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
-   85. trace_scope                    TraceScope(-1) when $26 is true
-   86. load_return_mask               RetMask = $15
-   87. trace_exit                     TraceExit(int return_loop(int five)) when $26 is true
-   88. copy_slot_unmasked             $15 = [return_loop].result
-   89. label                          label 0x00000009
-   90. copy_constant                  $16 = 0x00000005 (7.006492e-45)
-   91. cmpeq_int                      $15 = equal($15, $16)
-   92. zero_slot_unmasked             $71 = 0
-   93. merge_condition_mask           CondMask = $14 & $15
-   94. branch_if_no_lanes_active      branch_if_no_lanes_active +64 (label 8 at #158)
-   95. copy_slot_unmasked             five₂ = five
-   96. trace_var                      TraceVar(five₂) when $26 is true
-   97. trace_enter                    TraceEnter(int continue_loop(int five)) when $26 is true
-   98. trace_scope                    TraceScope(+1) when $26 is true
-   99. trace_line                     TraceLine(17) when $26 is true
-  100. zero_slot_unmasked             sum = 0
-  101. trace_var                      TraceVar(sum) when $26 is true
-  102. trace_scope                    TraceScope(+1) when $26 is true
-  103. trace_line                     TraceLine(18) when $26 is true
-  104. zero_slot_unmasked             i₁ = 0
-  105. trace_var                      TraceVar(i₁) when $26 is true
-  106. store_loop_mask                $72 = LoopMask
-  107. jump                           jump +30 (label 15 at #137)
-  108. label                          label 0x00000010
-  109. zero_slot_unmasked             $0 = 0
-  110. trace_scope                    TraceScope(+1) when $26 is true
-  111. trace_line                     TraceLine(19) when $26 is true
-  112. store_condition_mask           $73 = CondMask
-  113. copy_slot_unmasked             $74 = i₁
-  114. copy_slot_unmasked             $75 = five₂
-  115. cmplt_int                      $74 = lessThan($74, $75)
-  116. merge_condition_mask           CondMask = $73 & $74
-  117. trace_scope                    TraceScope(+1) when $26 is true
-  118. trace_line                     TraceLine(19) when $26 is true
-  119. copy_constant                  $1 = 0xFFFFFFFF
-  120. copy_slot_masked               $0 = Mask($1)
-  121. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
-  122. trace_scope                    TraceScope(-1) when $26 is true
-  123. load_condition_mask            CondMask = $73
-  124. trace_line                     TraceLine(20) when $26 is true
-  125. copy_2_slots_unmasked          $73..74 = sum, i₁
-  126. add_int                        $73 += $74
-  127. copy_slot_masked               sum = Mask($73)
-  128. trace_var                      TraceVar(sum) when $26 is true
-  129. trace_scope                    TraceScope(-1) when $26 is true
-  130. reenable_loop_mask             LoopMask |= $0
-  131. trace_line                     TraceLine(18) when $26 is true
-  132. copy_slot_unmasked             $73 = i₁
-  133. copy_constant                  $74 = 0x00000001 (1.401298e-45)
-  134. add_int                        $73 += $74
-  135. copy_slot_masked               i₁ = Mask($73)
-  136. trace_var                      TraceVar(i₁) when $26 is true
-  137. label                          label 0x0000000F
-  138. copy_slot_unmasked             $73 = i₁
-  139. copy_slot_unmasked             $74 = kTen
-  140. cmplt_int                      $73 = lessThan($73, $74)
-  141. merge_loop_mask                LoopMask &= $73
-  142. stack_rewind
-  143. branch_if_any_lanes_active     branch_if_any_lanes_active -35 (label 16 at #108)
-  144. label                          label 0x0000000E
-  145. load_loop_mask                 LoopMask = $72
-  146. trace_scope                    TraceScope(-1) when $26 is true
-  147. trace_line                     TraceLine(22) when $26 is true
-  148. copy_slot_unmasked             $72 = sum
-  149. copy_slot_masked               [continue_loop].result = Mask($72)
-  150. trace_var                      TraceVar([continue_loop].result) when $26 is true
-  151. trace_scope                    TraceScope(-1) when $26 is true
-  152. trace_exit                     TraceExit(int continue_loop(int five)) when $26 is true
-  153. copy_slot_unmasked             $72 = [continue_loop].result
-  154. label                          label 0x0000000D
-  155. copy_constant                  $73 = 0x00000023 (4.904545e-44)
-  156. cmpeq_int                      $72 = equal($72, $73)
-  157. copy_slot_masked               $71 = Mask($72)
-  158. label                          label 0x00000008
-  159. load_condition_mask            CondMask = $14
-  160. zero_slot_unmasked             $21 = 0
-  161. merge_condition_mask           CondMask = $70 & $71
-  162. branch_if_no_lanes_active      branch_if_no_lanes_active +65 (label 7 at #227)
-  163. copy_constant                  five₃ = 0x00000005 (7.006492e-45)
-  164. trace_var                      TraceVar(five₃) when $26 is true
-  165. trace_enter                    TraceEnter(int break_loop(int five)) when $26 is true
-  166. trace_scope                    TraceScope(+1) when $26 is true
-  167. trace_line                     TraceLine(27) when $26 is true
-  168. zero_slot_unmasked             sum₁ = 0
-  169. trace_var                      TraceVar(sum₁) when $26 is true
-  170. trace_line                     TraceLine(28) when $26 is true
-  171. copy_constant                  kOne = 0x00000001 (1.401298e-45)
-  172. trace_var                      TraceVar(kOne) when $26 is true
-  173. trace_scope                    TraceScope(+1) when $26 is true
-  174. trace_line                     TraceLine(29) when $26 is true
-  175. zero_slot_unmasked             i₂ = 0
-  176. trace_var                      TraceVar(i₂) when $26 is true
-  177. store_loop_mask                $22 = LoopMask
-  178. jump                           jump +28 (label 19 at #206)
-  179. label                          label 0x00000014
-  180. trace_scope                    TraceScope(+1) when $26 is true
-  181. trace_line                     TraceLine(30) when $26 is true
-  182. store_condition_mask           $23 = CondMask
-  183. copy_slot_unmasked             $24 = five₃
-  184. copy_slot_unmasked             $25 = i₂
-  185. cmplt_int                      $24 = lessThan($24, $25)
-  186. merge_condition_mask           CondMask = $23 & $24
-  187. trace_scope                    TraceScope(+1) when $26 is true
-  188. trace_line                     TraceLine(30) when $26 is true
-  189. branch_if_all_lanes_active     branch_if_all_lanes_active +24 (label 18 at #213)
-  190. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
-  191. trace_scope                    TraceScope(-1) when $26 is true
-  192. load_condition_mask            CondMask = $23
-  193. trace_line                     TraceLine(31) when $26 is true
-  194. copy_slot_unmasked             $23 = sum₁
-  195. copy_slot_unmasked             $24 = i₂
-  196. add_int                        $23 += $24
-  197. copy_slot_masked               sum₁ = Mask($23)
-  198. trace_var                      TraceVar(sum₁) when $26 is true
-  199. trace_scope                    TraceScope(-1) when $26 is true
-  200. trace_line                     TraceLine(29) when $26 is true
-  201. copy_slot_unmasked             $23 = i₂
-  202. copy_slot_unmasked             $24 = kOne
-  203. add_int                        $23 += $24
-  204. copy_slot_masked               i₂ = Mask($23)
-  205. trace_var                      TraceVar(i₂) when $26 is true
-  206. label                          label 0x00000013
-  207. copy_slot_unmasked             $23 = i₂
-  208. copy_constant                  $24 = 0x0000000A (1.401298e-44)
-  209. cmplt_int                      $23 = lessThan($23, $24)
-  210. merge_loop_mask                LoopMask &= $23
-  211. stack_rewind
-  212. branch_if_any_lanes_active     branch_if_any_lanes_active -33 (label 20 at #179)
-  213. label                          label 0x00000012
-  214. load_loop_mask                 LoopMask = $22
-  215. trace_scope                    TraceScope(-1) when $26 is true
-  216. trace_line                     TraceLine(33) when $26 is true
-  217. copy_slot_unmasked             $22 = sum₁
-  218. copy_slot_masked               [break_loop].result = Mask($22)
-  219. trace_var                      TraceVar([break_loop].result) when $26 is true
-  220. trace_scope                    TraceScope(-1) when $26 is true
-  221. trace_exit                     TraceExit(int break_loop(int five)) when $26 is true
-  222. copy_slot_unmasked             $22 = [break_loop].result
-  223. label                          label 0x00000011
-  224. copy_constant                  $23 = 0x0000000F (2.101948e-44)
-  225. cmpeq_int                      $22 = equal($22, $23)
-  226. copy_slot_masked               $21 = Mask($22)
-  227. label                          label 0x00000007
-  228. load_condition_mask            CondMask = $70
-  229. zero_slot_unmasked             $61 = 0
-  230. merge_condition_mask           CondMask = $20 & $21
-  231. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 6 at #282)
-  232. trace_enter                    TraceEnter(bool loop_operator_le()) when $26 is true
-  233. trace_scope                    TraceScope(+1) when $26 is true
-  234. trace_line                     TraceLine(38) when $26 is true
-  235. trace_line                     TraceLine(39) when $26 is true
-  236. trace_line                     TraceLine(41) when $26 is true
-  237. copy_constant                  $62 = 0x00000009 (1.261169e-44)
-  238. swizzle_4                      $62..65 = ($62..65).xxxx
-  239. copy_4_slots_unmasked          result = $62..65
-  240. trace_var                      TraceVar(result) when $26 is true
-  241. trace_scope                    TraceScope(+1) when $26 is true
-  242. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 22 at #264)
-  243. trace_line                     TraceLine(42) when $26 is true
-  244. copy_constant                  i₃ = 0x00000001 (1.401298e-45)
-  245. trace_var                      TraceVar(i₃) when $26 is true
-  246. label                          label 0x00000017
-  247. trace_scope                    TraceScope(+1) when $26 is true
-  248. trace_line                     TraceLine(43) when $26 is true
-  249. copy_4_slots_unmasked          $62..65 = result(1..3), i₃
-  250. copy_4_slots_masked            result = Mask($62..65)
-  251. trace_var                      TraceVar(result) when $26 is true
-  252. trace_scope                    TraceScope(-1) when $26 is true
-  253. trace_line                     TraceLine(42) when $26 is true
-  254. copy_slot_unmasked             $62 = i₃
-  255. copy_constant                  $63 = 0x00000001 (1.401298e-45)
-  256. add_int                        $62 += $63
-  257. copy_slot_masked               i₃ = Mask($62)
-  258. trace_var                      TraceVar(i₃) when $26 is true
-  259. copy_slot_unmasked             $62 = i₃
-  260. copy_constant                  $63 = 0x00000003 (4.203895e-45)
-  261. cmple_int                      $62 = lessThanEqual($62, $63)
-  262. stack_rewind
-  263. branch_if_no_active_lanes_eq   branch -17 (label 23 at #246) if no lanes of $62 == 0x00000000 (0.0)
-  264. label                          label 0x00000016
-  265. trace_scope                    TraceScope(-1) when $26 is true
-  266. trace_line                     TraceLine(45) when $26 is true
-  267. copy_4_slots_unmasked          $62..65 = result
-  268. copy_constant                  $66 = 0x00000009 (1.261169e-44)
-  269. copy_constant                  $67 = 0x00000001 (1.401298e-45)
-  270. copy_constant                  $68 = 0x00000002 (2.802597e-45)
-  271. copy_constant                  $69 = 0x00000003 (4.203895e-45)
-  272. cmpeq_4_ints                   $62..65 = equal($62..65, $66..69)
-  273. bitwise_and_2_ints             $62..63 &= $64..65
-  274. bitwise_and_int                $62 &= $63
-  275. copy_slot_masked               [loop_operator_le].result = Mask($62)
-  276. trace_var                      TraceVar([loop_operator_le].result) when $26 is true
-  277. trace_scope                    TraceScope(-1) when $26 is true
-  278. trace_exit                     TraceExit(bool loop_operator_le()) when $26 is true
-  279. copy_slot_unmasked             $62 = [loop_operator_le].result
-  280. label                          label 0x00000015
-  281. copy_slot_masked               $61 = Mask($62)
-  282. label                          label 0x00000006
-  283. load_condition_mask            CondMask = $20
-  284. zero_slot_unmasked             $77 = 0
-  285. merge_condition_mask           CondMask = $60 & $61
-  286. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 5 at #337)
-  287. trace_enter                    TraceEnter(bool loop_operator_lt()) when $26 is true
-  288. trace_scope                    TraceScope(+1) when $26 is true
-  289. trace_line                     TraceLine(50) when $26 is true
-  290. trace_line                     TraceLine(51) when $26 is true
-  291. trace_line                     TraceLine(53) when $26 is true
-  292. copy_constant                  $78 = 0x00000009 (1.261169e-44)
-  293. swizzle_4                      $78..81 = ($78..81).xxxx
-  294. copy_4_slots_unmasked          result₁ = $78..81
-  295. trace_var                      TraceVar(result₁) when $26 is true
-  296. trace_scope                    TraceScope(+1) when $26 is true
-  297. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 25 at #319)
-  298. trace_line                     TraceLine(54) when $26 is true
-  299. copy_constant                  i₄ = 0x00000001 (1.401298e-45)
-  300. trace_var                      TraceVar(i₄) when $26 is true
-  301. label                          label 0x0000001A
-  302. trace_scope                    TraceScope(+1) when $26 is true
-  303. trace_line                     TraceLine(55) when $26 is true
-  304. copy_4_slots_unmasked          $78..81 = result₁(1..3), i₄
-  305. copy_4_slots_masked            result₁ = Mask($78..81)
-  306. trace_var                      TraceVar(result₁) when $26 is true
-  307. trace_scope                    TraceScope(-1) when $26 is true
-  308. trace_line                     TraceLine(54) when $26 is true
-  309. copy_slot_unmasked             $78 = i₄
-  310. copy_constant                  $79 = 0x00000001 (1.401298e-45)
-  311. add_int                        $78 += $79
-  312. copy_slot_masked               i₄ = Mask($78)
-  313. trace_var                      TraceVar(i₄) when $26 is true
-  314. copy_slot_unmasked             $78 = i₄
-  315. copy_constant                  $79 = 0x00000004 (5.605194e-45)
-  316. cmplt_int                      $78 = lessThan($78, $79)
-  317. stack_rewind
-  318. branch_if_no_active_lanes_eq   branch -17 (label 26 at #301) if no lanes of $78 == 0x00000000 (0.0)
-  319. label                          label 0x00000019
-  320. trace_scope                    TraceScope(-1) when $26 is true
-  321. trace_line                     TraceLine(57) when $26 is true
-  322. copy_4_slots_unmasked          $78..81 = result₁
-  323. copy_constant                  $82 = 0x00000009 (1.261169e-44)
-  324. copy_constant                  $83 = 0x00000001 (1.401298e-45)
-  325. copy_constant                  $84 = 0x00000002 (2.802597e-45)
-  326. copy_constant                  $85 = 0x00000003 (4.203895e-45)
-  327. cmpeq_4_ints                   $78..81 = equal($78..81, $82..85)
-  328. bitwise_and_2_ints             $78..79 &= $80..81
-  329. bitwise_and_int                $78 &= $79
-  330. copy_slot_masked               [loop_operator_lt].result = Mask($78)
-  331. trace_var                      TraceVar([loop_operator_lt].result) when $26 is true
-  332. trace_scope                    TraceScope(-1) when $26 is true
-  333. trace_exit                     TraceExit(bool loop_operator_lt()) when $26 is true
-  334. copy_slot_unmasked             $78 = [loop_operator_lt].result
-  335. label                          label 0x00000018
-  336. copy_slot_masked               $77 = Mask($78)
-  337. label                          label 0x00000005
-  338. load_condition_mask            CondMask = $60
-  339. zero_slot_unmasked             $31 = 0
-  340. merge_condition_mask           CondMask = $76 & $77
-  341. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 4 at #392)
-  342. trace_enter                    TraceEnter(bool loop_operator_ge()) when $26 is true
-  343. trace_scope                    TraceScope(+1) when $26 is true
-  344. trace_line                     TraceLine(62) when $26 is true
-  345. trace_line                     TraceLine(63) when $26 is true
-  346. trace_line                     TraceLine(65) when $26 is true
-  347. copy_constant                  $32 = 0x00000009 (1.261169e-44)
-  348. swizzle_4                      $32..35 = ($32..35).xxxx
-  349. copy_4_slots_unmasked          result₂ = $32..35
-  350. trace_var                      TraceVar(result₂) when $26 is true
-  351. trace_scope                    TraceScope(+1) when $26 is true
-  352. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 28 at #374)
-  353. trace_line                     TraceLine(66) when $26 is true
-  354. copy_constant                  i₅ = 0x00000003 (4.203895e-45)
-  355. trace_var                      TraceVar(i₅) when $26 is true
-  356. label                          label 0x0000001D
-  357. trace_scope                    TraceScope(+1) when $26 is true
-  358. trace_line                     TraceLine(67) when $26 is true
-  359. copy_4_slots_unmasked          $32..35 = result₂(1..3), i₅
-  360. copy_4_slots_masked            result₂ = Mask($32..35)
-  361. trace_var                      TraceVar(result₂) when $26 is true
-  362. trace_scope                    TraceScope(-1) when $26 is true
-  363. trace_line                     TraceLine(66) when $26 is true
-  364. copy_slot_unmasked             $32 = i₅
-  365. copy_constant                  $33 = 0x00000001 (1.401298e-45)
-  366. sub_int                        $32 -= $33
-  367. copy_slot_masked               i₅ = Mask($32)
-  368. trace_var                      TraceVar(i₅) when $26 is true
-  369. copy_constant                  $32 = 0x00000001 (1.401298e-45)
-  370. copy_slot_unmasked             $33 = i₅
-  371. cmple_int                      $32 = lessThanEqual($32, $33)
-  372. stack_rewind
-  373. branch_if_no_active_lanes_eq   branch -17 (label 29 at #356) if no lanes of $32 == 0x00000000 (0.0)
-  374. label                          label 0x0000001C
-  375. trace_scope                    TraceScope(-1) when $26 is true
-  376. trace_line                     TraceLine(69) when $26 is true
-  377. copy_4_slots_unmasked          $32..35 = result₂
-  378. copy_constant                  $36 = 0x00000009 (1.261169e-44)
-  379. copy_constant                  $37 = 0x00000003 (4.203895e-45)
-  380. copy_constant                  $38 = 0x00000002 (2.802597e-45)
-  381. copy_constant                  $39 = 0x00000001 (1.401298e-45)
-  382. cmpeq_4_ints                   $32..35 = equal($32..35, $36..39)
-  383. bitwise_and_2_ints             $32..33 &= $34..35
-  384. bitwise_and_int                $32 &= $33
-  385. copy_slot_masked               [loop_operator_ge].result = Mask($32)
-  386. trace_var                      TraceVar([loop_operator_ge].result) when $26 is true
-  387. trace_scope                    TraceScope(-1) when $26 is true
-  388. trace_exit                     TraceExit(bool loop_operator_ge()) when $26 is true
-  389. copy_slot_unmasked             $32 = [loop_operator_ge].result
-  390. label                          label 0x0000001B
-  391. copy_slot_masked               $31 = Mask($32)
-  392. label                          label 0x00000004
-  393. load_condition_mask            CondMask = $76
-  394. zero_slot_unmasked             $51 = 0
-  395. merge_condition_mask           CondMask = $30 & $31
-  396. branch_if_no_lanes_active      branch_if_no_lanes_active +51 (label 3 at #447)
-  397. trace_enter                    TraceEnter(bool loop_operator_gt()) when $26 is true
-  398. trace_scope                    TraceScope(+1) when $26 is true
-  399. trace_line                     TraceLine(74) when $26 is true
-  400. trace_line                     TraceLine(75) when $26 is true
-  401. trace_line                     TraceLine(77) when $26 is true
-  402. copy_constant                  $52 = 0x00000009 (1.261169e-44)
-  403. swizzle_4                      $52..55 = ($52..55).xxxx
-  404. copy_4_slots_unmasked          result₃ = $52..55
-  405. trace_var                      TraceVar(result₃) when $26 is true
-  406. trace_scope                    TraceScope(+1) when $26 is true
-  407. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 31 at #429)
-  408. trace_line                     TraceLine(78) when $26 is true
-  409. copy_constant                  i₆ = 0x00000003 (4.203895e-45)
-  410. trace_var                      TraceVar(i₆) when $26 is true
-  411. label                          label 0x00000020
-  412. trace_scope                    TraceScope(+1) when $26 is true
-  413. trace_line                     TraceLine(79) when $26 is true
-  414. copy_4_slots_unmasked          $52..55 = result₃(1..3), i₆
-  415. copy_4_slots_masked            result₃ = Mask($52..55)
-  416. trace_var                      TraceVar(result₃) when $26 is true
-  417. trace_scope                    TraceScope(-1) when $26 is true
-  418. trace_line                     TraceLine(78) when $26 is true
-  419. copy_slot_unmasked             $52 = i₆
-  420. copy_constant                  $53 = 0x00000001 (1.401298e-45)
-  421. sub_int                        $52 -= $53
-  422. copy_slot_masked               i₆ = Mask($52)
-  423. trace_var                      TraceVar(i₆) when $26 is true
-  424. zero_slot_unmasked             $52 = 0
-  425. copy_slot_unmasked             $53 = i₆
-  426. cmplt_int                      $52 = lessThan($52, $53)
-  427. stack_rewind
-  428. branch_if_no_active_lanes_eq   branch -17 (label 32 at #411) if no lanes of $52 == 0x00000000 (0.0)
-  429. label                          label 0x0000001F
-  430. trace_scope                    TraceScope(-1) when $26 is true
-  431. trace_line                     TraceLine(81) when $26 is true
-  432. copy_4_slots_unmasked          $52..55 = result₃
-  433. copy_constant                  $56 = 0x00000009 (1.261169e-44)
-  434. copy_constant                  $57 = 0x00000003 (4.203895e-45)
-  435. copy_constant                  $58 = 0x00000002 (2.802597e-45)
-  436. copy_constant                  $59 = 0x00000001 (1.401298e-45)
-  437. cmpeq_4_ints                   $52..55 = equal($52..55, $56..59)
-  438. bitwise_and_2_ints             $52..53 &= $54..55
-  439. bitwise_and_int                $52 &= $53
-  440. copy_slot_masked               [loop_operator_gt].result = Mask($52)
-  441. trace_var                      TraceVar([loop_operator_gt].result) when $26 is true
-  442. trace_scope                    TraceScope(-1) when $26 is true
-  443. trace_exit                     TraceExit(bool loop_operator_gt()) when $26 is true
-  444. copy_slot_unmasked             $52 = [loop_operator_gt].result
-  445. label                          label 0x0000001E
-  446. copy_slot_masked               $51 = Mask($52)
-  447. label                          label 0x00000003
-  448. load_condition_mask            CondMask = $30
-  449. zero_slot_unmasked             $41 = 0
-  450. merge_condition_mask           CondMask = $50 & $51
-  451. branch_if_no_lanes_active      branch_if_no_lanes_active +40 (label 2 at #491)
-  452. trace_enter                    TraceEnter(bool loop_operator_eq()) when $26 is true
-  453. trace_scope                    TraceScope(+1) when $26 is true
-  454. trace_line                     TraceLine(97) when $26 is true
-  455. trace_line                     TraceLine(99) when $26 is true
-  456. copy_constant                  $42 = 0x00000009 (1.261169e-44)
-  457. swizzle_4                      $42..45 = ($42..45).xxxx
-  458. copy_4_slots_unmasked          result₄ = $42..45
-  459. trace_var                      TraceVar(result₄) when $26 is true
-  460. trace_scope                    TraceScope(+1) when $26 is true
-  461. branch_if_no_lanes_active      branch_if_no_lanes_active +12 (label 34 at #473)
-  462. trace_line                     TraceLine(100) when $26 is true
-  463. copy_constant                  i₇ = 0x00000001 (1.401298e-45)
-  464. trace_var                      TraceVar(i₇) when $26 is true
-  465. label                          label 0x00000023
-  466. trace_scope                    TraceScope(+1) when $26 is true
-  467. trace_line                     TraceLine(101) when $26 is true
-  468. copy_4_slots_unmasked          $42..45 = result₄(1..3), i₇
-  469. copy_4_slots_masked            result₄ = Mask($42..45)
-  470. trace_var                      TraceVar(result₄) when $26 is true
-  471. trace_scope                    TraceScope(-1) when $26 is true
-  472. trace_line                     TraceLine(100) when $26 is true
-  473. label                          label 0x00000022
-  474. trace_scope                    TraceScope(-1) when $26 is true
-  475. trace_line                     TraceLine(103) when $26 is true
-  476. copy_4_slots_unmasked          $42..45 = result₄
-  477. copy_constant                  $46 = 0x00000009 (1.261169e-44)
-  478. copy_constant                  $47 = 0x00000009 (1.261169e-44)
-  479. copy_constant                  $48 = 0x00000009 (1.261169e-44)
-  480. copy_constant                  $49 = 0x00000001 (1.401298e-45)
-  481. cmpeq_4_ints                   $42..45 = equal($42..45, $46..49)
-  482. bitwise_and_2_ints             $42..43 &= $44..45
-  483. bitwise_and_int                $42 &= $43
-  484. copy_slot_masked               [loop_operator_eq].result = Mask($42)
-  485. trace_var                      TraceVar([loop_operator_eq].result) when $26 is true
-  486. trace_scope                    TraceScope(-1) when $26 is true
-  487. trace_exit                     TraceExit(bool loop_operator_eq()) when $26 is true
-  488. copy_slot_unmasked             $42 = [loop_operator_eq].result
-  489. label                          label 0x00000021
-  490. copy_slot_masked               $41 = Mask($42)
-  491. label                          label 0x00000002
-  492. load_condition_mask            CondMask = $50
-  493. zero_slot_unmasked             $2 = 0
-  494. merge_condition_mask           CondMask = $40 & $41
-  495. branch_if_no_lanes_active      branch_if_no_lanes_active +50 (label 1 at #545)
-  496. trace_enter                    TraceEnter(bool loop_operator_ne()) when $26 is true
-  497. trace_scope                    TraceScope(+1) when $26 is true
-  498. trace_line                     TraceLine(86) when $26 is true
-  499. trace_line                     TraceLine(88) when $26 is true
-  500. copy_constant                  $3 = 0x00000009 (1.261169e-44)
-  501. swizzle_4                      $3..6 = ($3..6).xxxx
-  502. copy_4_slots_unmasked          result₅ = $3..6
-  503. trace_var                      TraceVar(result₅) when $26 is true
-  504. trace_scope                    TraceScope(+1) when $26 is true
-  505. branch_if_no_lanes_active      branch_if_no_lanes_active +22 (label 37 at #527)
-  506. trace_line                     TraceLine(89) when $26 is true
-  507. copy_constant                  i₈ = 0x00000001 (1.401298e-45)
-  508. trace_var                      TraceVar(i₈) when $26 is true
-  509. label                          label 0x00000026
-  510. trace_scope                    TraceScope(+1) when $26 is true
-  511. trace_line                     TraceLine(90) when $26 is true
-  512. copy_4_slots_unmasked          $3..6 = result₅(1..3), i₈
-  513. copy_4_slots_masked            result₅ = Mask($3..6)
-  514. trace_var                      TraceVar(result₅) when $26 is true
-  515. trace_scope                    TraceScope(-1) when $26 is true
-  516. trace_line                     TraceLine(89) when $26 is true
-  517. copy_slot_unmasked             $3 = i₈
-  518. copy_constant                  $4 = 0x00000001 (1.401298e-45)
-  519. add_int                        $3 += $4
-  520. copy_slot_masked               i₈ = Mask($3)
-  521. trace_var                      TraceVar(i₈) when $26 is true
-  522. copy_slot_unmasked             $3 = i₈
-  523. copy_constant                  $4 = 0x00000004 (5.605194e-45)
-  524. cmpne_int                      $3 = notEqual($3, $4)
-  525. stack_rewind
-  526. branch_if_no_active_lanes_eq   branch -17 (label 38 at #509) if no lanes of $3 == 0x00000000 (0.0)
-  527. label                          label 0x00000025
-  528. trace_scope                    TraceScope(-1) when $26 is true
-  529. trace_line                     TraceLine(92) when $26 is true
-  530. copy_4_slots_unmasked          $3..6 = result₅
-  531. copy_constant                  $7 = 0x00000009 (1.261169e-44)
-  532. copy_constant                  $8 = 0x00000001 (1.401298e-45)
-  533. copy_constant                  $9 = 0x00000002 (2.802597e-45)
-  534. copy_constant                  $10 = 0x00000003 (4.203895e-45)
-  535. cmpeq_4_ints                   $3..6 = equal($3..6, $7..10)
-  536. bitwise_and_2_ints             $3..4 &= $5..6
-  537. bitwise_and_int                $3 &= $4
-  538. copy_slot_masked               [loop_operator_ne].result = Mask($3)
-  539. trace_var                      TraceVar([loop_operator_ne].result) when $26 is true
-  540. trace_scope                    TraceScope(-1) when $26 is true
-  541. trace_exit                     TraceExit(bool loop_operator_ne()) when $26 is true
-  542. copy_slot_unmasked             $3 = [loop_operator_ne].result
-  543. label                          label 0x00000024
-  544. copy_slot_masked               $2 = Mask($3)
-  545. label                          label 0x00000001
-  546. load_condition_mask            CondMask = $40
-  547. swizzle_4                      $2..5 = ($2..5).xxxx
-  548. copy_4_constants               $6..9 = colorRed
-  549. copy_4_constants               $10..13 = colorGreen
-  550. mix_4_ints                     $2..5 = mix($6..9, $10..13, $2..5)
-  551. copy_4_slots_unmasked          [main].result = $2..5
-  552. trace_var                      TraceVar([main].result) when $26 is true
-  553. trace_scope                    TraceScope(-1) when $26 is true
-  554. trace_exit                     TraceExit(half4 main(float2 pos)) when $26 is true
-  555. load_src                       src.rgba = [main].result
+   11. trace_var                      TraceVar(kTen) when $35 is true
+   12. trace_enter                    TraceEnter(half4 main(float2 pos)) when $35 is true
+   13. trace_var                      TraceVar(pos) when $35 is true
+   14. zero_slot_unmasked             $2 = 0
+   15. copy_slot_unmasked             $3 = $35
+   16. copy_slot_masked               $2 = Mask($3)
+   17. trace_scope                    TraceScope(+1) when $2 is true
+   18. trace_line                     TraceLine(107) when $35 is true
+   19. copy_slot_unmasked             $3 = pos(0)
+   20. copy_constant                  $4 = colorGreen(1)
+   21. max_float                      $3 = max($3, $4)
+   22. copy_constant                  $4 = colorGreen(3)
+   23. min_float                      $3 = min($3, $4)
+   24. cast_to_int_from_float         $3 = FloatToInt($3)
+   25. copy_constant                  $4 = 0x00000005 (7.006492e-45)
+   26. mul_int                        $3 *= $4
+   27. copy_slot_unmasked             five = $3
+   28. trace_var                      TraceVar(five) when $35 is true
+   29. trace_line                     TraceLine(111) when $35 is true
+   30. store_condition_mask           $50 = CondMask
+   31. store_condition_mask           $61 = CondMask
+   32. store_condition_mask           $39 = CondMask
+   33. store_condition_mask           $93 = CondMask
+   34. store_condition_mask           $72 = CondMask
+   35. store_condition_mask           $25 = CondMask
+   36. store_condition_mask           $83 = CondMask
+   37. store_condition_mask           $15 = CondMask
+   38. branch_if_no_lanes_active      branch_if_no_lanes_active +66 (label 9 at #104)
+   39. copy_slot_unmasked             five₁ = five
+   40. trace_var                      TraceVar(five₁) when $35 is true
+   41. trace_enter                    TraceEnter(int return_loop(int five)) when $35 is true
+   42. store_return_mask              $16 = RetMask
+   43. zero_slot_unmasked             $17 = 0
+   44. copy_slot_unmasked             $18 = $35
+   45. copy_slot_masked               $17 = Mask($18)
+   46. trace_scope                    TraceScope(+1) when $17 is true
+   47. zero_slot_unmasked             $18 = 0
+   48. copy_slot_unmasked             $19 = $35
+   49. copy_slot_masked               $18 = Mask($19)
+   50. trace_scope                    TraceScope(+1) when $18 is true
+   51. trace_line                     TraceLine(8) when $35 is true
+   52. copy_slot_unmasked             i = kZero
+   53. trace_var                      TraceVar(i) when $35 is true
+   54. store_loop_mask                $19 = LoopMask
+   55. jump                           jump +30 (label 11 at #85)
+   56. label                          label 0x0000000C
+   57. zero_slot_unmasked             $20 = 0
+   58. copy_slot_unmasked             $21 = $35
+   59. copy_slot_masked               $20 = Mask($21)
+   60. trace_scope                    TraceScope(+1) when $20 is true
+   61. trace_line                     TraceLine(9) when $35 is true
+   62. store_condition_mask           $21 = CondMask
+   63. copy_slot_unmasked             $22 = i
+   64. copy_slot_unmasked             $23 = five₁
+   65. cmpeq_int                      $22 = equal($22, $23)
+   66. merge_condition_mask           CondMask = $21 & $22
+   67. zero_slot_unmasked             $23 = 0
+   68. copy_slot_unmasked             $24 = $35
+   69. copy_slot_masked               $23 = Mask($24)
+   70. trace_scope                    TraceScope(+1) when $23 is true
+   71. trace_line                     TraceLine(9) when $35 is true
+   72. copy_slot_unmasked             $24 = i
+   73. copy_slot_masked               [return_loop].result = Mask($24)
+   74. trace_var                      TraceVar([return_loop].result) when $35 is true
+   75. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
+   76. trace_scope                    TraceScope(-1) when $23 is true
+   77. load_condition_mask            CondMask = $21
+   78. trace_scope                    TraceScope(-1) when $20 is true
+   79. trace_line                     TraceLine(8) when $35 is true
+   80. copy_slot_unmasked             $20 = i
+   81. copy_constant                  $21 = 0x00000001 (1.401298e-45)
+   82. add_int                        $20 += $21
+   83. copy_slot_masked               i = Mask($20)
+   84. trace_var                      TraceVar(i) when $35 is true
+   85. label                          label 0x0000000B
+   86. copy_slot_unmasked             $20 = i
+   87. copy_constant                  $21 = 0x0000000A (1.401298e-44)
+   88. cmplt_int                      $20 = lessThan($20, $21)
+   89. merge_loop_mask                LoopMask &= $20
+   90. stack_rewind
+   91. branch_if_any_lanes_active     branch_if_any_lanes_active -35 (label 12 at #56)
+   92. label                          label 0x0000000A
+   93. load_loop_mask                 LoopMask = $19
+   94. trace_scope                    TraceScope(-1) when $18 is true
+   95. trace_line                     TraceLine(11) when $35 is true
+   96. zero_slot_unmasked             $18 = 0
+   97. copy_slot_masked               [return_loop].result = Mask($18)
+   98. trace_var                      TraceVar([return_loop].result) when $35 is true
+   99. mask_off_return_mask           RetMask &= ~(CondMask & LoopMask & RetMask)
+  100. trace_scope                    TraceScope(-1) when $17 is true
+  101. load_return_mask               RetMask = $16
+  102. trace_exit                     TraceExit(int return_loop(int five)) when $35 is true
+  103. copy_slot_unmasked             $16 = [return_loop].result
+  104. label                          label 0x00000009
+  105. copy_constant                  $17 = 0x00000005 (7.006492e-45)
+  106. cmpeq_int                      $16 = equal($16, $17)
+  107. zero_slot_unmasked             $84 = 0
+  108. merge_condition_mask           CondMask = $15 & $16
+  109. branch_if_no_lanes_active      branch_if_no_lanes_active +76 (label 8 at #185)
+  110. copy_slot_unmasked             five₂ = five
+  111. trace_var                      TraceVar(five₂) when $35 is true
+  112. trace_enter                    TraceEnter(int continue_loop(int five)) when $35 is true
+  113. zero_slot_unmasked             $85 = 0
+  114. copy_slot_unmasked             $86 = $35
+  115. copy_slot_masked               $85 = Mask($86)
+  116. trace_scope                    TraceScope(+1) when $85 is true
+  117. trace_line                     TraceLine(17) when $35 is true
+  118. zero_slot_unmasked             sum = 0
+  119. trace_var                      TraceVar(sum) when $35 is true
+  120. zero_slot_unmasked             $86 = 0
+  121. copy_slot_unmasked             $87 = $35
+  122. copy_slot_masked               $86 = Mask($87)
+  123. trace_scope                    TraceScope(+1) when $86 is true
+  124. trace_line                     TraceLine(18) when $35 is true
+  125. zero_slot_unmasked             i₁ = 0
+  126. trace_var                      TraceVar(i₁) when $35 is true
+  127. store_loop_mask                $87 = LoopMask
+  128. jump                           jump +36 (label 15 at #164)
+  129. label                          label 0x00000010
+  130. zero_slot_unmasked             $0 = 0
+  131. zero_slot_unmasked             $88 = 0
+  132. copy_slot_unmasked             $89 = $35
+  133. copy_slot_masked               $88 = Mask($89)
+  134. trace_scope                    TraceScope(+1) when $88 is true
+  135. trace_line                     TraceLine(19) when $35 is true
+  136. store_condition_mask           $89 = CondMask
+  137. copy_slot_unmasked             $90 = i₁
+  138. copy_slot_unmasked             $91 = five₂
+  139. cmplt_int                      $90 = lessThan($90, $91)
+  140. merge_condition_mask           CondMask = $89 & $90
+  141. zero_slot_unmasked             $91 = 0
+  142. copy_slot_unmasked             $92 = $35
+  143. copy_slot_masked               $91 = Mask($92)
+  144. trace_scope                    TraceScope(+1) when $91 is true
+  145. trace_line                     TraceLine(19) when $35 is true
+  146. copy_constant                  $1 = 0xFFFFFFFF
+  147. copy_slot_masked               $0 = Mask($1)
+  148. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
+  149. trace_scope                    TraceScope(-1) when $91 is true
+  150. load_condition_mask            CondMask = $89
+  151. trace_line                     TraceLine(20) when $35 is true
+  152. copy_2_slots_unmasked          $89..90 = sum, i₁
+  153. add_int                        $89 += $90
+  154. copy_slot_masked               sum = Mask($89)
+  155. trace_var                      TraceVar(sum) when $35 is true
+  156. trace_scope                    TraceScope(-1) when $88 is true
+  157. reenable_loop_mask             LoopMask |= $0
+  158. trace_line                     TraceLine(18) when $35 is true
+  159. copy_slot_unmasked             $88 = i₁
+  160. copy_constant                  $89 = 0x00000001 (1.401298e-45)
+  161. add_int                        $88 += $89
+  162. copy_slot_masked               i₁ = Mask($88)
+  163. trace_var                      TraceVar(i₁) when $35 is true
+  164. label                          label 0x0000000F
+  165. copy_slot_unmasked             $88 = i₁
+  166. copy_slot_unmasked             $89 = kTen
+  167. cmplt_int                      $88 = lessThan($88, $89)
+  168. merge_loop_mask                LoopMask &= $88
+  169. stack_rewind
+  170. branch_if_any_lanes_active     branch_if_any_lanes_active -41 (label 16 at #129)
+  171. label                          label 0x0000000E
+  172. load_loop_mask                 LoopMask = $87
+  173. trace_scope                    TraceScope(-1) when $86 is true
+  174. trace_line                     TraceLine(22) when $35 is true
+  175. copy_slot_unmasked             $86 = sum
+  176. copy_slot_masked               [continue_loop].result = Mask($86)
+  177. trace_var                      TraceVar([continue_loop].result) when $35 is true
+  178. trace_scope                    TraceScope(-1) when $85 is true
+  179. trace_exit                     TraceExit(int continue_loop(int five)) when $35 is true
+  180. copy_slot_unmasked             $85 = [continue_loop].result
+  181. label                          label 0x0000000D
+  182. copy_constant                  $86 = 0x00000023 (4.904545e-44)
+  183. cmpeq_int                      $85 = equal($85, $86)
+  184. copy_slot_masked               $84 = Mask($85)
+  185. label                          label 0x00000008
+  186. load_condition_mask            CondMask = $15
+  187. zero_slot_unmasked             $26 = 0
+  188. merge_condition_mask           CondMask = $83 & $84
+  189. branch_if_no_lanes_active      branch_if_no_lanes_active +77 (label 7 at #266)
+  190. copy_constant                  five₃ = 0x00000005 (7.006492e-45)
+  191. trace_var                      TraceVar(five₃) when $35 is true
+  192. trace_enter                    TraceEnter(int break_loop(int five)) when $35 is true
+  193. zero_slot_unmasked             $27 = 0
+  194. copy_slot_unmasked             $28 = $35
+  195. copy_slot_masked               $27 = Mask($28)
+  196. trace_scope                    TraceScope(+1) when $27 is true
+  197. trace_line                     TraceLine(27) when $35 is true
+  198. zero_slot_unmasked             sum₁ = 0
+  199. trace_var                      TraceVar(sum₁) when $35 is true
+  200. trace_line                     TraceLine(28) when $35 is true
+  201. copy_constant                  kOne = 0x00000001 (1.401298e-45)
+  202. trace_var                      TraceVar(kOne) when $35 is true
+  203. zero_slot_unmasked             $28 = 0
+  204. copy_slot_unmasked             $29 = $35
+  205. copy_slot_masked               $28 = Mask($29)
+  206. trace_scope                    TraceScope(+1) when $28 is true
+  207. trace_line                     TraceLine(29) when $35 is true
+  208. zero_slot_unmasked             i₂ = 0
+  209. trace_var                      TraceVar(i₂) when $35 is true
+  210. store_loop_mask                $29 = LoopMask
+  211. jump                           jump +34 (label 19 at #245)
+  212. label                          label 0x00000014
+  213. zero_slot_unmasked             $30 = 0
+  214. copy_slot_unmasked             $31 = $35
+  215. copy_slot_masked               $30 = Mask($31)
+  216. trace_scope                    TraceScope(+1) when $30 is true
+  217. trace_line                     TraceLine(30) when $35 is true
+  218. store_condition_mask           $31 = CondMask
+  219. copy_slot_unmasked             $32 = five₃
+  220. copy_slot_unmasked             $33 = i₂
+  221. cmplt_int                      $32 = lessThan($32, $33)
+  222. merge_condition_mask           CondMask = $31 & $32
+  223. zero_slot_unmasked             $33 = 0
+  224. copy_slot_unmasked             $34 = $35
+  225. copy_slot_masked               $33 = Mask($34)
+  226. trace_scope                    TraceScope(+1) when $33 is true
+  227. trace_line                     TraceLine(30) when $35 is true
+  228. branch_if_all_lanes_active     branch_if_all_lanes_active +24 (label 18 at #252)
+  229. mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
+  230. trace_scope                    TraceScope(-1) when $33 is true
+  231. load_condition_mask            CondMask = $31
+  232. trace_line                     TraceLine(31) when $35 is true
+  233. copy_slot_unmasked             $31 = sum₁
+  234. copy_slot_unmasked             $32 = i₂
+  235. add_int                        $31 += $32
+  236. copy_slot_masked               sum₁ = Mask($31)
+  237. trace_var                      TraceVar(sum₁) when $35 is true
+  238. trace_scope                    TraceScope(-1) when $30 is true
+  239. trace_line                     TraceLine(29) when $35 is true
+  240. copy_slot_unmasked             $30 = i₂
+  241. copy_slot_unmasked             $31 = kOne
+  242. add_int                        $30 += $31
+  243. copy_slot_masked               i₂ = Mask($30)
+  244. trace_var                      TraceVar(i₂) when $35 is true
+  245. label                          label 0x00000013
+  246. copy_slot_unmasked             $30 = i₂
+  247. copy_constant                  $31 = 0x0000000A (1.401298e-44)
+  248. cmplt_int                      $30 = lessThan($30, $31)
+  249. merge_loop_mask                LoopMask &= $30
+  250. stack_rewind
+  251. branch_if_any_lanes_active     branch_if_any_lanes_active -39 (label 20 at #212)
+  252. label                          label 0x00000012
+  253. load_loop_mask                 LoopMask = $29
+  254. trace_scope                    TraceScope(-1) when $28 is true
+  255. trace_line                     TraceLine(33) when $35 is true
+  256. copy_slot_unmasked             $28 = sum₁
+  257. copy_slot_masked               [break_loop].result = Mask($28)
+  258. trace_var                      TraceVar([break_loop].result) when $35 is true
+  259. trace_scope                    TraceScope(-1) when $27 is true
+  260. trace_exit                     TraceExit(int break_loop(int five)) when $35 is true
+  261. copy_slot_unmasked             $27 = [break_loop].result
+  262. label                          label 0x00000011
+  263. copy_constant                  $28 = 0x0000000F (2.101948e-44)
+  264. cmpeq_int                      $27 = equal($27, $28)
+  265. copy_slot_masked               $26 = Mask($27)
+  266. label                          label 0x00000007
+  267. load_condition_mask            CondMask = $83
+  268. zero_slot_unmasked             $73 = 0
+  269. merge_condition_mask           CondMask = $25 & $26
+  270. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 6 at #330)
+  271. trace_enter                    TraceEnter(bool loop_operator_le()) when $35 is true
+  272. zero_slot_unmasked             $74 = 0
+  273. copy_slot_unmasked             $75 = $35
+  274. copy_slot_masked               $74 = Mask($75)
+  275. trace_scope                    TraceScope(+1) when $74 is true
+  276. trace_line                     TraceLine(38) when $35 is true
+  277. trace_line                     TraceLine(39) when $35 is true
+  278. trace_line                     TraceLine(41) when $35 is true
+  279. copy_constant                  $75 = 0x00000009 (1.261169e-44)
+  280. swizzle_4                      $75..78 = ($75..78).xxxx
+  281. copy_4_slots_unmasked          result = $75..78
+  282. trace_var                      TraceVar(result) when $35 is true
+  283. zero_slot_unmasked             $75 = 0
+  284. copy_slot_unmasked             $76 = $35
+  285. copy_slot_masked               $75 = Mask($76)
+  286. trace_scope                    TraceScope(+1) when $75 is true
+  287. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 22 at #312)
+  288. trace_line                     TraceLine(42) when $35 is true
+  289. copy_constant                  i₃ = 0x00000001 (1.401298e-45)
+  290. trace_var                      TraceVar(i₃) when $35 is true
+  291. label                          label 0x00000017
+  292. zero_slot_unmasked             $76 = 0
+  293. copy_slot_unmasked             $77 = $35
+  294. copy_slot_masked               $76 = Mask($77)
+  295. trace_scope                    TraceScope(+1) when $76 is true
+  296. trace_line                     TraceLine(43) when $35 is true
+  297. copy_4_slots_unmasked          $77..80 = result(1..3), i₃
+  298. copy_4_slots_masked            result = Mask($77..80)
+  299. trace_var                      TraceVar(result) when $35 is true
+  300. trace_scope                    TraceScope(-1) when $76 is true
+  301. trace_line                     TraceLine(42) when $35 is true
+  302. copy_slot_unmasked             $76 = i₃
+  303. copy_constant                  $77 = 0x00000001 (1.401298e-45)
+  304. add_int                        $76 += $77
+  305. copy_slot_masked               i₃ = Mask($76)
+  306. trace_var                      TraceVar(i₃) when $35 is true
+  307. copy_slot_unmasked             $76 = i₃
+  308. copy_constant                  $77 = 0x00000003 (4.203895e-45)
+  309. cmple_int                      $76 = lessThanEqual($76, $77)
+  310. stack_rewind
+  311. branch_if_no_active_lanes_eq   branch -20 (label 23 at #291) if no lanes of $76 == 0x00000000 (0.0)
+  312. label                          label 0x00000016
+  313. trace_scope                    TraceScope(-1) when $75 is true
+  314. trace_line                     TraceLine(45) when $35 is true
+  315. copy_4_slots_unmasked          $75..78 = result
+  316. copy_constant                  $79 = 0x00000009 (1.261169e-44)
+  317. copy_constant                  $80 = 0x00000001 (1.401298e-45)
+  318. copy_constant                  $81 = 0x00000002 (2.802597e-45)
+  319. copy_constant                  $82 = 0x00000003 (4.203895e-45)
+  320. cmpeq_4_ints                   $75..78 = equal($75..78, $79..82)
+  321. bitwise_and_2_ints             $75..76 &= $77..78
+  322. bitwise_and_int                $75 &= $76
+  323. copy_slot_masked               [loop_operator_le].result = Mask($75)
+  324. trace_var                      TraceVar([loop_operator_le].result) when $35 is true
+  325. trace_scope                    TraceScope(-1) when $74 is true
+  326. trace_exit                     TraceExit(bool loop_operator_le()) when $35 is true
+  327. copy_slot_unmasked             $74 = [loop_operator_le].result
+  328. label                          label 0x00000015
+  329. copy_slot_masked               $73 = Mask($74)
+  330. label                          label 0x00000006
+  331. load_condition_mask            CondMask = $25
+  332. zero_slot_unmasked             $94 = 0
+  333. merge_condition_mask           CondMask = $72 & $73
+  334. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 5 at #394)
+  335. trace_enter                    TraceEnter(bool loop_operator_lt()) when $35 is true
+  336. zero_slot_unmasked             $95 = 0
+  337. copy_slot_unmasked             $96 = $35
+  338. copy_slot_masked               $95 = Mask($96)
+  339. trace_scope                    TraceScope(+1) when $95 is true
+  340. trace_line                     TraceLine(50) when $35 is true
+  341. trace_line                     TraceLine(51) when $35 is true
+  342. trace_line                     TraceLine(53) when $35 is true
+  343. copy_constant                  $96 = 0x00000009 (1.261169e-44)
+  344. swizzle_4                      $96..99 = ($96..99).xxxx
+  345. copy_4_slots_unmasked          result₁ = $96..99
+  346. trace_var                      TraceVar(result₁) when $35 is true
+  347. zero_slot_unmasked             $96 = 0
+  348. copy_slot_unmasked             $97 = $35
+  349. copy_slot_masked               $96 = Mask($97)
+  350. trace_scope                    TraceScope(+1) when $96 is true
+  351. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 25 at #376)
+  352. trace_line                     TraceLine(54) when $35 is true
+  353. copy_constant                  i₄ = 0x00000001 (1.401298e-45)
+  354. trace_var                      TraceVar(i₄) when $35 is true
+  355. label                          label 0x0000001A
+  356. zero_slot_unmasked             $97 = 0
+  357. copy_slot_unmasked             $98 = $35
+  358. copy_slot_masked               $97 = Mask($98)
+  359. trace_scope                    TraceScope(+1) when $97 is true
+  360. trace_line                     TraceLine(55) when $35 is true
+  361. copy_4_slots_unmasked          $98..101 = result₁(1..3), i₄
+  362. copy_4_slots_masked            result₁ = Mask($98..101)
+  363. trace_var                      TraceVar(result₁) when $35 is true
+  364. trace_scope                    TraceScope(-1) when $97 is true
+  365. trace_line                     TraceLine(54) when $35 is true
+  366. copy_slot_unmasked             $97 = i₄
+  367. copy_constant                  $98 = 0x00000001 (1.401298e-45)
+  368. add_int                        $97 += $98
+  369. copy_slot_masked               i₄ = Mask($97)
+  370. trace_var                      TraceVar(i₄) when $35 is true
+  371. copy_slot_unmasked             $97 = i₄
+  372. copy_constant                  $98 = 0x00000004 (5.605194e-45)
+  373. cmplt_int                      $97 = lessThan($97, $98)
+  374. stack_rewind
+  375. branch_if_no_active_lanes_eq   branch -20 (label 26 at #355) if no lanes of $97 == 0x00000000 (0.0)
+  376. label                          label 0x00000019
+  377. trace_scope                    TraceScope(-1) when $96 is true
+  378. trace_line                     TraceLine(57) when $35 is true
+  379. copy_4_slots_unmasked          $96..99 = result₁
+  380. copy_constant                  $100 = 0x00000009 (1.261169e-44)
+  381. copy_constant                  $101 = 0x00000001 (1.401298e-45)
+  382. copy_constant                  $102 = 0x00000002 (2.802597e-45)
+  383. copy_constant                  $103 = 0x00000003 (4.203895e-45)
+  384. cmpeq_4_ints                   $96..99 = equal($96..99, $100..103)
+  385. bitwise_and_2_ints             $96..97 &= $98..99
+  386. bitwise_and_int                $96 &= $97
+  387. copy_slot_masked               [loop_operator_lt].result = Mask($96)
+  388. trace_var                      TraceVar([loop_operator_lt].result) when $35 is true
+  389. trace_scope                    TraceScope(-1) when $95 is true
+  390. trace_exit                     TraceExit(bool loop_operator_lt()) when $35 is true
+  391. copy_slot_unmasked             $95 = [loop_operator_lt].result
+  392. label                          label 0x00000018
+  393. copy_slot_masked               $94 = Mask($95)
+  394. label                          label 0x00000005
+  395. load_condition_mask            CondMask = $72
+  396. zero_slot_unmasked             $40 = 0
+  397. merge_condition_mask           CondMask = $93 & $94
+  398. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 4 at #458)
+  399. trace_enter                    TraceEnter(bool loop_operator_ge()) when $35 is true
+  400. zero_slot_unmasked             $41 = 0
+  401. copy_slot_unmasked             $42 = $35
+  402. copy_slot_masked               $41 = Mask($42)
+  403. trace_scope                    TraceScope(+1) when $41 is true
+  404. trace_line                     TraceLine(62) when $35 is true
+  405. trace_line                     TraceLine(63) when $35 is true
+  406. trace_line                     TraceLine(65) when $35 is true
+  407. copy_constant                  $42 = 0x00000009 (1.261169e-44)
+  408. swizzle_4                      $42..45 = ($42..45).xxxx
+  409. copy_4_slots_unmasked          result₂ = $42..45
+  410. trace_var                      TraceVar(result₂) when $35 is true
+  411. zero_slot_unmasked             $42 = 0
+  412. copy_slot_unmasked             $43 = $35
+  413. copy_slot_masked               $42 = Mask($43)
+  414. trace_scope                    TraceScope(+1) when $42 is true
+  415. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 28 at #440)
+  416. trace_line                     TraceLine(66) when $35 is true
+  417. copy_constant                  i₅ = 0x00000003 (4.203895e-45)
+  418. trace_var                      TraceVar(i₅) when $35 is true
+  419. label                          label 0x0000001D
+  420. zero_slot_unmasked             $43 = 0
+  421. copy_slot_unmasked             $44 = $35
+  422. copy_slot_masked               $43 = Mask($44)
+  423. trace_scope                    TraceScope(+1) when $43 is true
+  424. trace_line                     TraceLine(67) when $35 is true
+  425. copy_4_slots_unmasked          $44..47 = result₂(1..3), i₅
+  426. copy_4_slots_masked            result₂ = Mask($44..47)
+  427. trace_var                      TraceVar(result₂) when $35 is true
+  428. trace_scope                    TraceScope(-1) when $43 is true
+  429. trace_line                     TraceLine(66) when $35 is true
+  430. copy_slot_unmasked             $43 = i₅
+  431. copy_constant                  $44 = 0x00000001 (1.401298e-45)
+  432. sub_int                        $43 -= $44
+  433. copy_slot_masked               i₅ = Mask($43)
+  434. trace_var                      TraceVar(i₅) when $35 is true
+  435. copy_constant                  $43 = 0x00000001 (1.401298e-45)
+  436. copy_slot_unmasked             $44 = i₅
+  437. cmple_int                      $43 = lessThanEqual($43, $44)
+  438. stack_rewind
+  439. branch_if_no_active_lanes_eq   branch -20 (label 29 at #419) if no lanes of $43 == 0x00000000 (0.0)
+  440. label                          label 0x0000001C
+  441. trace_scope                    TraceScope(-1) when $42 is true
+  442. trace_line                     TraceLine(69) when $35 is true
+  443. copy_4_slots_unmasked          $42..45 = result₂
+  444. copy_constant                  $46 = 0x00000009 (1.261169e-44)
+  445. copy_constant                  $47 = 0x00000003 (4.203895e-45)
+  446. copy_constant                  $48 = 0x00000002 (2.802597e-45)
+  447. copy_constant                  $49 = 0x00000001 (1.401298e-45)
+  448. cmpeq_4_ints                   $42..45 = equal($42..45, $46..49)
+  449. bitwise_and_2_ints             $42..43 &= $44..45
+  450. bitwise_and_int                $42 &= $43
+  451. copy_slot_masked               [loop_operator_ge].result = Mask($42)
+  452. trace_var                      TraceVar([loop_operator_ge].result) when $35 is true
+  453. trace_scope                    TraceScope(-1) when $41 is true
+  454. trace_exit                     TraceExit(bool loop_operator_ge()) when $35 is true
+  455. copy_slot_unmasked             $41 = [loop_operator_ge].result
+  456. label                          label 0x0000001B
+  457. copy_slot_masked               $40 = Mask($41)
+  458. label                          label 0x00000004
+  459. load_condition_mask            CondMask = $93
+  460. zero_slot_unmasked             $62 = 0
+  461. merge_condition_mask           CondMask = $39 & $40
+  462. branch_if_no_lanes_active      branch_if_no_lanes_active +60 (label 3 at #522)
+  463. trace_enter                    TraceEnter(bool loop_operator_gt()) when $35 is true
+  464. zero_slot_unmasked             $63 = 0
+  465. copy_slot_unmasked             $64 = $35
+  466. copy_slot_masked               $63 = Mask($64)
+  467. trace_scope                    TraceScope(+1) when $63 is true
+  468. trace_line                     TraceLine(74) when $35 is true
+  469. trace_line                     TraceLine(75) when $35 is true
+  470. trace_line                     TraceLine(77) when $35 is true
+  471. copy_constant                  $64 = 0x00000009 (1.261169e-44)
+  472. swizzle_4                      $64..67 = ($64..67).xxxx
+  473. copy_4_slots_unmasked          result₃ = $64..67
+  474. trace_var                      TraceVar(result₃) when $35 is true
+  475. zero_slot_unmasked             $64 = 0
+  476. copy_slot_unmasked             $65 = $35
+  477. copy_slot_masked               $64 = Mask($65)
+  478. trace_scope                    TraceScope(+1) when $64 is true
+  479. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 31 at #504)
+  480. trace_line                     TraceLine(78) when $35 is true
+  481. copy_constant                  i₆ = 0x00000003 (4.203895e-45)
+  482. trace_var                      TraceVar(i₆) when $35 is true
+  483. label                          label 0x00000020
+  484. zero_slot_unmasked             $65 = 0
+  485. copy_slot_unmasked             $66 = $35
+  486. copy_slot_masked               $65 = Mask($66)
+  487. trace_scope                    TraceScope(+1) when $65 is true
+  488. trace_line                     TraceLine(79) when $35 is true
+  489. copy_4_slots_unmasked          $66..69 = result₃(1..3), i₆
+  490. copy_4_slots_masked            result₃ = Mask($66..69)
+  491. trace_var                      TraceVar(result₃) when $35 is true
+  492. trace_scope                    TraceScope(-1) when $65 is true
+  493. trace_line                     TraceLine(78) when $35 is true
+  494. copy_slot_unmasked             $65 = i₆
+  495. copy_constant                  $66 = 0x00000001 (1.401298e-45)
+  496. sub_int                        $65 -= $66
+  497. copy_slot_masked               i₆ = Mask($65)
+  498. trace_var                      TraceVar(i₆) when $35 is true
+  499. zero_slot_unmasked             $65 = 0
+  500. copy_slot_unmasked             $66 = i₆
+  501. cmplt_int                      $65 = lessThan($65, $66)
+  502. stack_rewind
+  503. branch_if_no_active_lanes_eq   branch -20 (label 32 at #483) if no lanes of $65 == 0x00000000 (0.0)
+  504. label                          label 0x0000001F
+  505. trace_scope                    TraceScope(-1) when $64 is true
+  506. trace_line                     TraceLine(81) when $35 is true
+  507. copy_4_slots_unmasked          $64..67 = result₃
+  508. copy_constant                  $68 = 0x00000009 (1.261169e-44)
+  509. copy_constant                  $69 = 0x00000003 (4.203895e-45)
+  510. copy_constant                  $70 = 0x00000002 (2.802597e-45)
+  511. copy_constant                  $71 = 0x00000001 (1.401298e-45)
+  512. cmpeq_4_ints                   $64..67 = equal($64..67, $68..71)
+  513. bitwise_and_2_ints             $64..65 &= $66..67
+  514. bitwise_and_int                $64 &= $65
+  515. copy_slot_masked               [loop_operator_gt].result = Mask($64)
+  516. trace_var                      TraceVar([loop_operator_gt].result) when $35 is true
+  517. trace_scope                    TraceScope(-1) when $63 is true
+  518. trace_exit                     TraceExit(bool loop_operator_gt()) when $35 is true
+  519. copy_slot_unmasked             $63 = [loop_operator_gt].result
+  520. label                          label 0x0000001E
+  521. copy_slot_masked               $62 = Mask($63)
+  522. label                          label 0x00000003
+  523. load_condition_mask            CondMask = $39
+  524. zero_slot_unmasked             $51 = 0
+  525. merge_condition_mask           CondMask = $61 & $62
+  526. branch_if_no_lanes_active      branch_if_no_lanes_active +49 (label 2 at #575)
+  527. trace_enter                    TraceEnter(bool loop_operator_eq()) when $35 is true
+  528. zero_slot_unmasked             $52 = 0
+  529. copy_slot_unmasked             $53 = $35
+  530. copy_slot_masked               $52 = Mask($53)
+  531. trace_scope                    TraceScope(+1) when $52 is true
+  532. trace_line                     TraceLine(97) when $35 is true
+  533. trace_line                     TraceLine(99) when $35 is true
+  534. copy_constant                  $53 = 0x00000009 (1.261169e-44)
+  535. swizzle_4                      $53..56 = ($53..56).xxxx
+  536. copy_4_slots_unmasked          result₄ = $53..56
+  537. trace_var                      TraceVar(result₄) when $35 is true
+  538. zero_slot_unmasked             $53 = 0
+  539. copy_slot_unmasked             $54 = $35
+  540. copy_slot_masked               $53 = Mask($54)
+  541. trace_scope                    TraceScope(+1) when $53 is true
+  542. branch_if_no_lanes_active      branch_if_no_lanes_active +15 (label 34 at #557)
+  543. trace_line                     TraceLine(100) when $35 is true
+  544. copy_constant                  i₇ = 0x00000001 (1.401298e-45)
+  545. trace_var                      TraceVar(i₇) when $35 is true
+  546. label                          label 0x00000023
+  547. zero_slot_unmasked             $54 = 0
+  548. copy_slot_unmasked             $55 = $35
+  549. copy_slot_masked               $54 = Mask($55)
+  550. trace_scope                    TraceScope(+1) when $54 is true
+  551. trace_line                     TraceLine(101) when $35 is true
+  552. copy_4_slots_unmasked          $55..58 = result₄(1..3), i₇
+  553. copy_4_slots_masked            result₄ = Mask($55..58)
+  554. trace_var                      TraceVar(result₄) when $35 is true
+  555. trace_scope                    TraceScope(-1) when $54 is true
+  556. trace_line                     TraceLine(100) when $35 is true
+  557. label                          label 0x00000022
+  558. trace_scope                    TraceScope(-1) when $53 is true
+  559. trace_line                     TraceLine(103) when $35 is true
+  560. copy_4_slots_unmasked          $53..56 = result₄
+  561. copy_constant                  $57 = 0x00000009 (1.261169e-44)
+  562. copy_constant                  $58 = 0x00000009 (1.261169e-44)
+  563. copy_constant                  $59 = 0x00000009 (1.261169e-44)
+  564. copy_constant                  $60 = 0x00000001 (1.401298e-45)
+  565. cmpeq_4_ints                   $53..56 = equal($53..56, $57..60)
+  566. bitwise_and_2_ints             $53..54 &= $55..56
+  567. bitwise_and_int                $53 &= $54
+  568. copy_slot_masked               [loop_operator_eq].result = Mask($53)
+  569. trace_var                      TraceVar([loop_operator_eq].result) when $35 is true
+  570. trace_scope                    TraceScope(-1) when $52 is true
+  571. trace_exit                     TraceExit(bool loop_operator_eq()) when $35 is true
+  572. copy_slot_unmasked             $52 = [loop_operator_eq].result
+  573. label                          label 0x00000021
+  574. copy_slot_masked               $51 = Mask($52)
+  575. label                          label 0x00000002
+  576. load_condition_mask            CondMask = $61
+  577. zero_slot_unmasked             $3 = 0
+  578. merge_condition_mask           CondMask = $50 & $51
+  579. branch_if_no_lanes_active      branch_if_no_lanes_active +59 (label 1 at #638)
+  580. trace_enter                    TraceEnter(bool loop_operator_ne()) when $35 is true
+  581. zero_slot_unmasked             $4 = 0
+  582. copy_slot_unmasked             $5 = $35
+  583. copy_slot_masked               $4 = Mask($5)
+  584. trace_scope                    TraceScope(+1) when $4 is true
+  585. trace_line                     TraceLine(86) when $35 is true
+  586. trace_line                     TraceLine(88) when $35 is true
+  587. copy_constant                  $5 = 0x00000009 (1.261169e-44)
+  588. swizzle_4                      $5..8 = ($5..8).xxxx
+  589. copy_4_slots_unmasked          result₅ = $5..8
+  590. trace_var                      TraceVar(result₅) when $35 is true
+  591. zero_slot_unmasked             $5 = 0
+  592. copy_slot_unmasked             $6 = $35
+  593. copy_slot_masked               $5 = Mask($6)
+  594. trace_scope                    TraceScope(+1) when $5 is true
+  595. branch_if_no_lanes_active      branch_if_no_lanes_active +25 (label 37 at #620)
+  596. trace_line                     TraceLine(89) when $35 is true
+  597. copy_constant                  i₈ = 0x00000001 (1.401298e-45)
+  598. trace_var                      TraceVar(i₈) when $35 is true
+  599. label                          label 0x00000026
+  600. zero_slot_unmasked             $6 = 0
+  601. copy_slot_unmasked             $7 = $35
+  602. copy_slot_masked               $6 = Mask($7)
+  603. trace_scope                    TraceScope(+1) when $6 is true
+  604. trace_line                     TraceLine(90) when $35 is true
+  605. copy_4_slots_unmasked          $7..10 = result₅(1..3), i₈
+  606. copy_4_slots_masked            result₅ = Mask($7..10)
+  607. trace_var                      TraceVar(result₅) when $35 is true
+  608. trace_scope                    TraceScope(-1) when $6 is true
+  609. trace_line                     TraceLine(89) when $35 is true
+  610. copy_slot_unmasked             $6 = i₈
+  611. copy_constant                  $7 = 0x00000001 (1.401298e-45)
+  612. add_int                        $6 += $7
+  613. copy_slot_masked               i₈ = Mask($6)
+  614. trace_var                      TraceVar(i₈) when $35 is true
+  615. copy_slot_unmasked             $6 = i₈
+  616. copy_constant                  $7 = 0x00000004 (5.605194e-45)
+  617. cmpne_int                      $6 = notEqual($6, $7)
+  618. stack_rewind
+  619. branch_if_no_active_lanes_eq   branch -20 (label 38 at #599) if no lanes of $6 == 0x00000000 (0.0)
+  620. label                          label 0x00000025
+  621. trace_scope                    TraceScope(-1) when $5 is true
+  622. trace_line                     TraceLine(92) when $35 is true
+  623. copy_4_slots_unmasked          $5..8 = result₅
+  624. copy_constant                  $9 = 0x00000009 (1.261169e-44)
+  625. copy_constant                  $10 = 0x00000001 (1.401298e-45)
+  626. copy_constant                  $11 = 0x00000002 (2.802597e-45)
+  627. copy_constant                  $12 = 0x00000003 (4.203895e-45)
+  628. cmpeq_4_ints                   $5..8 = equal($5..8, $9..12)
+  629. bitwise_and_2_ints             $5..6 &= $7..8
+  630. bitwise_and_int                $5 &= $6
+  631. copy_slot_masked               [loop_operator_ne].result = Mask($5)
+  632. trace_var                      TraceVar([loop_operator_ne].result) when $35 is true
+  633. trace_scope                    TraceScope(-1) when $4 is true
+  634. trace_exit                     TraceExit(bool loop_operator_ne()) when $35 is true
+  635. copy_slot_unmasked             $4 = [loop_operator_ne].result
+  636. label                          label 0x00000024
+  637. copy_slot_masked               $3 = Mask($4)
+  638. label                          label 0x00000001
+  639. load_condition_mask            CondMask = $50
+  640. swizzle_4                      $3..6 = ($3..6).xxxx
+  641. copy_4_constants               $7..10 = colorRed
+  642. copy_4_constants               $11..14 = colorGreen
+  643. mix_4_ints                     $3..6 = mix($7..10, $11..14, $3..6)
+  644. copy_4_slots_unmasked          [main].result = $3..6
+  645. trace_var                      TraceVar([main].result) when $35 is true
+  646. trace_scope                    TraceScope(-1) when $2 is true
+  647. trace_exit                     TraceExit(half4 main(float2 pos)) when $35 is true
+  648. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/runtime/MultipleCallsInOneStatement.skrp b/tests/sksl/runtime/MultipleCallsInOneStatement.skrp
index a60b0fd..6e1fa0a 100644
--- a/tests/sksl/runtime/MultipleCallsInOneStatement.skrp
+++ b/tests/sksl/runtime/MultipleCallsInOneStatement.skrp
@@ -1,61 +1,73 @@
-    1. store_device_xy01              $12..15 = DeviceCoords.xy01
-    2. copy_constant                  $14 = 0x3F000000 (0.5)
-    3. copy_constant                  $15 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $12..13 = equal($12..13, $14..15)
-    5. bitwise_and_int                $12 &= $13
+    1. store_device_xy01              $13..16 = DeviceCoords.xy01
+    2. copy_constant                  $15 = 0x3F000000 (0.5)
+    3. copy_constant                  $16 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $13..14 = equal($13..14, $15..16)
+    5. bitwise_and_int                $13 &= $14
     6. store_src_rg                   pos = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
-    8. trace_enter                    TraceEnter(half4 main(float2 pos)) when $12 is true
-    9. trace_var                      TraceVar(pos) when $12 is true
-   10. trace_scope                    TraceScope(+1) when $12 is true
-   11. trace_line                     TraceLine(11) when $12 is true
-   12. copy_constant                  x = 0x00000005 (7.006492e-45)
-   13. trace_var                      TraceVar(x) when $12 is true
-   14. trace_enter                    TraceEnter(int get(int x)) when $12 is true
-   15. trace_scope                    TraceScope(+1) when $12 is true
-   16. trace_line                     TraceLine(6) when $12 is true
-   17. copy_slot_unmasked             [get].result = x
-   18. trace_var                      TraceVar([get].result) when $12 is true
-   19. trace_scope                    TraceScope(-1) when $12 is true
-   20. trace_exit                     TraceExit(int get(int x)) when $12 is true
-   21. copy_slot_unmasked             $0 = [get].result
-   22. label                          label 0x00000000
-   23. copy_constant                  x = 0x00000003 (4.203895e-45)
-   24. trace_var                      TraceVar(x) when $12 is true
-   25. trace_enter                    TraceEnter(int get(int x)) when $12 is true
-   26. trace_scope                    TraceScope(+1) when $12 is true
-   27. trace_line                     TraceLine(6) when $12 is true
-   28. copy_slot_unmasked             [get].result = x
-   29. trace_var                      TraceVar([get].result) when $12 is true
-   30. trace_scope                    TraceScope(-1) when $12 is true
-   31. trace_exit                     TraceExit(int get(int x)) when $12 is true
-   32. copy_slot_unmasked             $1 = [get].result
-   33. label                          label 0x00000001
-   34. add_int                        $0 += $1
-   35. copy_constant                  x = 0x00000002 (2.802597e-45)
-   36. trace_var                      TraceVar(x) when $12 is true
-   37. trace_enter                    TraceEnter(int get(int x)) when $12 is true
-   38. trace_scope                    TraceScope(+1) when $12 is true
-   39. trace_line                     TraceLine(6) when $12 is true
-   40. copy_slot_unmasked             [get].result = x
-   41. trace_var                      TraceVar([get].result) when $12 is true
-   42. trace_scope                    TraceScope(-1) when $12 is true
-   43. trace_exit                     TraceExit(int get(int x)) when $12 is true
-   44. copy_slot_unmasked             $1 = [get].result
-   45. label                          label 0x00000002
-   46. add_int                        $0 += $1
-   47. copy_slot_unmasked             ten = $0
-   48. trace_var                      TraceVar(ten) when $12 is true
-   49. trace_line                     TraceLine(12) when $12 is true
-   50. copy_slot_unmasked             $0 = ten
-   51. copy_constant                  $1 = 0x0000000A (1.401298e-44)
-   52. cmpeq_int                      $0 = equal($0, $1)
-   53. swizzle_4                      $0..3 = ($0..3).xxxx
-   54. copy_4_constants               $4..7 = colorRed
-   55. copy_4_constants               $8..11 = colorGreen
-   56. mix_4_ints                     $0..3 = mix($4..7, $8..11, $0..3)
-   57. copy_4_slots_unmasked          [main].result = $0..3
-   58. trace_var                      TraceVar([main].result) when $12 is true
-   59. trace_scope                    TraceScope(-1) when $12 is true
-   60. trace_exit                     TraceExit(half4 main(float2 pos)) when $12 is true
-   61. load_src                       src.rgba = [main].result
+    8. trace_enter                    TraceEnter(half4 main(float2 pos)) when $13 is true
+    9. trace_var                      TraceVar(pos) when $13 is true
+   10. zero_slot_unmasked             $0 = 0
+   11. copy_slot_unmasked             $1 = $13
+   12. copy_slot_masked               $0 = Mask($1)
+   13. trace_scope                    TraceScope(+1) when $0 is true
+   14. trace_line                     TraceLine(11) when $13 is true
+   15. copy_constant                  x = 0x00000005 (7.006492e-45)
+   16. trace_var                      TraceVar(x) when $13 is true
+   17. trace_enter                    TraceEnter(int get(int x)) when $13 is true
+   18. zero_slot_unmasked             $1 = 0
+   19. copy_slot_unmasked             $2 = $13
+   20. copy_slot_masked               $1 = Mask($2)
+   21. trace_scope                    TraceScope(+1) when $1 is true
+   22. trace_line                     TraceLine(6) when $13 is true
+   23. copy_slot_unmasked             [get].result = x
+   24. trace_var                      TraceVar([get].result) when $13 is true
+   25. trace_scope                    TraceScope(-1) when $1 is true
+   26. trace_exit                     TraceExit(int get(int x)) when $13 is true
+   27. copy_slot_unmasked             $1 = [get].result
+   28. label                          label 0x00000000
+   29. copy_constant                  x = 0x00000003 (4.203895e-45)
+   30. trace_var                      TraceVar(x) when $13 is true
+   31. trace_enter                    TraceEnter(int get(int x)) when $13 is true
+   32. zero_slot_unmasked             $2 = 0
+   33. copy_slot_unmasked             $3 = $13
+   34. copy_slot_masked               $2 = Mask($3)
+   35. trace_scope                    TraceScope(+1) when $2 is true
+   36. trace_line                     TraceLine(6) when $13 is true
+   37. copy_slot_unmasked             [get].result = x
+   38. trace_var                      TraceVar([get].result) when $13 is true
+   39. trace_scope                    TraceScope(-1) when $2 is true
+   40. trace_exit                     TraceExit(int get(int x)) when $13 is true
+   41. copy_slot_unmasked             $2 = [get].result
+   42. label                          label 0x00000001
+   43. add_int                        $1 += $2
+   44. copy_constant                  x = 0x00000002 (2.802597e-45)
+   45. trace_var                      TraceVar(x) when $13 is true
+   46. trace_enter                    TraceEnter(int get(int x)) when $13 is true
+   47. zero_slot_unmasked             $2 = 0
+   48. copy_slot_unmasked             $3 = $13
+   49. copy_slot_masked               $2 = Mask($3)
+   50. trace_scope                    TraceScope(+1) when $2 is true
+   51. trace_line                     TraceLine(6) when $13 is true
+   52. copy_slot_unmasked             [get].result = x
+   53. trace_var                      TraceVar([get].result) when $13 is true
+   54. trace_scope                    TraceScope(-1) when $2 is true
+   55. trace_exit                     TraceExit(int get(int x)) when $13 is true
+   56. copy_slot_unmasked             $2 = [get].result
+   57. label                          label 0x00000002
+   58. add_int                        $1 += $2
+   59. copy_slot_unmasked             ten = $1
+   60. trace_var                      TraceVar(ten) when $13 is true
+   61. trace_line                     TraceLine(12) when $13 is true
+   62. copy_slot_unmasked             $1 = ten
+   63. copy_constant                  $2 = 0x0000000A (1.401298e-44)
+   64. cmpeq_int                      $1 = equal($1, $2)
+   65. swizzle_4                      $1..4 = ($1..4).xxxx
+   66. copy_4_constants               $5..8 = colorRed
+   67. copy_4_constants               $9..12 = colorGreen
+   68. mix_4_ints                     $1..4 = mix($5..8, $9..12, $1..4)
+   69. copy_4_slots_unmasked          [main].result = $1..4
+   70. trace_var                      TraceVar([main].result) when $13 is true
+   71. trace_scope                    TraceScope(-1) when $0 is true
+   72. trace_exit                     TraceExit(half4 main(float2 pos)) when $13 is true
+   73. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/runtime/PrecisionQualifiers.skrp b/tests/sksl/runtime/PrecisionQualifiers.skrp
index aa2e16f..bb6a7f7 100644
--- a/tests/sksl/runtime/PrecisionQualifiers.skrp
+++ b/tests/sksl/runtime/PrecisionQualifiers.skrp
@@ -1,391 +1,415 @@
-    1. store_device_xy01              $16..19 = DeviceCoords.xy01
-    2. copy_constant                  $18 = 0x3F000000 (0.5)
-    3. copy_constant                  $19 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $16..17 = equal($16..17, $18..19)
-    5. bitwise_and_int                $16 &= $17
+    1. store_device_xy01              $18..21 = DeviceCoords.xy01
+    2. copy_constant                  $20 = 0x3F000000 (0.5)
+    3. copy_constant                  $21 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $18..19 = equal($18..19, $20..21)
+    5. bitwise_and_int                $18 &= $19
     6. store_src_rg                   coords = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
-    8. trace_enter                    TraceEnter(vec4 main(vec2 coords)) when $16 is true
-    9. trace_var                      TraceVar(coords) when $16 is true
-   10. trace_scope                    TraceScope(+1) when $16 is true
-   11. trace_line                     TraceLine(58) when $16 is true
-   12. zero_4_slots_unmasked          zero = 0
-   13. trace_var                      TraceVar(zero) when $16 is true
-   14. trace_line                     TraceLine(59) when $16 is true
-   15. copy_constant                  $0 = 0x3F800000 (1.0)
-   16. swizzle_4                      $0..3 = ($0..3).xxxx
-   17. copy_4_slots_unmasked          one = $0..3
-   18. trace_var                      TraceVar(one) when $16 is true
-   19. trace_line                     TraceLine(60) when $16 is true
-   20. copy_4_constants               $0..3 = colorGreen
-   21. copy_4_slots_unmasked          green = $0..3
-   22. trace_var                      TraceVar(green) when $16 is true
-   23. trace_line                     TraceLine(61) when $16 is true
-   24. copy_4_slots_unmasked          $0..3 = green
-   25. copy_4_slots_unmasked          $4..7 = one
-   26. mul_4_floats                   $0..3 *= $4..7
-   27. copy_4_slots_unmasked          $4..7 = zero
-   28. add_4_floats                   $0..3 += $4..7
-   29. copy_4_slots_unmasked          green = $0..3
-   30. trace_var                      TraceVar(green) when $16 is true
-   31. trace_line                     TraceLine(63) when $16 is true
-   32. copy_4_constants               $0..3 = colorRed
-   33. copy_4_slots_unmasked          red = $0..3
-   34. trace_var                      TraceVar(red) when $16 is true
-   35. trace_line                     TraceLine(64) when $16 is true
-   36. copy_4_slots_unmasked          $0..3 = red
-   37. copy_4_slots_unmasked          $4..7 = zero
-   38. add_4_floats                   $0..3 += $4..7
-   39. copy_4_slots_unmasked          $4..7 = one
-   40. mul_4_floats                   $0..3 *= $4..7
-   41. copy_4_slots_unmasked          red = $0..3
-   42. trace_var                      TraceVar(red) when $16 is true
-   43. trace_line                     TraceLine(66) when $16 is true
-   44. store_condition_mask           $27 = CondMask
-   45. store_condition_mask           $31 = CondMask
-   46. store_condition_mask           $20 = CondMask
-   47. store_condition_mask           $46 = CondMask
+    8. trace_enter                    TraceEnter(vec4 main(vec2 coords)) when $18 is true
+    9. trace_var                      TraceVar(coords) when $18 is true
+   10. zero_slot_unmasked             $0 = 0
+   11. copy_slot_unmasked             $1 = $18
+   12. copy_slot_masked               $0 = Mask($1)
+   13. trace_scope                    TraceScope(+1) when $0 is true
+   14. trace_line                     TraceLine(58) when $18 is true
+   15. zero_4_slots_unmasked          zero = 0
+   16. trace_var                      TraceVar(zero) when $18 is true
+   17. trace_line                     TraceLine(59) when $18 is true
+   18. copy_constant                  $1 = 0x3F800000 (1.0)
+   19. swizzle_4                      $1..4 = ($1..4).xxxx
+   20. copy_4_slots_unmasked          one = $1..4
+   21. trace_var                      TraceVar(one) when $18 is true
+   22. trace_line                     TraceLine(60) when $18 is true
+   23. copy_4_constants               $1..4 = colorGreen
+   24. copy_4_slots_unmasked          green = $1..4
+   25. trace_var                      TraceVar(green) when $18 is true
+   26. trace_line                     TraceLine(61) when $18 is true
+   27. copy_4_slots_unmasked          $1..4 = green
+   28. copy_4_slots_unmasked          $5..8 = one
+   29. mul_4_floats                   $1..4 *= $5..8
+   30. copy_4_slots_unmasked          $5..8 = zero
+   31. add_4_floats                   $1..4 += $5..8
+   32. copy_4_slots_unmasked          green = $1..4
+   33. trace_var                      TraceVar(green) when $18 is true
+   34. trace_line                     TraceLine(63) when $18 is true
+   35. copy_4_constants               $1..4 = colorRed
+   36. copy_4_slots_unmasked          red = $1..4
+   37. trace_var                      TraceVar(red) when $18 is true
+   38. trace_line                     TraceLine(64) when $18 is true
+   39. copy_4_slots_unmasked          $1..4 = red
+   40. copy_4_slots_unmasked          $5..8 = zero
+   41. add_4_floats                   $1..4 += $5..8
+   42. copy_4_slots_unmasked          $5..8 = one
+   43. mul_4_floats                   $1..4 *= $5..8
+   44. copy_4_slots_unmasked          red = $1..4
+   45. trace_var                      TraceVar(red) when $18 is true
+   46. trace_line                     TraceLine(66) when $18 is true
+   47. store_condition_mask           $30 = CondMask
    48. store_condition_mask           $35 = CondMask
-   49. store_condition_mask           $12 = CondMask
-   50. branch_if_no_lanes_active      branch_if_no_lanes_active +26 (label 7 at #76)
-   51. trace_enter                    TraceEnter(bool test_scalar()) when $16 is true
-   52. trace_scope                    TraceScope(+1) when $16 is true
-   53. trace_line                     TraceLine(6) when $16 is true
-   54. copy_constant                  mp = 0x3F000000 (0.5)
-   55. trace_var                      TraceVar(mp) when $16 is true
-   56. trace_line                     TraceLine(7) when $16 is true
-   57. copy_slot_unmasked             hp = mp
-   58. trace_var                      TraceVar(hp) when $16 is true
-   59. trace_line                     TraceLine(8) when $16 is true
-   60. copy_constant                  ihp = 0x00000002 (2.802597e-45)
-   61. trace_var                      TraceVar(ihp) when $16 is true
-   62. trace_line                     TraceLine(9) when $16 is true
-   63. copy_slot_unmasked             imp = ihp
-   64. trace_var                      TraceVar(imp) when $16 is true
-   65. trace_line                     TraceLine(11) when $16 is true
-   66. copy_2_slots_unmasked          $13..14 = mp, hp
-   67. cmpeq_float                    $13 = equal($13, $14)
-   68. copy_2_slots_unmasked          $14..15 = ihp, imp
-   69. cmpeq_int                      $14 = equal($14, $15)
-   70. bitwise_and_int                $13 &= $14
-   71. copy_slot_masked               [test_scalar].result = Mask($13)
-   72. trace_var                      TraceVar([test_scalar].result) when $16 is true
-   73. trace_scope                    TraceScope(-1) when $16 is true
-   74. trace_exit                     TraceExit(bool test_scalar()) when $16 is true
-   75. copy_slot_unmasked             $13 = [test_scalar].result
-   76. label                          label 0x00000007
-   77. zero_slot_unmasked             $36 = 0
-   78. merge_condition_mask           CondMask = $12 & $13
-   79. branch_if_no_lanes_active      branch_if_no_lanes_active +91 (label 6 at #170)
-   80. trace_enter                    TraceEnter(bool test_vector()) when $16 is true
-   81. trace_scope                    TraceScope(+1) when $16 is true
-   82. trace_line                     TraceLine(15) when $16 is true
-   83. copy_constant                  $37 = 0x40000000 (2.0)
-   84. copy_slot_unmasked             $38 = $37
-   85. copy_2_slots_unmasked          mp2 = $37..38
-   86. trace_var                      TraceVar(mp2) when $16 is true
-   87. trace_line                     TraceLine(16) when $16 is true
-   88. copy_2_slots_unmasked          hp2 = mp2
-   89. trace_var                      TraceVar(hp2) when $16 is true
-   90. trace_line                     TraceLine(17) when $16 is true
-   91. copy_constant                  $37 = 0x40400000 (3.0)
-   92. swizzle_3                      $37..39 = ($37..39).xxx
-   93. copy_3_slots_unmasked          mp3 = $37..39
-   94. trace_var                      TraceVar(mp3) when $16 is true
-   95. trace_line                     TraceLine(18) when $16 is true
-   96. copy_3_slots_unmasked          hp3 = mp3
-   97. trace_var                      TraceVar(hp3) when $16 is true
-   98. trace_line                     TraceLine(19) when $16 is true
-   99. copy_constant                  $37 = 0x40800000 (4.0)
-  100. swizzle_4                      $37..40 = ($37..40).xxxx
-  101. copy_4_slots_unmasked          mp4 = $37..40
-  102. trace_var                      TraceVar(mp4) when $16 is true
-  103. trace_line                     TraceLine(20) when $16 is true
-  104. copy_4_slots_unmasked          hp4 = mp4
-  105. trace_var                      TraceVar(hp4) when $16 is true
-  106. trace_line                     TraceLine(22) when $16 is true
-  107. copy_constant                  $37 = 0x00000002 (2.802597e-45)
-  108. copy_slot_unmasked             $38 = $37
-  109. copy_2_slots_unmasked          ihp2 = $37..38
-  110. trace_var                      TraceVar(ihp2) when $16 is true
-  111. trace_line                     TraceLine(23) when $16 is true
-  112. copy_2_slots_unmasked          imp2 = ihp2
-  113. trace_var                      TraceVar(imp2) when $16 is true
-  114. trace_line                     TraceLine(24) when $16 is true
-  115. copy_constant                  $37 = 0x00000003 (4.203895e-45)
-  116. swizzle_3                      $37..39 = ($37..39).xxx
-  117. copy_3_slots_unmasked          ihp3 = $37..39
-  118. trace_var                      TraceVar(ihp3) when $16 is true
-  119. trace_line                     TraceLine(25) when $16 is true
-  120. copy_3_slots_unmasked          imp3 = ihp3
-  121. trace_var                      TraceVar(imp3) when $16 is true
-  122. trace_line                     TraceLine(26) when $16 is true
-  123. copy_constant                  $37 = 0x00000004 (5.605194e-45)
-  124. swizzle_4                      $37..40 = ($37..40).xxxx
-  125. copy_4_slots_unmasked          ihp4 = $37..40
-  126. trace_var                      TraceVar(ihp4) when $16 is true
-  127. trace_line                     TraceLine(27) when $16 is true
-  128. copy_4_slots_unmasked          imp4 = ihp4
-  129. trace_var                      TraceVar(imp4) when $16 is true
-  130. trace_line                     TraceLine(29) when $16 is true
-  131. copy_4_slots_unmasked          $37..40 = mp2, hp2
-  132. cmpeq_2_floats                 $37..38 = equal($37..38, $39..40)
-  133. bitwise_and_int                $37 &= $38
-  134. copy_3_slots_unmasked          $38..40 = hp3
-  135. copy_3_slots_unmasked          $41..43 = mp3
-  136. cmpeq_3_floats                 $38..40 = equal($38..40, $41..43)
-  137. bitwise_and_int                $39 &= $40
-  138. bitwise_and_int                $38 &= $39
-  139. bitwise_and_int                $37 &= $38
-  140. copy_4_slots_unmasked          $38..41 = mp4
-  141. copy_4_slots_unmasked          $42..45 = hp4
-  142. cmpeq_4_floats                 $38..41 = equal($38..41, $42..45)
-  143. bitwise_and_2_ints             $38..39 &= $40..41
-  144. bitwise_and_int                $38 &= $39
-  145. bitwise_and_int                $37 &= $38
-  146. copy_2_slots_unmasked          $38..39 = imp2
-  147. copy_2_slots_unmasked          $40..41 = ihp2
-  148. cmpeq_2_ints                   $38..39 = equal($38..39, $40..41)
-  149. bitwise_and_int                $38 &= $39
-  150. bitwise_and_int                $37 &= $38
-  151. copy_4_slots_unmasked          $38..41 = ihp3, imp3(0)
-  152. copy_2_slots_unmasked          $42..43 = imp3(1..2)
-  153. cmpeq_3_ints                   $38..40 = equal($38..40, $41..43)
-  154. bitwise_and_int                $39 &= $40
-  155. bitwise_and_int                $38 &= $39
-  156. bitwise_and_int                $37 &= $38
-  157. copy_4_slots_unmasked          $38..41 = imp4
-  158. copy_4_slots_unmasked          $42..45 = ihp4
-  159. cmpeq_4_ints                   $38..41 = equal($38..41, $42..45)
-  160. bitwise_and_2_ints             $38..39 &= $40..41
-  161. bitwise_and_int                $38 &= $39
-  162. bitwise_and_int                $37 &= $38
-  163. copy_slot_masked               [test_vector].result = Mask($37)
-  164. trace_var                      TraceVar([test_vector].result) when $16 is true
-  165. trace_scope                    TraceScope(-1) when $16 is true
-  166. trace_exit                     TraceExit(bool test_vector()) when $16 is true
-  167. copy_slot_unmasked             $37 = [test_vector].result
-  168. label                          label 0x00000008
-  169. copy_slot_masked               $36 = Mask($37)
-  170. label                          label 0x00000006
-  171. load_condition_mask            CondMask = $12
-  172. zero_slot_unmasked             $47 = 0
-  173. merge_condition_mask           CondMask = $35 & $36
-  174. branch_if_no_lanes_active      branch_if_no_lanes_active +80 (label 5 at #254)
-  175. trace_enter                    TraceEnter(bool test_matrix()) when $16 is true
-  176. trace_scope                    TraceScope(+1) when $16 is true
-  177. trace_line                     TraceLine(34) when $16 is true
-  178. zero_slot_unmasked             $48 = 0
-  179. copy_constant                  $49 = 0x40000000 (2.0)
-  180. swizzle_4                      $48..51 = ($48..51).yxxy
-  181. copy_4_slots_unmasked          mp2₁ = $48..51
-  182. trace_var                      TraceVar(mp2₁) when $16 is true
-  183. trace_line                     TraceLine(35) when $16 is true
-  184. copy_4_slots_unmasked          hp2₁ = mp2₁
-  185. trace_var                      TraceVar(hp2₁) when $16 is true
-  186. trace_line                     TraceLine(36) when $16 is true
-  187. zero_slot_unmasked             $48 = 0
-  188. copy_constant                  $49 = 0x40400000 (3.0)
-  189. shuffle                        $48..56 = ($48..56)[1 0 0 0 1 0 0 0 1]
-  190. copy_4_slots_unmasked          mp3₁(0..3) = $48..51
-  191. copy_4_slots_unmasked          mp3₁(4..7) = $52..55
-  192. copy_slot_unmasked             mp3₁(8) = $56
-  193. trace_var                      TraceVar(mp3₁) when $16 is true
-  194. trace_line                     TraceLine(37) when $16 is true
-  195. copy_4_slots_unmasked          hp3₁(0..3) = mp3₁(0..3)
-  196. copy_4_slots_unmasked          hp3₁(4..7) = mp3₁(4..7)
-  197. copy_slot_unmasked             hp3₁(8) = mp3₁(8)
-  198. trace_var                      TraceVar(hp3₁) when $16 is true
-  199. trace_line                     TraceLine(38) when $16 is true
-  200. zero_slot_unmasked             $48 = 0
-  201. copy_constant                  $49 = 0x40800000 (4.0)
-  202. shuffle                        $48..63 = ($48..63)[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1]
-  203. copy_4_slots_unmasked          mp4₁(0..3) = $48..51
-  204. copy_4_slots_unmasked          mp4₁(4..7) = $52..55
-  205. copy_4_slots_unmasked          mp4₁(8..11) = $56..59
-  206. copy_4_slots_unmasked          mp4₁(12..15) = $60..63
-  207. trace_var                      TraceVar(mp4₁) when $16 is true
-  208. trace_line                     TraceLine(39) when $16 is true
-  209. copy_4_slots_unmasked          hp4₁(0..3) = mp4₁(0..3)
-  210. copy_4_slots_unmasked          hp4₁(4..7) = mp4₁(4..7)
-  211. copy_4_slots_unmasked          hp4₁(8..11) = mp4₁(8..11)
-  212. copy_4_slots_unmasked          hp4₁(12..15) = mp4₁(12..15)
-  213. trace_var                      TraceVar(hp4₁) when $16 is true
-  214. trace_line                     TraceLine(41) when $16 is true
-  215. copy_4_slots_unmasked          $48..51 = mp2₁
-  216. copy_4_slots_unmasked          $52..55 = hp2₁
-  217. cmpeq_4_floats                 $48..51 = equal($48..51, $52..55)
-  218. bitwise_and_2_ints             $48..49 &= $50..51
-  219. bitwise_and_int                $48 &= $49
-  220. copy_4_slots_unmasked          $49..52 = hp3₁(0..3)
-  221. copy_4_slots_unmasked          $53..56 = hp3₁(4..7)
-  222. copy_slot_unmasked             $57 = hp3₁(8)
-  223. copy_4_slots_unmasked          $58..61 = mp3₁(0..3)
-  224. copy_4_slots_unmasked          $62..65 = mp3₁(4..7)
-  225. copy_slot_unmasked             $66 = mp3₁(8)
-  226. cmpeq_n_floats                 $49..57 = equal($49..57, $58..66)
-  227. bitwise_and_4_ints             $50..53 &= $54..57
-  228. bitwise_and_2_ints             $50..51 &= $52..53
-  229. bitwise_and_int                $50 &= $51
-  230. bitwise_and_int                $49 &= $50
-  231. bitwise_and_int                $48 &= $49
-  232. copy_4_slots_unmasked          $49..52 = mp4₁(0..3)
-  233. copy_4_slots_unmasked          $53..56 = mp4₁(4..7)
-  234. copy_4_slots_unmasked          $57..60 = mp4₁(8..11)
-  235. copy_4_slots_unmasked          $61..64 = mp4₁(12..15)
-  236. copy_4_slots_unmasked          $65..68 = hp4₁(0..3)
-  237. copy_4_slots_unmasked          $69..72 = hp4₁(4..7)
-  238. copy_4_slots_unmasked          $73..76 = hp4₁(8..11)
-  239. copy_4_slots_unmasked          $77..80 = hp4₁(12..15)
-  240. cmpeq_n_floats                 $49..64 = equal($49..64, $65..80)
-  241. bitwise_and_4_ints             $57..60 &= $61..64
-  242. bitwise_and_4_ints             $53..56 &= $57..60
-  243. bitwise_and_4_ints             $49..52 &= $53..56
-  244. bitwise_and_2_ints             $49..50 &= $51..52
-  245. bitwise_and_int                $49 &= $50
-  246. bitwise_and_int                $48 &= $49
-  247. copy_slot_masked               [test_matrix].result = Mask($48)
-  248. trace_var                      TraceVar([test_matrix].result) when $16 is true
-  249. trace_scope                    TraceScope(-1) when $16 is true
-  250. trace_exit                     TraceExit(bool test_matrix()) when $16 is true
-  251. copy_slot_unmasked             $48 = [test_matrix].result
-  252. label                          label 0x00000009
-  253. copy_slot_masked               $47 = Mask($48)
-  254. label                          label 0x00000005
-  255. load_condition_mask            CondMask = $35
-  256. zero_slot_unmasked             $21 = 0
-  257. merge_condition_mask           CondMask = $46 & $47
-  258. branch_if_no_lanes_active      branch_if_no_lanes_active +63 (label 4 at #321)
-  259. trace_enter                    TraceEnter(bool test_array()) when $16 is true
-  260. trace_scope                    TraceScope(+1) when $16 is true
-  261. trace_line                     TraceLine(45) when $16 is true
-  262. zero_slot_unmasked             mf[0] = 0
-  263. trace_var                      TraceVar(mf[0]) when $16 is true
-  264. trace_line                     TraceLine(45) when $16 is true
-  265. copy_constant                  $22 = 0x3F800000 (1.0)
-  266. copy_slot_masked               mf[0] = Mask($22)
-  267. trace_var                      TraceVar(mf[0]) when $16 is true
-  268. trace_line                     TraceLine(46) when $16 is true
-  269. zero_slot_unmasked             hf[0] = 0
-  270. trace_var                      TraceVar(hf[0]) when $16 is true
-  271. trace_line                     TraceLine(46) when $16 is true
-  272. copy_constant                  $22 = 0x3F800000 (1.0)
-  273. copy_slot_masked               hf[0] = Mask($22)
-  274. trace_var                      TraceVar(hf[0]) when $16 is true
-  275. trace_line                     TraceLine(47) when $16 is true
-  276. zero_4_slots_unmasked          mv[0], mv[1] = 0
-  277. trace_var                      TraceVar(mv[0], mv[1]) when $16 is true
-  278. trace_line                     TraceLine(47) when $16 is true
-  279. zero_slot_unmasked             $22 = 0
-  280. copy_constant                  $23 = 0x3F800000 (1.0)
-  281. copy_2_slots_masked            mv[0] = Mask($22..23)
-  282. trace_var                      TraceVar(mv[0]) when $16 is true
-  283. trace_line                     TraceLine(47) when $16 is true
-  284. copy_constant                  $22 = 0x40000000 (2.0)
-  285. copy_constant                  $23 = 0x40400000 (3.0)
-  286. copy_2_slots_masked            mv[1] = Mask($22..23)
-  287. trace_var                      TraceVar(mv[1]) when $16 is true
-  288. trace_line                     TraceLine(48) when $16 is true
-  289. zero_4_slots_unmasked          hv[0], hv[1] = 0
-  290. trace_var                      TraceVar(hv[0], hv[1]) when $16 is true
-  291. trace_line                     TraceLine(48) when $16 is true
-  292. zero_slot_unmasked             $22 = 0
-  293. copy_constant                  $23 = 0x3F800000 (1.0)
-  294. copy_2_slots_masked            hv[0] = Mask($22..23)
-  295. trace_var                      TraceVar(hv[0]) when $16 is true
-  296. trace_line                     TraceLine(48) when $16 is true
-  297. copy_constant                  $22 = 0x40000000 (2.0)
-  298. copy_constant                  $23 = 0x40400000 (3.0)
-  299. copy_2_slots_masked            hv[1] = Mask($22..23)
-  300. trace_var                      TraceVar(hv[1]) when $16 is true
-  301. trace_line                     TraceLine(50) when $16 is true
-  302. copy_2_slots_unmasked          $22..23 = mf[0], hf[0]
-  303. cmpeq_float                    $22 = equal($22, $23)
-  304. copy_2_slots_unmasked          $23..24 = hv[0]
-  305. copy_2_slots_unmasked          $25..26 = mv[0]
-  306. cmpeq_2_floats                 $23..24 = equal($23..24, $25..26)
-  307. bitwise_and_int                $23 &= $24
-  308. bitwise_and_int                $22 &= $23
-  309. copy_2_slots_unmasked          $23..24 = mv[1]
-  310. copy_2_slots_unmasked          $25..26 = hv[1]
-  311. cmpeq_2_floats                 $23..24 = equal($23..24, $25..26)
-  312. bitwise_and_int                $23 &= $24
-  313. bitwise_and_int                $22 &= $23
-  314. copy_slot_masked               [test_array].result = Mask($22)
-  315. trace_var                      TraceVar([test_array].result) when $16 is true
-  316. trace_scope                    TraceScope(-1) when $16 is true
-  317. trace_exit                     TraceExit(bool test_array()) when $16 is true
-  318. copy_slot_unmasked             $22 = [test_array].result
-  319. label                          label 0x0000000A
-  320. copy_slot_masked               $21 = Mask($22)
-  321. label                          label 0x00000004
-  322. load_condition_mask            CondMask = $46
-  323. zero_slot_unmasked             $32 = 0
-  324. merge_condition_mask           CondMask = $20 & $21
-  325. branch_if_no_lanes_active      branch_if_no_lanes_active +16 (label 3 at #341)
-  326. copy_constant                  value = 0x3F800000 (1.0)
-  327. trace_var                      TraceVar(value) when $16 is true
-  328. trace_enter                    TraceEnter(bool highp_param(float value)) when $16 is true
-  329. trace_scope                    TraceScope(+1) when $16 is true
-  330. trace_line                     TraceLine(53) when $16 is true
-  331. copy_slot_unmasked             $33 = value
-  332. copy_constant                  $34 = 0x3F800000 (1.0)
-  333. cmpeq_float                    $33 = equal($33, $34)
-  334. copy_slot_masked               [highp_param].result = Mask($33)
-  335. trace_var                      TraceVar([highp_param].result) when $16 is true
-  336. trace_scope                    TraceScope(-1) when $16 is true
-  337. trace_exit                     TraceExit(bool highp_param(float value)) when $16 is true
-  338. copy_slot_unmasked             $33 = [highp_param].result
-  339. label                          label 0x0000000B
-  340. copy_slot_masked               $32 = Mask($33)
-  341. label                          label 0x00000003
-  342. load_condition_mask            CondMask = $20
-  343. zero_slot_unmasked             $28 = 0
-  344. merge_condition_mask           CondMask = $31 & $32
-  345. branch_if_no_lanes_active      branch_if_no_lanes_active +16 (label 2 at #361)
-  346. copy_constant                  value₁ = 0x40000000 (2.0)
-  347. trace_var                      TraceVar(value₁) when $16 is true
-  348. trace_enter                    TraceEnter(bool mediump_param(half value)) when $16 is true
-  349. trace_scope                    TraceScope(+1) when $16 is true
-  350. trace_line                     TraceLine(54) when $16 is true
-  351. copy_slot_unmasked             $29 = value₁
-  352. copy_constant                  $30 = 0x40000000 (2.0)
-  353. cmpeq_float                    $29 = equal($29, $30)
-  354. copy_slot_masked               [mediump_param].result = Mask($29)
-  355. trace_var                      TraceVar([mediump_param].result) when $16 is true
-  356. trace_scope                    TraceScope(-1) when $16 is true
-  357. trace_exit                     TraceExit(bool mediump_param(half value)) when $16 is true
-  358. copy_slot_unmasked             $29 = [mediump_param].result
-  359. label                          label 0x0000000C
-  360. copy_slot_masked               $28 = Mask($29)
-  361. label                          label 0x00000002
-  362. load_condition_mask            CondMask = $31
-  363. zero_slot_unmasked             $0 = 0
-  364. merge_condition_mask           CondMask = $27 & $28
-  365. branch_if_no_lanes_active      branch_if_no_lanes_active +16 (label 1 at #381)
-  366. copy_constant                  value₂ = 0x40400000 (3.0)
-  367. trace_var                      TraceVar(value₂) when $16 is true
-  368. trace_enter                    TraceEnter(bool lowp_param(half value)) when $16 is true
-  369. trace_scope                    TraceScope(+1) when $16 is true
-  370. trace_line                     TraceLine(55) when $16 is true
-  371. copy_slot_unmasked             $1 = value₂
-  372. copy_constant                  $2 = 0x40400000 (3.0)
-  373. cmpeq_float                    $1 = equal($1, $2)
-  374. copy_slot_masked               [lowp_param].result = Mask($1)
-  375. trace_var                      TraceVar([lowp_param].result) when $16 is true
-  376. trace_scope                    TraceScope(-1) when $16 is true
-  377. trace_exit                     TraceExit(bool lowp_param(half value)) when $16 is true
-  378. copy_slot_unmasked             $1 = [lowp_param].result
-  379. label                          label 0x0000000D
-  380. copy_slot_masked               $0 = Mask($1)
-  381. label                          label 0x00000001
-  382. load_condition_mask            CondMask = $27
-  383. swizzle_4                      $0..3 = ($0..3).xxxx
-  384. copy_4_slots_unmasked          $4..7 = red
-  385. copy_4_slots_unmasked          $8..11 = green
-  386. mix_4_ints                     $0..3 = mix($4..7, $8..11, $0..3)
-  387. copy_4_slots_unmasked          [main].result = $0..3
-  388. trace_var                      TraceVar([main].result) when $16 is true
-  389. trace_scope                    TraceScope(-1) when $16 is true
-  390. trace_exit                     TraceExit(vec4 main(vec2 coords)) when $16 is true
-  391. load_src                       src.rgba = [main].result
+   49. store_condition_mask           $22 = CondMask
+   50. store_condition_mask           $52 = CondMask
+   51. store_condition_mask           $40 = CondMask
+   52. store_condition_mask           $13 = CondMask
+   53. branch_if_no_lanes_active      branch_if_no_lanes_active +29 (label 7 at #82)
+   54. trace_enter                    TraceEnter(bool test_scalar()) when $18 is true
+   55. zero_slot_unmasked             $14 = 0
+   56. copy_slot_unmasked             $15 = $18
+   57. copy_slot_masked               $14 = Mask($15)
+   58. trace_scope                    TraceScope(+1) when $14 is true
+   59. trace_line                     TraceLine(6) when $18 is true
+   60. copy_constant                  mp = 0x3F000000 (0.5)
+   61. trace_var                      TraceVar(mp) when $18 is true
+   62. trace_line                     TraceLine(7) when $18 is true
+   63. copy_slot_unmasked             hp = mp
+   64. trace_var                      TraceVar(hp) when $18 is true
+   65. trace_line                     TraceLine(8) when $18 is true
+   66. copy_constant                  ihp = 0x00000002 (2.802597e-45)
+   67. trace_var                      TraceVar(ihp) when $18 is true
+   68. trace_line                     TraceLine(9) when $18 is true
+   69. copy_slot_unmasked             imp = ihp
+   70. trace_var                      TraceVar(imp) when $18 is true
+   71. trace_line                     TraceLine(11) when $18 is true
+   72. copy_2_slots_unmasked          $15..16 = mp, hp
+   73. cmpeq_float                    $15 = equal($15, $16)
+   74. copy_2_slots_unmasked          $16..17 = ihp, imp
+   75. cmpeq_int                      $16 = equal($16, $17)
+   76. bitwise_and_int                $15 &= $16
+   77. copy_slot_masked               [test_scalar].result = Mask($15)
+   78. trace_var                      TraceVar([test_scalar].result) when $18 is true
+   79. trace_scope                    TraceScope(-1) when $14 is true
+   80. trace_exit                     TraceExit(bool test_scalar()) when $18 is true
+   81. copy_slot_unmasked             $14 = [test_scalar].result
+   82. label                          label 0x00000007
+   83. zero_slot_unmasked             $41 = 0
+   84. merge_condition_mask           CondMask = $13 & $14
+   85. branch_if_no_lanes_active      branch_if_no_lanes_active +94 (label 6 at #179)
+   86. trace_enter                    TraceEnter(bool test_vector()) when $18 is true
+   87. zero_slot_unmasked             $42 = 0
+   88. copy_slot_unmasked             $43 = $18
+   89. copy_slot_masked               $42 = Mask($43)
+   90. trace_scope                    TraceScope(+1) when $42 is true
+   91. trace_line                     TraceLine(15) when $18 is true
+   92. copy_constant                  $43 = 0x40000000 (2.0)
+   93. copy_slot_unmasked             $44 = $43
+   94. copy_2_slots_unmasked          mp2 = $43..44
+   95. trace_var                      TraceVar(mp2) when $18 is true
+   96. trace_line                     TraceLine(16) when $18 is true
+   97. copy_2_slots_unmasked          hp2 = mp2
+   98. trace_var                      TraceVar(hp2) when $18 is true
+   99. trace_line                     TraceLine(17) when $18 is true
+  100. copy_constant                  $43 = 0x40400000 (3.0)
+  101. swizzle_3                      $43..45 = ($43..45).xxx
+  102. copy_3_slots_unmasked          mp3 = $43..45
+  103. trace_var                      TraceVar(mp3) when $18 is true
+  104. trace_line                     TraceLine(18) when $18 is true
+  105. copy_3_slots_unmasked          hp3 = mp3
+  106. trace_var                      TraceVar(hp3) when $18 is true
+  107. trace_line                     TraceLine(19) when $18 is true
+  108. copy_constant                  $43 = 0x40800000 (4.0)
+  109. swizzle_4                      $43..46 = ($43..46).xxxx
+  110. copy_4_slots_unmasked          mp4 = $43..46
+  111. trace_var                      TraceVar(mp4) when $18 is true
+  112. trace_line                     TraceLine(20) when $18 is true
+  113. copy_4_slots_unmasked          hp4 = mp4
+  114. trace_var                      TraceVar(hp4) when $18 is true
+  115. trace_line                     TraceLine(22) when $18 is true
+  116. copy_constant                  $43 = 0x00000002 (2.802597e-45)
+  117. copy_slot_unmasked             $44 = $43
+  118. copy_2_slots_unmasked          ihp2 = $43..44
+  119. trace_var                      TraceVar(ihp2) when $18 is true
+  120. trace_line                     TraceLine(23) when $18 is true
+  121. copy_2_slots_unmasked          imp2 = ihp2
+  122. trace_var                      TraceVar(imp2) when $18 is true
+  123. trace_line                     TraceLine(24) when $18 is true
+  124. copy_constant                  $43 = 0x00000003 (4.203895e-45)
+  125. swizzle_3                      $43..45 = ($43..45).xxx
+  126. copy_3_slots_unmasked          ihp3 = $43..45
+  127. trace_var                      TraceVar(ihp3) when $18 is true
+  128. trace_line                     TraceLine(25) when $18 is true
+  129. copy_3_slots_unmasked          imp3 = ihp3
+  130. trace_var                      TraceVar(imp3) when $18 is true
+  131. trace_line                     TraceLine(26) when $18 is true
+  132. copy_constant                  $43 = 0x00000004 (5.605194e-45)
+  133. swizzle_4                      $43..46 = ($43..46).xxxx
+  134. copy_4_slots_unmasked          ihp4 = $43..46
+  135. trace_var                      TraceVar(ihp4) when $18 is true
+  136. trace_line                     TraceLine(27) when $18 is true
+  137. copy_4_slots_unmasked          imp4 = ihp4
+  138. trace_var                      TraceVar(imp4) when $18 is true
+  139. trace_line                     TraceLine(29) when $18 is true
+  140. copy_4_slots_unmasked          $43..46 = mp2, hp2
+  141. cmpeq_2_floats                 $43..44 = equal($43..44, $45..46)
+  142. bitwise_and_int                $43 &= $44
+  143. copy_3_slots_unmasked          $44..46 = hp3
+  144. copy_3_slots_unmasked          $47..49 = mp3
+  145. cmpeq_3_floats                 $44..46 = equal($44..46, $47..49)
+  146. bitwise_and_int                $45 &= $46
+  147. bitwise_and_int                $44 &= $45
+  148. bitwise_and_int                $43 &= $44
+  149. copy_4_slots_unmasked          $44..47 = mp4
+  150. copy_4_slots_unmasked          $48..51 = hp4
+  151. cmpeq_4_floats                 $44..47 = equal($44..47, $48..51)
+  152. bitwise_and_2_ints             $44..45 &= $46..47
+  153. bitwise_and_int                $44 &= $45
+  154. bitwise_and_int                $43 &= $44
+  155. copy_2_slots_unmasked          $44..45 = imp2
+  156. copy_2_slots_unmasked          $46..47 = ihp2
+  157. cmpeq_2_ints                   $44..45 = equal($44..45, $46..47)
+  158. bitwise_and_int                $44 &= $45
+  159. bitwise_and_int                $43 &= $44
+  160. copy_4_slots_unmasked          $44..47 = ihp3, imp3(0)
+  161. copy_2_slots_unmasked          $48..49 = imp3(1..2)
+  162. cmpeq_3_ints                   $44..46 = equal($44..46, $47..49)
+  163. bitwise_and_int                $45 &= $46
+  164. bitwise_and_int                $44 &= $45
+  165. bitwise_and_int                $43 &= $44
+  166. copy_4_slots_unmasked          $44..47 = imp4
+  167. copy_4_slots_unmasked          $48..51 = ihp4
+  168. cmpeq_4_ints                   $44..47 = equal($44..47, $48..51)
+  169. bitwise_and_2_ints             $44..45 &= $46..47
+  170. bitwise_and_int                $44 &= $45
+  171. bitwise_and_int                $43 &= $44
+  172. copy_slot_masked               [test_vector].result = Mask($43)
+  173. trace_var                      TraceVar([test_vector].result) when $18 is true
+  174. trace_scope                    TraceScope(-1) when $42 is true
+  175. trace_exit                     TraceExit(bool test_vector()) when $18 is true
+  176. copy_slot_unmasked             $42 = [test_vector].result
+  177. label                          label 0x00000008
+  178. copy_slot_masked               $41 = Mask($42)
+  179. label                          label 0x00000006
+  180. load_condition_mask            CondMask = $13
+  181. zero_slot_unmasked             $53 = 0
+  182. merge_condition_mask           CondMask = $40 & $41
+  183. branch_if_no_lanes_active      branch_if_no_lanes_active +83 (label 5 at #266)
+  184. trace_enter                    TraceEnter(bool test_matrix()) when $18 is true
+  185. zero_slot_unmasked             $54 = 0
+  186. copy_slot_unmasked             $55 = $18
+  187. copy_slot_masked               $54 = Mask($55)
+  188. trace_scope                    TraceScope(+1) when $54 is true
+  189. trace_line                     TraceLine(34) when $18 is true
+  190. zero_slot_unmasked             $55 = 0
+  191. copy_constant                  $56 = 0x40000000 (2.0)
+  192. swizzle_4                      $55..58 = ($55..58).yxxy
+  193. copy_4_slots_unmasked          mp2₁ = $55..58
+  194. trace_var                      TraceVar(mp2₁) when $18 is true
+  195. trace_line                     TraceLine(35) when $18 is true
+  196. copy_4_slots_unmasked          hp2₁ = mp2₁
+  197. trace_var                      TraceVar(hp2₁) when $18 is true
+  198. trace_line                     TraceLine(36) when $18 is true
+  199. zero_slot_unmasked             $55 = 0
+  200. copy_constant                  $56 = 0x40400000 (3.0)
+  201. shuffle                        $55..63 = ($55..63)[1 0 0 0 1 0 0 0 1]
+  202. copy_4_slots_unmasked          mp3₁(0..3) = $55..58
+  203. copy_4_slots_unmasked          mp3₁(4..7) = $59..62
+  204. copy_slot_unmasked             mp3₁(8) = $63
+  205. trace_var                      TraceVar(mp3₁) when $18 is true
+  206. trace_line                     TraceLine(37) when $18 is true
+  207. copy_4_slots_unmasked          hp3₁(0..3) = mp3₁(0..3)
+  208. copy_4_slots_unmasked          hp3₁(4..7) = mp3₁(4..7)
+  209. copy_slot_unmasked             hp3₁(8) = mp3₁(8)
+  210. trace_var                      TraceVar(hp3₁) when $18 is true
+  211. trace_line                     TraceLine(38) when $18 is true
+  212. zero_slot_unmasked             $55 = 0
+  213. copy_constant                  $56 = 0x40800000 (4.0)
+  214. shuffle                        $55..70 = ($55..70)[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1]
+  215. copy_4_slots_unmasked          mp4₁(0..3) = $55..58
+  216. copy_4_slots_unmasked          mp4₁(4..7) = $59..62
+  217. copy_4_slots_unmasked          mp4₁(8..11) = $63..66
+  218. copy_4_slots_unmasked          mp4₁(12..15) = $67..70
+  219. trace_var                      TraceVar(mp4₁) when $18 is true
+  220. trace_line                     TraceLine(39) when $18 is true
+  221. copy_4_slots_unmasked          hp4₁(0..3) = mp4₁(0..3)
+  222. copy_4_slots_unmasked          hp4₁(4..7) = mp4₁(4..7)
+  223. copy_4_slots_unmasked          hp4₁(8..11) = mp4₁(8..11)
+  224. copy_4_slots_unmasked          hp4₁(12..15) = mp4₁(12..15)
+  225. trace_var                      TraceVar(hp4₁) when $18 is true
+  226. trace_line                     TraceLine(41) when $18 is true
+  227. copy_4_slots_unmasked          $55..58 = mp2₁
+  228. copy_4_slots_unmasked          $59..62 = hp2₁
+  229. cmpeq_4_floats                 $55..58 = equal($55..58, $59..62)
+  230. bitwise_and_2_ints             $55..56 &= $57..58
+  231. bitwise_and_int                $55 &= $56
+  232. copy_4_slots_unmasked          $56..59 = hp3₁(0..3)
+  233. copy_4_slots_unmasked          $60..63 = hp3₁(4..7)
+  234. copy_slot_unmasked             $64 = hp3₁(8)
+  235. copy_4_slots_unmasked          $65..68 = mp3₁(0..3)
+  236. copy_4_slots_unmasked          $69..72 = mp3₁(4..7)
+  237. copy_slot_unmasked             $73 = mp3₁(8)
+  238. cmpeq_n_floats                 $56..64 = equal($56..64, $65..73)
+  239. bitwise_and_4_ints             $57..60 &= $61..64
+  240. bitwise_and_2_ints             $57..58 &= $59..60
+  241. bitwise_and_int                $57 &= $58
+  242. bitwise_and_int                $56 &= $57
+  243. bitwise_and_int                $55 &= $56
+  244. copy_4_slots_unmasked          $56..59 = mp4₁(0..3)
+  245. copy_4_slots_unmasked          $60..63 = mp4₁(4..7)
+  246. copy_4_slots_unmasked          $64..67 = mp4₁(8..11)
+  247. copy_4_slots_unmasked          $68..71 = mp4₁(12..15)
+  248. copy_4_slots_unmasked          $72..75 = hp4₁(0..3)
+  249. copy_4_slots_unmasked          $76..79 = hp4₁(4..7)
+  250. copy_4_slots_unmasked          $80..83 = hp4₁(8..11)
+  251. copy_4_slots_unmasked          $84..87 = hp4₁(12..15)
+  252. cmpeq_n_floats                 $56..71 = equal($56..71, $72..87)
+  253. bitwise_and_4_ints             $64..67 &= $68..71
+  254. bitwise_and_4_ints             $60..63 &= $64..67
+  255. bitwise_and_4_ints             $56..59 &= $60..63
+  256. bitwise_and_2_ints             $56..57 &= $58..59
+  257. bitwise_and_int                $56 &= $57
+  258. bitwise_and_int                $55 &= $56
+  259. copy_slot_masked               [test_matrix].result = Mask($55)
+  260. trace_var                      TraceVar([test_matrix].result) when $18 is true
+  261. trace_scope                    TraceScope(-1) when $54 is true
+  262. trace_exit                     TraceExit(bool test_matrix()) when $18 is true
+  263. copy_slot_unmasked             $54 = [test_matrix].result
+  264. label                          label 0x00000009
+  265. copy_slot_masked               $53 = Mask($54)
+  266. label                          label 0x00000005
+  267. load_condition_mask            CondMask = $40
+  268. zero_slot_unmasked             $23 = 0
+  269. merge_condition_mask           CondMask = $52 & $53
+  270. branch_if_no_lanes_active      branch_if_no_lanes_active +66 (label 4 at #336)
+  271. trace_enter                    TraceEnter(bool test_array()) when $18 is true
+  272. zero_slot_unmasked             $24 = 0
+  273. copy_slot_unmasked             $25 = $18
+  274. copy_slot_masked               $24 = Mask($25)
+  275. trace_scope                    TraceScope(+1) when $24 is true
+  276. trace_line                     TraceLine(45) when $18 is true
+  277. zero_slot_unmasked             mf[0] = 0
+  278. trace_var                      TraceVar(mf[0]) when $18 is true
+  279. trace_line                     TraceLine(45) when $18 is true
+  280. copy_constant                  $25 = 0x3F800000 (1.0)
+  281. copy_slot_masked               mf[0] = Mask($25)
+  282. trace_var                      TraceVar(mf[0]) when $18 is true
+  283. trace_line                     TraceLine(46) when $18 is true
+  284. zero_slot_unmasked             hf[0] = 0
+  285. trace_var                      TraceVar(hf[0]) when $18 is true
+  286. trace_line                     TraceLine(46) when $18 is true
+  287. copy_constant                  $25 = 0x3F800000 (1.0)
+  288. copy_slot_masked               hf[0] = Mask($25)
+  289. trace_var                      TraceVar(hf[0]) when $18 is true
+  290. trace_line                     TraceLine(47) when $18 is true
+  291. zero_4_slots_unmasked          mv[0], mv[1] = 0
+  292. trace_var                      TraceVar(mv[0], mv[1]) when $18 is true
+  293. trace_line                     TraceLine(47) when $18 is true
+  294. zero_slot_unmasked             $25 = 0
+  295. copy_constant                  $26 = 0x3F800000 (1.0)
+  296. copy_2_slots_masked            mv[0] = Mask($25..26)
+  297. trace_var                      TraceVar(mv[0]) when $18 is true
+  298. trace_line                     TraceLine(47) when $18 is true
+  299. copy_constant                  $25 = 0x40000000 (2.0)
+  300. copy_constant                  $26 = 0x40400000 (3.0)
+  301. copy_2_slots_masked            mv[1] = Mask($25..26)
+  302. trace_var                      TraceVar(mv[1]) when $18 is true
+  303. trace_line                     TraceLine(48) when $18 is true
+  304. zero_4_slots_unmasked          hv[0], hv[1] = 0
+  305. trace_var                      TraceVar(hv[0], hv[1]) when $18 is true
+  306. trace_line                     TraceLine(48) when $18 is true
+  307. zero_slot_unmasked             $25 = 0
+  308. copy_constant                  $26 = 0x3F800000 (1.0)
+  309. copy_2_slots_masked            hv[0] = Mask($25..26)
+  310. trace_var                      TraceVar(hv[0]) when $18 is true
+  311. trace_line                     TraceLine(48) when $18 is true
+  312. copy_constant                  $25 = 0x40000000 (2.0)
+  313. copy_constant                  $26 = 0x40400000 (3.0)
+  314. copy_2_slots_masked            hv[1] = Mask($25..26)
+  315. trace_var                      TraceVar(hv[1]) when $18 is true
+  316. trace_line                     TraceLine(50) when $18 is true
+  317. copy_2_slots_unmasked          $25..26 = mf[0], hf[0]
+  318. cmpeq_float                    $25 = equal($25, $26)
+  319. copy_2_slots_unmasked          $26..27 = hv[0]
+  320. copy_2_slots_unmasked          $28..29 = mv[0]
+  321. cmpeq_2_floats                 $26..27 = equal($26..27, $28..29)
+  322. bitwise_and_int                $26 &= $27
+  323. bitwise_and_int                $25 &= $26
+  324. copy_2_slots_unmasked          $26..27 = mv[1]
+  325. copy_2_slots_unmasked          $28..29 = hv[1]
+  326. cmpeq_2_floats                 $26..27 = equal($26..27, $28..29)
+  327. bitwise_and_int                $26 &= $27
+  328. bitwise_and_int                $25 &= $26
+  329. copy_slot_masked               [test_array].result = Mask($25)
+  330. trace_var                      TraceVar([test_array].result) when $18 is true
+  331. trace_scope                    TraceScope(-1) when $24 is true
+  332. trace_exit                     TraceExit(bool test_array()) when $18 is true
+  333. copy_slot_unmasked             $24 = [test_array].result
+  334. label                          label 0x0000000A
+  335. copy_slot_masked               $23 = Mask($24)
+  336. label                          label 0x00000004
+  337. load_condition_mask            CondMask = $52
+  338. zero_slot_unmasked             $36 = 0
+  339. merge_condition_mask           CondMask = $22 & $23
+  340. branch_if_no_lanes_active      branch_if_no_lanes_active +19 (label 3 at #359)
+  341. copy_constant                  value = 0x3F800000 (1.0)
+  342. trace_var                      TraceVar(value) when $18 is true
+  343. trace_enter                    TraceEnter(bool highp_param(float value)) when $18 is true
+  344. zero_slot_unmasked             $37 = 0
+  345. copy_slot_unmasked             $38 = $18
+  346. copy_slot_masked               $37 = Mask($38)
+  347. trace_scope                    TraceScope(+1) when $37 is true
+  348. trace_line                     TraceLine(53) when $18 is true
+  349. copy_slot_unmasked             $38 = value
+  350. copy_constant                  $39 = 0x3F800000 (1.0)
+  351. cmpeq_float                    $38 = equal($38, $39)
+  352. copy_slot_masked               [highp_param].result = Mask($38)
+  353. trace_var                      TraceVar([highp_param].result) when $18 is true
+  354. trace_scope                    TraceScope(-1) when $37 is true
+  355. trace_exit                     TraceExit(bool highp_param(float value)) when $18 is true
+  356. copy_slot_unmasked             $37 = [highp_param].result
+  357. label                          label 0x0000000B
+  358. copy_slot_masked               $36 = Mask($37)
+  359. label                          label 0x00000003
+  360. load_condition_mask            CondMask = $22
+  361. zero_slot_unmasked             $31 = 0
+  362. merge_condition_mask           CondMask = $35 & $36
+  363. branch_if_no_lanes_active      branch_if_no_lanes_active +19 (label 2 at #382)
+  364. copy_constant                  value₁ = 0x40000000 (2.0)
+  365. trace_var                      TraceVar(value₁) when $18 is true
+  366. trace_enter                    TraceEnter(bool mediump_param(half value)) when $18 is true
+  367. zero_slot_unmasked             $32 = 0
+  368. copy_slot_unmasked             $33 = $18
+  369. copy_slot_masked               $32 = Mask($33)
+  370. trace_scope                    TraceScope(+1) when $32 is true
+  371. trace_line                     TraceLine(54) when $18 is true
+  372. copy_slot_unmasked             $33 = value₁
+  373. copy_constant                  $34 = 0x40000000 (2.0)
+  374. cmpeq_float                    $33 = equal($33, $34)
+  375. copy_slot_masked               [mediump_param].result = Mask($33)
+  376. trace_var                      TraceVar([mediump_param].result) when $18 is true
+  377. trace_scope                    TraceScope(-1) when $32 is true
+  378. trace_exit                     TraceExit(bool mediump_param(half value)) when $18 is true
+  379. copy_slot_unmasked             $32 = [mediump_param].result
+  380. label                          label 0x0000000C
+  381. copy_slot_masked               $31 = Mask($32)
+  382. label                          label 0x00000002
+  383. load_condition_mask            CondMask = $35
+  384. zero_slot_unmasked             $1 = 0
+  385. merge_condition_mask           CondMask = $30 & $31
+  386. branch_if_no_lanes_active      branch_if_no_lanes_active +19 (label 1 at #405)
+  387. copy_constant                  value₂ = 0x40400000 (3.0)
+  388. trace_var                      TraceVar(value₂) when $18 is true
+  389. trace_enter                    TraceEnter(bool lowp_param(half value)) when $18 is true
+  390. zero_slot_unmasked             $2 = 0
+  391. copy_slot_unmasked             $3 = $18
+  392. copy_slot_masked               $2 = Mask($3)
+  393. trace_scope                    TraceScope(+1) when $2 is true
+  394. trace_line                     TraceLine(55) when $18 is true
+  395. copy_slot_unmasked             $3 = value₂
+  396. copy_constant                  $4 = 0x40400000 (3.0)
+  397. cmpeq_float                    $3 = equal($3, $4)
+  398. copy_slot_masked               [lowp_param].result = Mask($3)
+  399. trace_var                      TraceVar([lowp_param].result) when $18 is true
+  400. trace_scope                    TraceScope(-1) when $2 is true
+  401. trace_exit                     TraceExit(bool lowp_param(half value)) when $18 is true
+  402. copy_slot_unmasked             $2 = [lowp_param].result
+  403. label                          label 0x0000000D
+  404. copy_slot_masked               $1 = Mask($2)
+  405. label                          label 0x00000001
+  406. load_condition_mask            CondMask = $30
+  407. swizzle_4                      $1..4 = ($1..4).xxxx
+  408. copy_4_slots_unmasked          $5..8 = red
+  409. copy_4_slots_unmasked          $9..12 = green
+  410. mix_4_ints                     $1..4 = mix($5..8, $9..12, $1..4)
+  411. copy_4_slots_unmasked          [main].result = $1..4
+  412. trace_var                      TraceVar([main].result) when $18 is true
+  413. trace_scope                    TraceScope(-1) when $0 is true
+  414. trace_exit                     TraceExit(vec4 main(vec2 coords)) when $18 is true
+  415. load_src                       src.rgba = [main].result
diff --git a/tests/sksl/shared/MatrixIndexStore.skrp b/tests/sksl/shared/MatrixIndexStore.skrp
index 4c19074..3518ccc 100644
--- a/tests/sksl/shared/MatrixIndexStore.skrp
+++ b/tests/sksl/shared/MatrixIndexStore.skrp
@@ -1,163 +1,184 @@
-    1. store_device_xy01              $54..57 = DeviceCoords.xy01
-    2. copy_constant                  $56 = 0x3F000000 (0.5)
-    3. copy_constant                  $57 = 0x3F000000 (0.5)
-    4. cmpeq_2_floats                 $54..55 = equal($54..55, $56..57)
-    5. bitwise_and_int                $54 &= $55
+    1. store_device_xy01              $57..60 = DeviceCoords.xy01
+    2. copy_constant                  $59 = 0x3F000000 (0.5)
+    3. copy_constant                  $60 = 0x3F000000 (0.5)
+    4. cmpeq_2_floats                 $57..58 = equal($57..58, $59..60)
+    5. bitwise_and_int                $57 &= $58
     6. store_src_rg                   coords = src.rg
     7. init_lane_masks                CondMask = LoopMask = RetMask = true
-    8. trace_enter                    TraceEnter(half4 main(float2 coords)) when $54 is true
-    9. trace_var                      TraceVar(coords) when $54 is true
-   10. trace_scope                    TraceScope(+1) when $54 is true
-   11. trace_line                     TraceLine(28) when $54 is true
-   12. store_condition_mask           $35 = CondMask
-   13. branch_if_no_lanes_active      branch_if_no_lanes_active +65 (label 2 at #78)
-   14. trace_enter                    TraceEnter(bool test3x3()) when $54 is true
-   15. trace_scope                    TraceScope(+1) when $54 is true
-   16. trace_line                     TraceLine(8) when $54 is true
-   17. zero_4_slots_unmasked          matrix(0..3) = 0
-   18. zero_4_slots_unmasked          matrix(4..7) = 0
-   19. zero_slot_unmasked             matrix(8) = 0
-   20. trace_var                      TraceVar(matrix) when $54 is true
-   21. trace_line                     TraceLine(9) when $54 is true
-   22. copy_constant                  values(0) = 0x3F800000 (1.0)
-   23. copy_constant                  values(1) = 0x40000000 (2.0)
-   24. copy_constant                  values(2) = 0x40400000 (3.0)
-   25. trace_var                      TraceVar(values) when $54 is true
-   26. trace_scope                    TraceScope(+1) when $54 is true
-   27. branch_if_no_lanes_active      branch_if_no_lanes_active +32 (label 3 at #59)
-   28. trace_line                     TraceLine(10) when $54 is true
-   29. zero_slot_unmasked             index = 0
-   30. trace_var                      TraceVar(index) when $54 is true
-   31. label                          label 0x00000004
-   32. trace_scope                    TraceScope(+1) when $54 is true
-   33. trace_line                     TraceLine(11) when $54 is true
-   34. copy_slot_unmasked             $33 = index
-   35. copy_constant                  $34 = 0x00000003 (4.203895e-45)
-   36. mul_int                        $33 *= $34
-   37. copy_3_slots_unmasked          $36..38 = values
-   38. copy_to_indirect_masked        Indirect(matrix(0..2) + $33) = Mask($36..38)
-   39. trace_var                      TraceVar(matrix(0..2) + $33) when $54 is true
-   40. trace_line                     TraceLine(12) when $54 is true
-   41. copy_3_slots_unmasked          $36..38 = values
-   42. copy_constant                  $39 = 0x40400000 (3.0)
-   43. swizzle_3                      $39..41 = ($39..41).xxx
-   44. add_3_floats                   $36..38 += $39..41
-   45. copy_3_slots_masked            values = Mask($36..38)
-   46. trace_var                      TraceVar(values) when $54 is true
-   47. trace_scope                    TraceScope(-1) when $54 is true
-   48. trace_line                     TraceLine(10) when $54 is true
-   49. copy_slot_unmasked             $36 = index
-   50. copy_constant                  $37 = 0x00000001 (1.401298e-45)
-   51. add_int                        $36 += $37
-   52. copy_slot_masked               index = Mask($36)
-   53. trace_var                      TraceVar(index) when $54 is true
-   54. copy_slot_unmasked             $36 = index
-   55. copy_constant                  $37 = 0x00000003 (4.203895e-45)
-   56. cmplt_int                      $36 = lessThan($36, $37)
-   57. stack_rewind
-   58. branch_if_no_active_lanes_eq   branch -27 (label 4 at #31) if no lanes of $36 == 0x00000000 (0.0)
-   59. label                          label 0x00000003
-   60. trace_scope                    TraceScope(-1) when $54 is true
-   61. trace_line                     TraceLine(14) when $54 is true
-   62. copy_4_slots_unmasked          $36..39 = matrix(0..3)
-   63. copy_4_slots_unmasked          $40..43 = matrix(4..7)
-   64. copy_slot_unmasked             $44 = matrix(8)
-   65. copy_4_constants               $45..48 = testMatrix3x3(0..3)
-   66. copy_4_constants               $49..52 = testMatrix3x3(4..7)
-   67. copy_constant                  $53 = testMatrix3x3(8)
-   68. cmpeq_n_floats                 $36..44 = equal($36..44, $45..53)
-   69. bitwise_and_4_ints             $37..40 &= $41..44
-   70. bitwise_and_2_ints             $37..38 &= $39..40
-   71. bitwise_and_int                $37 &= $38
-   72. bitwise_and_int                $36 &= $37
-   73. copy_slot_masked               [test3x3].result = Mask($36)
-   74. trace_var                      TraceVar([test3x3].result) when $54 is true
-   75. trace_scope                    TraceScope(-1) when $54 is true
-   76. trace_exit                     TraceExit(bool test3x3()) when $54 is true
-   77. copy_slot_unmasked             $36 = [test3x3].result
-   78. label                          label 0x00000002
-   79. zero_slot_unmasked             $0 = 0
-   80. merge_condition_mask           CondMask = $35 & $36
-   81. branch_if_no_lanes_active      branch_if_no_lanes_active +72 (label 1 at #153)
-   82. trace_enter                    TraceEnter(bool test4x4()) when $54 is true
-   83. trace_scope                    TraceScope(+1) when $54 is true
-   84. trace_line                     TraceLine(18) when $54 is true
-   85. zero_4_slots_unmasked          matrix₁(0..3) = 0
-   86. zero_4_slots_unmasked          matrix₁(4..7) = 0
-   87. zero_4_slots_unmasked          matrix₁(8..11) = 0
-   88. zero_4_slots_unmasked          matrix₁(12..15) = 0
-   89. trace_var                      TraceVar(matrix₁) when $54 is true
-   90. trace_line                     TraceLine(19) when $54 is true
-   91. copy_constant                  values₁(0) = 0x3F800000 (1.0)
-   92. copy_constant                  values₁(1) = 0x40000000 (2.0)
-   93. copy_constant                  values₁(2) = 0x40400000 (3.0)
-   94. copy_constant                  values₁(3) = 0x40800000 (4.0)
-   95. trace_var                      TraceVar(values₁) when $54 is true
-   96. trace_scope                    TraceScope(+1) when $54 is true
-   97. branch_if_no_lanes_active      branch_if_no_lanes_active +32 (label 6 at #129)
-   98. trace_line                     TraceLine(20) when $54 is true
-   99. zero_slot_unmasked             index₁ = 0
-  100. trace_var                      TraceVar(index₁) when $54 is true
-  101. label                          label 0x00000007
-  102. trace_scope                    TraceScope(+1) when $54 is true
-  103. trace_line                     TraceLine(21) when $54 is true
-  104. copy_slot_unmasked             $33 = index₁
-  105. copy_constant                  $34 = 0x00000004 (5.605194e-45)
-  106. mul_int                        $33 *= $34
-  107. copy_4_slots_unmasked          $1..4 = values₁
-  108. copy_to_indirect_masked        Indirect(matrix₁(0..3) + $33) = Mask($1..4)
-  109. trace_var                      TraceVar(matrix₁(0..3) + $33) when $54 is true
-  110. trace_line                     TraceLine(22) when $54 is true
-  111. copy_4_slots_unmasked          $1..4 = values₁
-  112. copy_constant                  $5 = 0x40800000 (4.0)
-  113. swizzle_4                      $5..8 = ($5..8).xxxx
-  114. add_4_floats                   $1..4 += $5..8
-  115. copy_4_slots_masked            values₁ = Mask($1..4)
-  116. trace_var                      TraceVar(values₁) when $54 is true
-  117. trace_scope                    TraceScope(-1) when $54 is true
-  118. trace_line                     TraceLine(20) when $54 is true
-  119. copy_slot_unmasked             $1 = index₁
-  120. copy_constant                  $2 = 0x00000001 (1.401298e-45)
-  121. add_int                        $1 += $2
-  122. copy_slot_masked               index₁ = Mask($1)
-  123. trace_var                      TraceVar(index₁) when $54 is true
-  124. copy_slot_unmasked             $1 = index₁
-  125. copy_constant                  $2 = 0x00000004 (5.605194e-45)
-  126. cmplt_int                      $1 = lessThan($1, $2)
-  127. stack_rewind
-  128. branch_if_no_active_lanes_eq   branch -27 (label 7 at #101) if no lanes of $1 == 0x00000000 (0.0)
-  129. label                          label 0x00000006
-  130. trace_scope                    TraceScope(-1) when $54 is true
-  131. trace_line                     TraceLine(24) when $54 is true
-  132. copy_4_slots_unmasked          $1..4 = matrix₁(0..3)
-  133. copy_4_slots_unmasked          $5..8 = matrix₁(4..7)
-  134. copy_4_slots_unmasked          $9..12 = matrix₁(8..11)
-  135. copy_4_slots_unmasked          $13..16 = matrix₁(12..15)
-  136. copy_4_constants               $17..20 = testMatrix4x4(0..3)
-  137. copy_4_constants               $21..24 = testMatrix4x4(4..7)
-  138. copy_4_constants               $25..28 = testMatrix4x4(8..11)
-  139. copy_4_constants               $29..32 = testMatrix4x4(12..15)
-  140. cmpeq_n_floats                 $1..16 = equal($1..16, $17..32)
-  141. bitwise_and_4_ints             $9..12 &= $13..16
-  142. bitwise_and_4_ints             $5..8 &= $9..12
-  143. bitwise_and_4_ints             $1..4 &= $5..8
-  144. bitwise_and_2_ints             $1..2 &= $3..4
-  145. bitwise_and_int                $1 &= $2
-  146. copy_slot_masked               [test4x4].result = Mask($1)
-  147. trace_var                      TraceVar([test4x4].result) when $54 is true
-  148. trace_scope                    TraceScope(-1) when $54 is true
-  149. trace_exit                     TraceExit(bool test4x4()) when $54 is true
-  150. copy_slot_unmasked             $1 = [test4x4].result
-  151. label                          label 0x00000005
-  152. copy_slot_masked               $0 = Mask($1)
-  153. label                          label 0x00000001
-  154. load_condition_mask            CondMask = $35
-  155. swizzle_4                      $0..3 = ($0..3).xxxx
-  156. copy_4_constants               $4..7 = colorRed
-  157. copy_4_constants               $8..11 = colorGreen
-  158. mix_4_ints                     $0..3 = mix($4..7, $8..11, $0..3)
-  159. copy_4_slots_unmasked          [main].result = $0..3
-  160. trace_var                      TraceVar([main].result) when $54 is true
-  161. trace_scope                    TraceScope(-1) when $54 is true
-  162. trace_exit                     TraceExit(half4 main(float2 coords)) when $54 is true
-  163. load_src                       src.rgba = [main].result
+    8. trace_enter                    TraceEnter(half4 main(float2 coords)) when $57 is true
+    9. trace_var                      TraceVar(coords) when $57 is true
+   10. zero_slot_unmasked             $0 = 0
+   11. copy_slot_unmasked             $1 = $57
+   12. copy_slot_masked               $0 = Mask($1)
+   13. trace_scope                    TraceScope(+1) when $0 is true
+   14. trace_line                     TraceLine(28) when $57 is true
+   15. store_condition_mask           $37 = CondMask
+   16. branch_if_no_lanes_active      branch_if_no_lanes_active +74 (label 2 at #90)
+   17. trace_enter                    TraceEnter(bool test3x3()) when $57 is true
+   18. zero_slot_unmasked             $38 = 0
+   19. copy_slot_unmasked             $39 = $57
+   20. copy_slot_masked               $38 = Mask($39)
+   21. trace_scope                    TraceScope(+1) when $38 is true
+   22. trace_line                     TraceLine(8) when $57 is true
+   23. zero_4_slots_unmasked          matrix(0..3) = 0
+   24. zero_4_slots_unmasked          matrix(4..7) = 0
+   25. zero_slot_unmasked             matrix(8) = 0
+   26. trace_var                      TraceVar(matrix) when $57 is true
+   27. trace_line                     TraceLine(9) when $57 is true
+   28. copy_constant                  values(0) = 0x3F800000 (1.0)
+   29. copy_constant                  values(1) = 0x40000000 (2.0)
+   30. copy_constant                  values(2) = 0x40400000 (3.0)
+   31. trace_var                      TraceVar(values) when $57 is true
+   32. zero_slot_unmasked             $39 = 0
+   33. copy_slot_unmasked             $40 = $57
+   34. copy_slot_masked               $39 = Mask($40)
+   35. trace_scope                    TraceScope(+1) when $39 is true
+   36. branch_if_no_lanes_active      branch_if_no_lanes_active +35 (label 3 at #71)
+   37. trace_line                     TraceLine(10) when $57 is true
+   38. zero_slot_unmasked             index = 0
+   39. trace_var                      TraceVar(index) when $57 is true
+   40. label                          label 0x00000004
+   41. zero_slot_unmasked             $40 = 0
+   42. copy_slot_unmasked             $41 = $57
+   43. copy_slot_masked               $40 = Mask($41)
+   44. trace_scope                    TraceScope(+1) when $40 is true
+   45. trace_line                     TraceLine(11) when $57 is true
+   46. copy_slot_unmasked             $35 = index
+   47. copy_constant                  $36 = 0x00000003 (4.203895e-45)
+   48. mul_int                        $35 *= $36
+   49. copy_3_slots_unmasked          $41..43 = values
+   50. copy_to_indirect_masked        Indirect(matrix(0..2) + $35) = Mask($41..43)
+   51. trace_var                      TraceVar(matrix(0..2) + $35) when $57 is true
+   52. trace_line                     TraceLine(12) when $57 is true
+   53. copy_3_slots_unmasked          $41..43 = values
+   54. copy_constant                  $44 = 0x40400000 (3.0)
+   55. swizzle_3                      $44..46 = ($44..46).xxx
+   56. add_3_floats                   $41..43 += $44..46
+   57. copy_3_slots_masked            values = Mask($41..43)
+   58. trace_var                      TraceVar(values) when $57 is true
+   59. trace_scope                    TraceScope(-1) when $40 is true
+   60. trace_line                     TraceLine(10) when $57 is true
+   61. copy_slot_unmasked             $40 = index
+   62. copy_constant                  $41 = 0x00000001 (1.401298e-45)
+   63. add_int                        $40 += $41
+   64. copy_slot_masked               index = Mask($40)
+   65. trace_var                      TraceVar(index) when $57 is true
+   66. copy_slot_unmasked             $40 = index
+   67. copy_constant                  $41 = 0x00000003 (4.203895e-45)
+   68. cmplt_int                      $40 = lessThan($40, $41)
+   69. stack_rewind
+   70. branch_if_no_active_lanes_eq   branch -30 (label 4 at #40) if no lanes of $40 == 0x00000000 (0.0)
+   71. label                          label 0x00000003
+   72. trace_scope                    TraceScope(-1) when $39 is true
+   73. trace_line                     TraceLine(14) when $57 is true
+   74. copy_4_slots_unmasked          $39..42 = matrix(0..3)
+   75. copy_4_slots_unmasked          $43..46 = matrix(4..7)
+   76. copy_slot_unmasked             $47 = matrix(8)
+   77. copy_4_constants               $48..51 = testMatrix3x3(0..3)
+   78. copy_4_constants               $52..55 = testMatrix3x3(4..7)
+   79. copy_constant                  $56 = testMatrix3x3(8)
+   80. cmpeq_n_floats                 $39..47 = equal($39..47, $48..56)
+   81. bitwise_and_4_ints             $40..43 &= $44..47
+   82. bitwise_and_2_ints             $40..41 &= $42..43
+   83. bitwise_and_int                $40 &= $41
+   84. bitwise_and_int                $39 &= $40
+   85. copy_slot_masked               [test3x3].result = Mask($39)
+   86. trace_var                      TraceVar([test3x3].result) when $57 is true
+   87. trace_scope                    TraceScope(-1) when $38 is true
+   88. trace_exit                     TraceExit(bool test3x3()) when $57 is true
+   89. copy_slot_unmasked             $38 = [test3x3].result
+   90. label                          label 0x00000002
+   91. zero_slot_unmasked             $1 = 0
+   92. merge_condition_mask           CondMask = $37 & $38
+   93. branch_if_no_lanes_active      branch_if_no_lanes_active +81 (label 1 at #174)
+   94. trace_enter                    TraceEnter(bool test4x4()) when $57 is true
+   95. zero_slot_unmasked             $2 = 0
+   96. copy_slot_unmasked             $3 = $57
+   97. copy_slot_masked               $2 = Mask($3)
+   98. trace_scope                    TraceScope(+1) when $2 is true
+   99. trace_line                     TraceLine(18) when $57 is true
+  100. zero_4_slots_unmasked          matrix₁(0..3) = 0
+  101. zero_4_slots_unmasked          matrix₁(4..7) = 0
+  102. zero_4_slots_unmasked          matrix₁(8..11) = 0
+  103. zero_4_slots_unmasked          matrix₁(12..15) = 0
+  104. trace_var                      TraceVar(matrix₁) when $57 is true
+  105. trace_line                     TraceLine(19) when $57 is true
+  106. copy_constant                  values₁(0) = 0x3F800000 (1.0)
+  107. copy_constant                  values₁(1) = 0x40000000 (2.0)
+  108. copy_constant                  values₁(2) = 0x40400000 (3.0)
+  109. copy_constant                  values₁(3) = 0x40800000 (4.0)
+  110. trace_var                      TraceVar(values₁) when $57 is true
+  111. zero_slot_unmasked             $3 = 0
+  112. copy_slot_unmasked             $4 = $57
+  113. copy_slot_masked               $3 = Mask($4)
+  114. trace_scope                    TraceScope(+1) when $3 is true
+  115. branch_if_no_lanes_active      branch_if_no_lanes_active +35 (label 6 at #150)
+  116. trace_line                     TraceLine(20) when $57 is true
+  117. zero_slot_unmasked             index₁ = 0
+  118. trace_var                      TraceVar(index₁) when $57 is true
+  119. label                          label 0x00000007
+  120. zero_slot_unmasked             $4 = 0
+  121. copy_slot_unmasked             $5 = $57
+  122. copy_slot_masked               $4 = Mask($5)
+  123. trace_scope                    TraceScope(+1) when $4 is true
+  124. trace_line                     TraceLine(21) when $57 is true
+  125. copy_slot_unmasked             $35 = index₁
+  126. copy_constant                  $36 = 0x00000004 (5.605194e-45)
+  127. mul_int                        $35 *= $36
+  128. copy_4_slots_unmasked          $5..8 = values₁
+  129. copy_to_indirect_masked        Indirect(matrix₁(0..3) + $35) = Mask($5..8)
+  130. trace_var                      TraceVar(matrix₁(0..3) + $35) when $57 is true
+  131. trace_line                     TraceLine(22) when $57 is true
+  132. copy_4_slots_unmasked          $5..8 = values₁
+  133. copy_constant                  $9 = 0x40800000 (4.0)
+  134. swizzle_4                      $9..12 = ($9..12).xxxx
+  135. add_4_floats                   $5..8 += $9..12
+  136. copy_4_slots_masked            values₁ = Mask($5..8)
+  137. trace_var                      TraceVar(values₁) when $57 is true
+  138. trace_scope                    TraceScope(-1) when $4 is true
+  139. trace_line                     TraceLine(20) when $57 is true
+  140. copy_slot_unmasked             $4 = index₁
+  141. copy_constant                  $5 = 0x00000001 (1.401298e-45)
+  142. add_int                        $4 += $5
+  143. copy_slot_masked               index₁ = Mask($4)
+  144. trace_var                      TraceVar(index₁) when $57 is true
+  145. copy_slot_unmasked             $4 = index₁
+  146. copy_constant                  $5 = 0x00000004 (5.605194e-45)
+  147. cmplt_int                      $4 = lessThan($4, $5)
+  148. stack_rewind
+  149. branch_if_no_active_lanes_eq   branch -30 (label 7 at #119) if no lanes of $4 == 0x00000000 (0.0)
+  150. label                          label 0x00000006
+  151. trace_scope                    TraceScope(-1) when $3 is true
+  152. trace_line                     TraceLine(24) when $57 is true
+  153. copy_4_slots_unmasked          $3..6 = matrix₁(0..3)
+  154. copy_4_slots_unmasked          $7..10 = matrix₁(4..7)
+  155. copy_4_slots_unmasked          $11..14 = matrix₁(8..11)
+  156. copy_4_slots_unmasked          $15..18 = matrix₁(12..15)
+  157. copy_4_constants               $19..22 = testMatrix4x4(0..3)
+  158. copy_4_constants               $23..26 = testMatrix4x4(4..7)
+  159. copy_4_constants               $27..30 = testMatrix4x4(8..11)
+  160. copy_4_constants               $31..34 = testMatrix4x4(12..15)
+  161. cmpeq_n_floats                 $3..18 = equal($3..18, $19..34)
+  162. bitwise_and_4_ints             $11..14 &= $15..18
+  163. bitwise_and_4_ints             $7..10 &= $11..14
+  164. bitwise_and_4_ints             $3..6 &= $7..10
+  165. bitwise_and_2_ints             $3..4 &= $5..6
+  166. bitwise_and_int                $3 &= $4
+  167. copy_slot_masked               [test4x4].result = Mask($3)
+  168. trace_var                      TraceVar([test4x4].result) when $57 is true
+  169. trace_scope                    TraceScope(-1) when $2 is true
+  170. trace_exit                     TraceExit(bool test4x4()) when $57 is true
+  171. copy_slot_unmasked             $2 = [test4x4].result
+  172. label                          label 0x00000005
+  173. copy_slot_masked               $1 = Mask($2)
+  174. label                          label 0x00000001
+  175. load_condition_mask            CondMask = $37
+  176. swizzle_4                      $1..4 = ($1..4).xxxx
+  177. copy_4_constants               $5..8 = colorRed
+  178. copy_4_constants               $9..12 = colorGreen
+  179. mix_4_ints                     $1..4 = mix($5..8, $9..12, $1..4)
+  180. copy_4_slots_unmasked          [main].result = $1..4
+  181. trace_var                      TraceVar([main].result) when $57 is true
+  182. trace_scope                    TraceScope(-1) when $0 is true
+  183. trace_exit                     TraceExit(half4 main(float2 coords)) when $57 is true
+  184. load_src                       src.rgba = [main].result