diff --git a/src/core/SkRasterPipelineOpList.h b/src/core/SkRasterPipelineOpList.h index 05d11b261b02..9dfa06172897 100644 --- a/src/core/SkRasterPipelineOpList.h +++ b/src/core/SkRasterPipelineOpList.h @@ -60,7 +60,7 @@ M(init_lane_masks) M(store_device_xy01) M(exchange_src) \ M(load_condition_mask) M(store_condition_mask) M(merge_condition_mask) \ M(load_loop_mask) M(store_loop_mask) M(mask_off_loop_mask) \ - M(reenable_loop_mask) M(merge_loop_mask) M(case_op) \ + M(reenable_loop_mask) M(merge_loop_mask) M(case_op) M(continue_op) \ M(load_return_mask) M(store_return_mask) M(mask_off_return_mask) \ M(branch_if_all_lanes_active) M(branch_if_any_lanes_active) M(branch_if_no_lanes_active) \ M(branch_if_no_active_lanes_eq) M(jump) \ diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h index 996cad5b8bb0..9a5a125e1676 100644 --- a/src/opts/SkRasterPipeline_opts.h +++ b/src/opts/SkRasterPipeline_opts.h @@ -3385,6 +3385,15 @@ STAGE_TAIL(merge_loop_mask, I32* ptr) { update_execution_mask(); } +STAGE_TAIL(continue_op, I32* continueMask) { + // Set any currently-executing lanes in the continue-mask to true. + *continueMask |= execution_mask(); + + // Disable any currently-executing lanes from the loop mask. (Just like `mask_off_loop_mask`.) + g = sk_bit_cast(sk_bit_cast(g) & ~execution_mask()); + update_execution_mask(); +} + STAGE_TAIL(case_op, SkRasterPipeline_CaseOpCtx* ctx) { // Check each lane to see if the case value matches the expectation. I32* actualValue = (I32*)ctx->ptr; diff --git a/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp b/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp index 1dc0114ca91c..d634fb947685 100644 --- a/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp +++ b/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp @@ -2125,6 +2125,10 @@ void Program::makeStages(TArray* pipeline, pipeline->push_back({ProgramOp::case_op, ctx}); break; } + case BuilderOp::continue_op: + pipeline->push_back({ProgramOp::continue_op, tempStackMap[inst.fImmA] - (1 * N)}); + break; + case BuilderOp::pad_stack: case BuilderOp::discard_stack: break; @@ -2675,6 +2679,7 @@ void Program::dump(SkWStream* out) const { case POp::reenable_loop_mask: case POp::load_return_mask: case POp::store_return_mask: + case POp::continue_op: case POp::cast_to_float_from_int: case POp::cast_to_float_from_uint: case POp::cast_to_int_from_float: case POp::cast_to_uint_from_float: case POp::abs_float: case POp::abs_int: @@ -3421,11 +3426,16 @@ void Program::dump(SkWStream* out) const { opText = "label " + opArg1; break; - case POp::case_op: { + case POp::case_op: opText = "if (" + opArg1 + " == " + opArg3 + ") { LoopMask = true; " + opArg2 + " = false; }"; break; - } + + case POp::continue_op: + opText = opArg1 + + " |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask)"; + break; + default: break; } diff --git a/src/sksl/codegen/SkSLRasterPipelineBuilder.h b/src/sksl/codegen/SkSLRasterPipelineBuilder.h index ed0e9181498b..2d3bc141126c 100644 --- a/src/sksl/codegen/SkSLRasterPipelineBuilder.h +++ b/src/sksl/codegen/SkSLRasterPipelineBuilder.h @@ -502,6 +502,11 @@ class Builder { fInstructions.push_back({BuilderOp::case_op, {}, value}); } + // Performs a `continue` in a loop. + void continue_op(int continueMaskStackID) { + fInstructions.push_back({BuilderOp::continue_op, {}, continueMaskStackID}); + } + void select(int slots) { // Overlays the top two entries on the stack, making one hybrid entry. The execution mask // is used to select which lanes are preserved. diff --git a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp index 63ec1c485177..fb74935d7de9 100644 --- a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp +++ b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp @@ -595,6 +595,11 @@ class AutoContinueMask { } } + int stackID() { + SkASSERT(fContinueMaskStack.has_value()); + return fContinueMaskStack->stackID(); + } + private: std::optional fContinueMaskStack; Generator* fGenerator = nullptr; @@ -1579,18 +1584,7 @@ bool Generator::writeBreakStatement(const BreakStatement&) { } bool Generator::writeContinueStatement(const ContinueStatement&) { - // This could be written as one hand-tuned RasterPipeline op, but for now, we reuse existing ops - // to assemble a continue op. - - // Set any currently-executing lanes in the continue-mask to true via `select.` - fCurrentContinueMask->enter(); - fBuilder.push_constant_i(~0); - fBuilder.select(/*slots=*/1); - - // Disable any currently-executing lanes from the loop mask. - fBuilder.mask_off_loop_mask(); - fCurrentContinueMask->exit(); - + fBuilder.continue_op(fCurrentContinueMask->stackID()); return true; } diff --git a/tests/sksl/runtime/LoopFloat.skrp b/tests/sksl/runtime/LoopFloat.skrp index 56a63f4eb79d..a7fc92068767 100644 --- a/tests/sksl/runtime/LoopFloat.skrp +++ b/tests/sksl/runtime/LoopFloat.skrp @@ -105,7 +105,7 @@ label label 0x0000000A cmpeq_imm_float $100 = equal($100, 0x40A00000 (5.0)) copy_constant $90 = 0 merge_condition_mask CondMask = $99 & $100 -branch_if_no_lanes_active branch_if_no_lanes_active +73 (label 9 at #181) +branch_if_no_lanes_active branch_if_no_lanes_active +71 (label 9 at #179) trace_enter TraceEnter(float continue_loop(float five)) when $13 is true copy_slot_unmasked five₂ = five trace_var TraceVar(five₂) when $13 is true @@ -124,7 +124,7 @@ trace_line TraceLine(18) when $13 is true copy_constant i₁ = 0 trace_var TraceVar(i₁) when $13 is true store_loop_mask $93 = LoopMask -jump jump +35 (label 16 at #162) +jump jump +33 (label 16 at #160) label label 0x00000011 copy_constant $109 = 0 copy_constant $94 = 0 @@ -142,9 +142,7 @@ copy_slot_unmasked $98 = $13 copy_slot_masked $97 = Mask($98) trace_scope TraceScope(+1) when $97 is true trace_line TraceLine(19) when $13 is true -copy_constant $110 = 0xFFFFFFFF -copy_slot_masked $109 = Mask($110) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $109 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) trace_scope TraceScope(-1) when $97 is true load_condition_mask CondMask = $95 trace_line TraceLine(20) when $13 is true @@ -164,7 +162,7 @@ copy_slot_unmasked $94 = i₁ cmplt_imm_float $94 = lessThan($94, 0x41200000 (10.0)) merge_loop_mask LoopMask &= $94 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -39 (label 17 at #128) +branch_if_any_lanes_active branch_if_any_lanes_active -37 (label 17 at #128) label label 0x0000000F load_loop_mask LoopMask = $93 trace_scope TraceScope(-1) when $92 is true @@ -182,7 +180,7 @@ label label 0x00000009 load_condition_mask CondMask = $99 copy_constant $80 = 0 merge_condition_mask CondMask = $89 & $90 -branch_if_no_lanes_active branch_if_no_lanes_active +74 (label 8 at #259) +branch_if_no_lanes_active branch_if_no_lanes_active +74 (label 8 at #257) trace_enter TraceEnter(float break_loop(float five)) when $13 is true copy_slot_unmasked five₃ = five trace_var TraceVar(five₃) when $13 is true @@ -204,7 +202,7 @@ trace_line TraceLine(29) when $13 is true copy_constant i₂ = 0 trace_var TraceVar(i₂) when $13 is true store_loop_mask $83 = LoopMask -jump jump +33 (label 20 at #240) +jump jump +33 (label 20 at #238) label label 0x00000015 copy_constant $84 = 0 copy_slot_unmasked $85 = $13 @@ -221,7 +219,7 @@ copy_slot_unmasked $88 = $13 copy_slot_masked $87 = Mask($88) trace_scope TraceScope(+1) when $87 is true trace_line TraceLine(30) when $13 is true -branch_if_all_lanes_active branch_if_all_lanes_active +22 (label 19 at #246) +branch_if_all_lanes_active branch_if_all_lanes_active +22 (label 19 at #244) mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) trace_scope TraceScope(-1) when $87 is true load_condition_mask CondMask = $85 @@ -242,7 +240,7 @@ copy_slot_unmasked $84 = i₂ cmplt_imm_float $84 = lessThan($84, 0x41200000 (10.0)) merge_loop_mask LoopMask &= $84 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -37 (label 21 at #208) +branch_if_any_lanes_active branch_if_any_lanes_active -37 (label 21 at #206) label label 0x00000013 load_loop_mask LoopMask = $83 trace_scope TraceScope(-1) when $82 is true @@ -260,7 +258,7 @@ label label 0x00000008 load_condition_mask CondMask = $89 copy_constant $73 = 0 merge_condition_mask CondMask = $79 & $80 -branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 7 at #314) +branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 7 at #312) trace_enter TraceEnter(float float_loop()) when $13 is true copy_constant $74 = 0 copy_slot_unmasked $75 = $13 @@ -273,7 +271,7 @@ copy_constant $75 = 0 copy_slot_unmasked $76 = $13 copy_slot_masked $75 = Mask($76) trace_scope TraceScope(+1) when $75 is true -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 23 at #300) +branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 23 at #298) trace_line TraceLine(39) when $13 is true copy_constant i₃ = 0x3DFBE76D (0.123) trace_var TraceVar(i₃) when $13 is true @@ -296,7 +294,7 @@ trace_var TraceVar(i₃) when $13 is true copy_slot_unmasked $76 = i₃ cmplt_imm_float $76 = lessThan($76, 0x3F19999A (0.6)) stack_rewind -branch_if_no_active_lanes_eq branch -19 (label 24 at #280) if no lanes of $76 == 0 +branch_if_no_active_lanes_eq branch -19 (label 24 at #278) if no lanes of $76 == 0 label label 0x00000017 trace_scope TraceScope(-1) when $75 is true trace_line TraceLine(42) when $13 is true @@ -315,7 +313,7 @@ label label 0x00000007 load_condition_mask CondMask = $79 copy_constant $62 = 0 merge_condition_mask CondMask = $72 & $73 -branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 6 at #374) +branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 6 at #372) trace_enter TraceEnter(bool loop_operator_le()) when $13 is true copy_constant $63 = 0 copy_slot_unmasked $64 = $13 @@ -330,7 +328,7 @@ copy_constant $64 = 0 copy_slot_unmasked $65 = $13 copy_slot_masked $64 = Mask($65) trace_scope TraceScope(+1) when $64 is true -branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 26 at #356) +branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 26 at #354) trace_line TraceLine(51) when $13 is true copy_constant i₄ = 0x3F800000 (1.0) trace_var TraceVar(i₄) when $13 is true @@ -352,7 +350,7 @@ trace_var TraceVar(i₄) when $13 is true copy_slot_unmasked $65 = i₄ cmple_imm_float $65 = lessThanEqual($65, 0x40400000 (3.0)) stack_rewind -branch_if_no_active_lanes_eq branch -18 (label 27 at #337) if no lanes of $65 == 0 +branch_if_no_active_lanes_eq branch -18 (label 27 at #335) if no lanes of $65 == 0 label label 0x0000001A trace_scope TraceScope(-1) when $64 is true trace_line TraceLine(54) when $13 is true @@ -375,7 +373,7 @@ label label 0x00000006 load_condition_mask CondMask = $72 copy_constant $51 = 0 merge_condition_mask CondMask = $61 & $62 -branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 5 at #434) +branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 5 at #432) trace_enter TraceEnter(bool loop_operator_lt()) when $13 is true copy_constant $52 = 0 copy_slot_unmasked $53 = $13 @@ -390,7 +388,7 @@ copy_constant $53 = 0 copy_slot_unmasked $54 = $13 copy_slot_masked $53 = Mask($54) trace_scope TraceScope(+1) when $53 is true -branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 29 at #416) +branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 29 at #414) trace_line TraceLine(63) when $13 is true copy_constant i₅ = 0x3F800000 (1.0) trace_var TraceVar(i₅) when $13 is true @@ -412,7 +410,7 @@ trace_var TraceVar(i₅) when $13 is true copy_slot_unmasked $54 = i₅ cmplt_imm_float $54 = lessThan($54, 0x40800000 (4.0)) stack_rewind -branch_if_no_active_lanes_eq branch -18 (label 30 at #397) if no lanes of $54 == 0 +branch_if_no_active_lanes_eq branch -18 (label 30 at #395) if no lanes of $54 == 0 label label 0x0000001D trace_scope TraceScope(-1) when $53 is true trace_line TraceLine(66) when $13 is true @@ -435,7 +433,7 @@ label label 0x00000005 load_condition_mask CondMask = $61 copy_constant $40 = 0 merge_condition_mask CondMask = $50 & $51 -branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 4 at #495) +branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 4 at #493) trace_enter TraceEnter(bool loop_operator_ge()) when $13 is true copy_constant $41 = 0 copy_slot_unmasked $42 = $13 @@ -450,7 +448,7 @@ copy_constant $42 = 0 copy_slot_unmasked $43 = $13 copy_slot_masked $42 = Mask($43) trace_scope TraceScope(+1) when $42 is true -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 32 at #477) +branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 32 at #475) trace_line TraceLine(75) when $13 is true copy_constant i₆ = 0x40400000 (3.0) trace_var TraceVar(i₆) when $13 is true @@ -473,7 +471,7 @@ copy_constant $43 = 0x3F800000 (1.0) copy_slot_unmasked $44 = i₆ cmple_float $43 = lessThanEqual($43, $44) stack_rewind -branch_if_no_active_lanes_eq branch -19 (label 33 at #457) if no lanes of $43 == 0 +branch_if_no_active_lanes_eq branch -19 (label 33 at #455) if no lanes of $43 == 0 label label 0x00000020 trace_scope TraceScope(-1) when $42 is true trace_line TraceLine(78) when $13 is true @@ -496,7 +494,7 @@ label label 0x00000004 load_condition_mask CondMask = $50 copy_constant $29 = 0 merge_condition_mask CondMask = $39 & $40 -branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 3 at #556) +branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 3 at #554) trace_enter TraceEnter(bool loop_operator_gt()) when $13 is true copy_constant $30 = 0 copy_slot_unmasked $31 = $13 @@ -511,7 +509,7 @@ copy_constant $31 = 0 copy_slot_unmasked $32 = $13 copy_slot_masked $31 = Mask($32) trace_scope TraceScope(+1) when $31 is true -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 35 at #538) +branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 35 at #536) trace_line TraceLine(87) when $13 is true copy_constant i₇ = 0x40400000 (3.0) trace_var TraceVar(i₇) when $13 is true @@ -534,7 +532,7 @@ copy_constant $32 = 0 copy_slot_unmasked $33 = i₇ cmplt_float $32 = lessThan($32, $33) stack_rewind -branch_if_no_active_lanes_eq branch -19 (label 36 at #518) if no lanes of $32 == 0 +branch_if_no_active_lanes_eq branch -19 (label 36 at #516) if no lanes of $32 == 0 label label 0x00000023 trace_scope TraceScope(-1) when $31 is true trace_line TraceLine(90) when $13 is true @@ -557,7 +555,7 @@ label label 0x00000003 load_condition_mask CondMask = $39 copy_constant $18 = 0 merge_condition_mask CondMask = $28 & $29 -branch_if_no_lanes_active branch_if_no_lanes_active +45 (label 2 at #605) +branch_if_no_lanes_active branch_if_no_lanes_active +45 (label 2 at #603) trace_enter TraceEnter(bool loop_operator_eq()) when $13 is true copy_constant $19 = 0 copy_slot_unmasked $20 = $13 @@ -571,7 +569,7 @@ copy_constant $20 = 0 copy_slot_unmasked $21 = $13 copy_slot_masked $20 = Mask($21) trace_scope TraceScope(+1) when $20 is true -branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 38 at #589) +branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 38 at #587) trace_line TraceLine(109) when $13 is true copy_constant i₈ = 0x3F800000 (1.0) trace_var TraceVar(i₈) when $13 is true @@ -606,7 +604,7 @@ label label 0x00000002 load_condition_mask CondMask = $28 copy_constant $1 = 0 merge_condition_mask CondMask = $17 & $18 -branch_if_no_lanes_active branch_if_no_lanes_active +55 (label 1 at #664) +branch_if_no_lanes_active branch_if_no_lanes_active +55 (label 1 at #662) trace_enter TraceEnter(bool loop_operator_ne()) when $13 is true copy_constant $2 = 0 copy_slot_unmasked $3 = $13 @@ -620,7 +618,7 @@ copy_constant $3 = 0 copy_slot_unmasked $4 = $13 copy_slot_masked $3 = Mask($4) trace_scope TraceScope(+1) when $3 is true -branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 41 at #646) +branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 41 at #644) trace_line TraceLine(98) when $13 is true copy_constant i₉ = 0x3F800000 (1.0) trace_var TraceVar(i₉) when $13 is true @@ -642,7 +640,7 @@ trace_var TraceVar(i₉) when $13 is true copy_slot_unmasked $4 = i₉ cmplt_imm_float $4 = lessThan($4, 0x40800000 (4.0)) stack_rewind -branch_if_no_active_lanes_eq branch -18 (label 42 at #627) if no lanes of $4 == 0 +branch_if_no_active_lanes_eq branch -18 (label 42 at #625) if no lanes of $4 == 0 label label 0x00000029 trace_scope TraceScope(-1) when $3 is true trace_line TraceLine(101) when $13 is true diff --git a/tests/sksl/runtime/LoopInt.skrp b/tests/sksl/runtime/LoopInt.skrp index e2ac4eb10c77..fecd53de5781 100644 --- a/tests/sksl/runtime/LoopInt.skrp +++ b/tests/sksl/runtime/LoopInt.skrp @@ -105,7 +105,7 @@ label label 0x00000009 cmpeq_imm_int $93 = equal($93, 0x00000005) copy_constant $83 = 0 merge_condition_mask CondMask = $92 & $93 -branch_if_no_lanes_active branch_if_no_lanes_active +73 (label 8 at #181) +branch_if_no_lanes_active branch_if_no_lanes_active +71 (label 8 at #179) trace_enter TraceEnter(int continue_loop(int five)) when $13 is true copy_slot_unmasked five₂ = five trace_var TraceVar(five₂) when $13 is true @@ -124,7 +124,7 @@ trace_line TraceLine(18) when $13 is true copy_constant i₁ = 0 trace_var TraceVar(i₁) when $13 is true store_loop_mask $86 = LoopMask -jump jump +35 (label 15 at #162) +jump jump +33 (label 15 at #160) label label 0x00000010 copy_constant $102 = 0 copy_constant $87 = 0 @@ -142,9 +142,7 @@ copy_slot_unmasked $91 = $13 copy_slot_masked $90 = Mask($91) trace_scope TraceScope(+1) when $90 is true trace_line TraceLine(19) when $13 is true -copy_constant $103 = 0xFFFFFFFF -copy_slot_masked $102 = Mask($103) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $102 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) trace_scope TraceScope(-1) when $90 is true load_condition_mask CondMask = $88 trace_line TraceLine(20) when $13 is true @@ -164,7 +162,7 @@ copy_slot_unmasked $87 = i₁ cmplt_imm_int $87 = lessThan($87, 0x0000000A) merge_loop_mask LoopMask &= $87 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -39 (label 16 at #128) +branch_if_any_lanes_active branch_if_any_lanes_active -37 (label 16 at #128) label label 0x0000000E load_loop_mask LoopMask = $86 trace_scope TraceScope(-1) when $85 is true @@ -182,7 +180,7 @@ label label 0x00000008 load_condition_mask CondMask = $92 copy_constant $73 = 0 merge_condition_mask CondMask = $82 & $83 -branch_if_no_lanes_active branch_if_no_lanes_active +74 (label 7 at #259) +branch_if_no_lanes_active branch_if_no_lanes_active +74 (label 7 at #257) trace_enter TraceEnter(int break_loop(int five)) when $13 is true copy_constant five₃ = 0x00000005 (7.006492e-45) trace_var TraceVar(five₃) when $13 is true @@ -204,7 +202,7 @@ trace_line TraceLine(29) when $13 is true copy_constant i₂ = 0 trace_var TraceVar(i₂) when $13 is true store_loop_mask $76 = LoopMask -jump jump +33 (label 19 at #240) +jump jump +33 (label 19 at #238) label label 0x00000014 copy_constant $77 = 0 copy_slot_unmasked $78 = $13 @@ -221,7 +219,7 @@ copy_slot_unmasked $81 = $13 copy_slot_masked $80 = Mask($81) trace_scope TraceScope(+1) when $80 is true trace_line TraceLine(30) when $13 is true -branch_if_all_lanes_active branch_if_all_lanes_active +22 (label 18 at #246) +branch_if_all_lanes_active branch_if_all_lanes_active +22 (label 18 at #244) mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) trace_scope TraceScope(-1) when $80 is true load_condition_mask CondMask = $78 @@ -242,7 +240,7 @@ copy_slot_unmasked $77 = i₂ cmplt_imm_int $77 = lessThan($77, 0x0000000A) merge_loop_mask LoopMask &= $77 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -37 (label 20 at #208) +branch_if_any_lanes_active branch_if_any_lanes_active -37 (label 20 at #206) label label 0x00000012 load_loop_mask LoopMask = $76 trace_scope TraceScope(-1) when $75 is true @@ -260,7 +258,7 @@ label label 0x00000007 load_condition_mask CondMask = $82 copy_constant $62 = 0 merge_condition_mask CondMask = $72 & $73 -branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 6 at #319) +branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 6 at #317) trace_enter TraceEnter(bool loop_operator_le()) when $13 is true copy_constant $63 = 0 copy_slot_unmasked $64 = $13 @@ -275,7 +273,7 @@ copy_constant $64 = 0 copy_slot_unmasked $65 = $13 copy_slot_masked $64 = Mask($65) trace_scope TraceScope(+1) when $64 is true -branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 22 at #301) +branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 22 at #299) trace_line TraceLine(42) when $13 is true copy_constant i₃ = 0x00000001 (1.401298e-45) trace_var TraceVar(i₃) when $13 is true @@ -297,7 +295,7 @@ trace_var TraceVar(i₃) when $13 is true copy_slot_unmasked $65 = i₃ cmple_imm_int $65 = lessThanEqual($65, 0x00000003) stack_rewind -branch_if_no_active_lanes_eq branch -18 (label 23 at #282) if no lanes of $65 == 0 +branch_if_no_active_lanes_eq branch -18 (label 23 at #280) if no lanes of $65 == 0 label label 0x00000016 trace_scope TraceScope(-1) when $64 is true trace_line TraceLine(45) when $13 is true @@ -320,7 +318,7 @@ label label 0x00000006 load_condition_mask CondMask = $72 copy_constant $51 = 0 merge_condition_mask CondMask = $61 & $62 -branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 5 at #379) +branch_if_no_lanes_active branch_if_no_lanes_active +56 (label 5 at #377) trace_enter TraceEnter(bool loop_operator_lt()) when $13 is true copy_constant $52 = 0 copy_slot_unmasked $53 = $13 @@ -335,7 +333,7 @@ copy_constant $53 = 0 copy_slot_unmasked $54 = $13 copy_slot_masked $53 = Mask($54) trace_scope TraceScope(+1) when $53 is true -branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 25 at #361) +branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 25 at #359) trace_line TraceLine(54) when $13 is true copy_constant i₄ = 0x00000001 (1.401298e-45) trace_var TraceVar(i₄) when $13 is true @@ -357,7 +355,7 @@ trace_var TraceVar(i₄) when $13 is true copy_slot_unmasked $54 = i₄ cmplt_imm_int $54 = lessThan($54, 0x00000004) stack_rewind -branch_if_no_active_lanes_eq branch -18 (label 26 at #342) if no lanes of $54 == 0 +branch_if_no_active_lanes_eq branch -18 (label 26 at #340) if no lanes of $54 == 0 label label 0x00000019 trace_scope TraceScope(-1) when $53 is true trace_line TraceLine(57) when $13 is true @@ -380,7 +378,7 @@ label label 0x00000005 load_condition_mask CondMask = $61 copy_constant $40 = 0 merge_condition_mask CondMask = $50 & $51 -branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 4 at #440) +branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 4 at #438) trace_enter TraceEnter(bool loop_operator_ge()) when $13 is true copy_constant $41 = 0 copy_slot_unmasked $42 = $13 @@ -395,7 +393,7 @@ copy_constant $42 = 0 copy_slot_unmasked $43 = $13 copy_slot_masked $42 = Mask($43) trace_scope TraceScope(+1) when $42 is true -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 28 at #422) +branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 28 at #420) trace_line TraceLine(66) when $13 is true copy_constant i₅ = 0x00000003 (4.203895e-45) trace_var TraceVar(i₅) when $13 is true @@ -418,7 +416,7 @@ copy_constant $43 = 0x00000001 (1.401298e-45) copy_slot_unmasked $44 = i₅ cmple_int $43 = lessThanEqual($43, $44) stack_rewind -branch_if_no_active_lanes_eq branch -19 (label 29 at #402) if no lanes of $43 == 0 +branch_if_no_active_lanes_eq branch -19 (label 29 at #400) if no lanes of $43 == 0 label label 0x0000001C trace_scope TraceScope(-1) when $42 is true trace_line TraceLine(69) when $13 is true @@ -441,7 +439,7 @@ label label 0x00000004 load_condition_mask CondMask = $50 copy_constant $29 = 0 merge_condition_mask CondMask = $39 & $40 -branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 3 at #501) +branch_if_no_lanes_active branch_if_no_lanes_active +57 (label 3 at #499) trace_enter TraceEnter(bool loop_operator_gt()) when $13 is true copy_constant $30 = 0 copy_slot_unmasked $31 = $13 @@ -456,7 +454,7 @@ copy_constant $31 = 0 copy_slot_unmasked $32 = $13 copy_slot_masked $31 = Mask($32) trace_scope TraceScope(+1) when $31 is true -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 31 at #483) +branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 31 at #481) trace_line TraceLine(78) when $13 is true copy_constant i₆ = 0x00000003 (4.203895e-45) trace_var TraceVar(i₆) when $13 is true @@ -479,7 +477,7 @@ copy_constant $32 = 0 copy_slot_unmasked $33 = i₆ cmplt_int $32 = lessThan($32, $33) stack_rewind -branch_if_no_active_lanes_eq branch -19 (label 32 at #463) if no lanes of $32 == 0 +branch_if_no_active_lanes_eq branch -19 (label 32 at #461) if no lanes of $32 == 0 label label 0x0000001F trace_scope TraceScope(-1) when $31 is true trace_line TraceLine(81) when $13 is true @@ -502,7 +500,7 @@ label label 0x00000003 load_condition_mask CondMask = $39 copy_constant $18 = 0 merge_condition_mask CondMask = $28 & $29 -branch_if_no_lanes_active branch_if_no_lanes_active +45 (label 2 at #550) +branch_if_no_lanes_active branch_if_no_lanes_active +45 (label 2 at #548) trace_enter TraceEnter(bool loop_operator_eq()) when $13 is true copy_constant $19 = 0 copy_slot_unmasked $20 = $13 @@ -516,7 +514,7 @@ copy_constant $20 = 0 copy_slot_unmasked $21 = $13 copy_slot_masked $20 = Mask($21) trace_scope TraceScope(+1) when $20 is true -branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 34 at #534) +branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 34 at #532) trace_line TraceLine(100) when $13 is true copy_constant i₇ = 0x00000001 (1.401298e-45) trace_var TraceVar(i₇) when $13 is true @@ -551,7 +549,7 @@ label label 0x00000002 load_condition_mask CondMask = $28 copy_constant $1 = 0 merge_condition_mask CondMask = $17 & $18 -branch_if_no_lanes_active branch_if_no_lanes_active +55 (label 1 at #609) +branch_if_no_lanes_active branch_if_no_lanes_active +55 (label 1 at #607) trace_enter TraceEnter(bool loop_operator_ne()) when $13 is true copy_constant $2 = 0 copy_slot_unmasked $3 = $13 @@ -565,7 +563,7 @@ copy_constant $3 = 0 copy_slot_unmasked $4 = $13 copy_slot_masked $3 = Mask($4) trace_scope TraceScope(+1) when $3 is true -branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 37 at #591) +branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 37 at #589) trace_line TraceLine(89) when $13 is true copy_constant i₈ = 0x00000001 (1.401298e-45) trace_var TraceVar(i₈) when $13 is true @@ -587,7 +585,7 @@ trace_var TraceVar(i₈) when $13 is true copy_slot_unmasked $4 = i₈ cmpne_imm_int $4 = notEqual($4, 0x00000004) stack_rewind -branch_if_no_active_lanes_eq branch -18 (label 38 at #572) if no lanes of $4 == 0 +branch_if_no_active_lanes_eq branch -18 (label 38 at #570) if no lanes of $4 == 0 label label 0x00000025 trace_scope TraceScope(-1) when $3 is true trace_line TraceLine(92) when $13 is true diff --git a/tests/sksl/runtime/SwitchWithLoops.skrp b/tests/sksl/runtime/SwitchWithLoops.skrp index 17fbd9c9f4b6..412a8a9a536f 100644 --- a/tests/sksl/runtime/SwitchWithLoops.skrp +++ b/tests/sksl/runtime/SwitchWithLoops.skrp @@ -45,7 +45,7 @@ copy_slot_unmasked $20 = _0_val cmpeq_imm_int $20 = equal($20, 0x00000002) copy_constant $13 = 0 merge_condition_mask CondMask = $19 & $20 -branch_if_no_lanes_active branch_if_no_lanes_active +45 (label 8 at #93) +branch_if_no_lanes_active branch_if_no_lanes_active +43 (label 8 at #91) copy_slot_unmasked x₁ = x copy_constant val = 0 store_loop_mask $14 = LoopMask @@ -53,18 +53,16 @@ copy_slot_unmasked $15 = x₁ store_loop_mask $16 = LoopMask mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) case_op if ($15 == 0x00000001) { LoopMask = true; $16 = false; } -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 11 at #80) +branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 11 at #78) copy_constant i = 0 store_loop_mask $17 = LoopMask -jump jump +13 (label 13 at #72) +jump jump +11 (label 13 at #70) label label 0x0000000E copy_constant $21 = 0 copy_slot_unmasked $18 = val add_imm_int $18 += 0x00000001 copy_slot_masked val = Mask($18) -copy_constant $22 = 0xFFFFFFFF -copy_slot_masked $21 = Mask($22) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $21 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) reenable_loop_mask LoopMask |= $21 copy_slot_unmasked $18 = i add_imm_int $18 += 0x00000001 @@ -74,12 +72,12 @@ copy_slot_unmasked $18 = i cmplt_imm_int $18 = lessThan($18, 0x0000000A) merge_loop_mask LoopMask &= $18 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -17 (label 14 at #60) +branch_if_any_lanes_active branch_if_any_lanes_active -15 (label 14 at #60) label label 0x0000000C load_loop_mask LoopMask = $17 label label 0x0000000B reenable_loop_mask LoopMask |= $16 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 15 at #86) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 15 at #84) copy_slot_unmasked $16 = val add_imm_int $16 += 0x00000001 copy_slot_masked val = Mask($16) @@ -94,27 +92,27 @@ label label 0x00000008 load_condition_mask CondMask = $19 copy_constant $0 = 0 merge_condition_mask CondMask = $12 & $13 -branch_if_no_lanes_active branch_if_no_lanes_active +48 (label 7 at #145) +branch_if_no_lanes_active branch_if_no_lanes_active +48 (label 7 at #143) copy_slot_unmasked x₂ = x store_return_mask $1 = RetMask splat_2_constants val₁, i₁ = 0 store_loop_mask $2 = LoopMask -jump jump +28 (label 18 at #130) +jump jump +28 (label 18 at #128) label label 0x00000013 store_loop_mask $3 = LoopMask copy_slot_unmasked $4 = x₂ store_loop_mask $5 = LoopMask mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) case_op if ($4 == 0x00000001) { LoopMask = true; $5 = false; } -branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 21 at #115) +branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 21 at #113) copy_slot_unmasked $6 = val₁ add_imm_int $6 += 0x00000001 copy_slot_masked val₁ = Mask($6) -branch_if_all_lanes_active branch_if_all_lanes_active +9 (label 20 at #122) +branch_if_all_lanes_active branch_if_all_lanes_active +9 (label 20 at #120) mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) label label 0x00000015 reenable_loop_mask LoopMask |= $5 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 22 at #121) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 22 at #119) copy_constant $5 = 0 copy_slot_masked [loop_with_break_in_switch].result = Mask($5) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) @@ -132,7 +130,7 @@ copy_slot_unmasked $3 = i₁ cmplt_imm_int $3 = lessThan($3, 0x0000000A) merge_loop_mask LoopMask &= $3 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -32 (label 19 at #103) +branch_if_any_lanes_active branch_if_any_lanes_active -32 (label 19 at #101) label label 0x00000011 load_loop_mask LoopMask = $2 copy_slot_unmasked $2 = val₁ diff --git a/tests/sksl/shared/DeadReturnES3.skrp b/tests/sksl/shared/DeadReturnES3.skrp index 71fbdec89188..adffdf33d0d5 100644 --- a/tests/sksl/shared/DeadReturnES3.skrp +++ b/tests/sksl/shared/DeadReturnES3.skrp @@ -43,18 +43,16 @@ label label 0x00000007 load_condition_mask CondMask = $40 copy_constant $33 = 0 merge_condition_mask CondMask = $36 & $37 -branch_if_no_lanes_active branch_if_no_lanes_active +17 (label 6 at #63) +branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 6 at #61) store_loop_mask $34 = LoopMask label label 0x00000010 copy_constant $40 = 0 -copy_constant $41 = 0xFFFFFFFF -copy_slot_masked $40 = Mask($41) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $40 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) reenable_loop_mask LoopMask |= $40 copy_constant $35 = 0 merge_loop_mask LoopMask &= $35 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -9 (label 16 at #48) +branch_if_any_lanes_active branch_if_any_lanes_active -7 (label 16 at #48) label label 0x0000000F load_loop_mask LoopMask = $34 copy_constant $34 = 0xFFFFFFFF @@ -64,7 +62,7 @@ label label 0x00000006 load_condition_mask CondMask = $36 copy_constant $27 = 0 merge_condition_mask CondMask = $32 & $33 -branch_if_no_lanes_active branch_if_no_lanes_active +33 (label 5 at #100) +branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 5 at #96) store_return_mask $28 = RetMask store_loop_mask $29 = LoopMask label label 0x00000013 @@ -72,23 +70,21 @@ copy_constant $36 = 0 copy_constant $30 = 0 copy_uniform $31 = colorGreen(1) cmplt_float $30 = lessThan($30, $31) -branch_if_no_active_lanes_eq branch +5 (label 20 at #80) if no lanes of $30 == 0xFFFFFFFF +branch_if_no_active_lanes_eq branch +5 (label 20 at #78) if no lanes of $30 == 0xFFFFFFFF copy_constant $31 = 0xFFFFFFFF copy_slot_masked [test_if_return].result = Mask($31) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) -jump jump +4 (label 21 at #83) +jump jump +4 (label 21 at #81) label label 0x00000014 -branch_if_all_lanes_active branch_if_all_lanes_active +11 (label 18 at #92) +branch_if_all_lanes_active branch_if_all_lanes_active +9 (label 18 at #88) mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) label label 0x00000015 -copy_constant $37 = 0xFFFFFFFF -copy_slot_masked $36 = Mask($37) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $36 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) reenable_loop_mask LoopMask |= $36 copy_constant $30 = 0 merge_loop_mask LoopMask &= $30 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -21 (label 19 at #70) +branch_if_any_lanes_active branch_if_any_lanes_active -19 (label 19 at #68) label label 0x00000012 load_loop_mask LoopMask = $29 copy_constant $29 = 0 @@ -101,27 +97,25 @@ label label 0x00000005 load_condition_mask CondMask = $32 copy_constant $22 = 0 merge_condition_mask CondMask = $26 & $27 -branch_if_no_lanes_active branch_if_no_lanes_active +26 (label 4 at #130) +branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 4 at #124) store_loop_mask $23 = LoopMask label label 0x00000018 copy_constant $32 = 0 copy_constant $24 = 0 copy_uniform $25 = colorGreen(1) cmplt_float $24 = lessThan($24, $25) -branch_if_no_active_lanes_eq branch +4 (label 25 at #115) if no lanes of $24 == 0xFFFFFFFF -branch_if_all_lanes_active branch_if_all_lanes_active +13 (label 23 at #125) +branch_if_no_active_lanes_eq branch +4 (label 25 at #111) if no lanes of $24 == 0xFFFFFFFF +branch_if_all_lanes_active branch_if_all_lanes_active +11 (label 23 at #119) mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) -jump jump +5 (label 26 at #119) +jump jump +3 (label 26 at #113) label label 0x00000019 -copy_constant $33 = 0xFFFFFFFF -copy_slot_masked $32 = Mask($33) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $32 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) label label 0x0000001A reenable_loop_mask LoopMask |= $32 copy_constant $24 = 0 merge_loop_mask LoopMask &= $24 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -18 (label 24 at #106) +branch_if_any_lanes_active branch_if_any_lanes_active -16 (label 24 at #102) label label 0x00000017 load_loop_mask LoopMask = $23 copy_constant $23 = 0xFFFFFFFF @@ -131,17 +125,17 @@ label label 0x00000004 load_condition_mask CondMask = $26 copy_constant $16 = 0 merge_condition_mask CondMask = $21 & $22 -branch_if_no_lanes_active branch_if_no_lanes_active +26 (label 3 at #160) +branch_if_no_lanes_active branch_if_no_lanes_active +26 (label 3 at #154) store_return_mask $17 = RetMask store_loop_mask $18 = LoopMask label label 0x0000001D copy_uniform $19 = colorGreen(1) cmpeq_imm_float $19 = equal($19, 0) -branch_if_no_active_lanes_eq branch +5 (label 30 at #145) if no lanes of $19 == 0xFFFFFFFF +branch_if_no_active_lanes_eq branch +5 (label 30 at #139) if no lanes of $19 == 0xFFFFFFFF copy_constant $20 = 0 copy_slot_masked [test_else].result = Mask($20) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) -jump jump +5 (label 31 at #149) +jump jump +5 (label 31 at #143) label label 0x0000001E copy_constant $20 = 0xFFFFFFFF copy_slot_masked [test_else].result = Mask($20) @@ -150,7 +144,7 @@ label label 0x0000001F copy_constant $19 = 0 merge_loop_mask LoopMask &= $19 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -16 (label 29 at #137) +branch_if_any_lanes_active branch_if_any_lanes_active -16 (label 29 at #131) label label 0x0000001C load_loop_mask LoopMask = $18 load_return_mask RetMask = $17 @@ -161,7 +155,7 @@ label label 0x00000003 load_condition_mask CondMask = $21 copy_constant $13 = 0 merge_condition_mask CondMask = $15 & $16 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 2 at #168) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 2 at #162) copy_constant $14 = 0xFFFFFFFF label label 0x00000020 copy_slot_masked $13 = Mask($14) @@ -169,12 +163,12 @@ label label 0x00000002 load_condition_mask CondMask = $15 copy_constant $0 = 0 merge_condition_mask CondMask = $12 & $13 -branch_if_no_lanes_active branch_if_no_lanes_active +21 (label 1 at #193) +branch_if_no_lanes_active branch_if_no_lanes_active +21 (label 1 at #187) copy_constant x = 0 store_loop_mask $1 = LoopMask -jump jump +7 (label 35 at #182) +jump jump +7 (label 35 at #176) label label 0x00000024 -branch_if_all_lanes_active branch_if_all_lanes_active +11 (label 34 at #188) +branch_if_all_lanes_active branch_if_all_lanes_active +11 (label 34 at #182) mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) copy_slot_unmasked $2 = x add_imm_int $2 += 0x00000001 @@ -184,7 +178,7 @@ copy_slot_unmasked $2 = x cmple_imm_int $2 = lessThanEqual($2, 0x00000001) merge_loop_mask LoopMask &= $2 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -11 (label 36 at #176) +branch_if_any_lanes_active branch_if_any_lanes_active -11 (label 36 at #170) label label 0x00000022 load_loop_mask LoopMask = $1 copy_constant $1 = 0xFFFFFFFF diff --git a/tests/sksl/shared/DoWhileControlFlow.skrp b/tests/sksl/shared/DoWhileControlFlow.skrp index 77da61fd2173..83d084014874 100644 --- a/tests/sksl/shared/DoWhileControlFlow.skrp +++ b/tests/sksl/shared/DoWhileControlFlow.skrp @@ -30,9 +30,7 @@ store_condition_mask $1 = CondMask copy_slot_unmasked $2 = x(3) cmpeq_imm_float $2 = equal($2, 0x3F800000 (1.0)) merge_condition_mask CondMask = $1 & $2 -copy_constant $5 = 0xFFFFFFFF -copy_slot_masked $4 = Mask($5) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $4 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) load_condition_mask CondMask = $1 copy_constant $1 = 0 copy_slot_masked x(1) = Mask($1) @@ -42,7 +40,7 @@ copy_slot_unmasked $2 = x(2) cmplt_float $1 = lessThan($1, $2) merge_loop_mask LoopMask &= $1 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -21 (label 3 at #24) +branch_if_any_lanes_active branch_if_any_lanes_active -19 (label 3 at #24) label label 0x00000002 load_loop_mask LoopMask = $0 copy_4_slots_unmasked $0..3 = x diff --git a/tests/sksl/shared/ForLoopControlFlow.skrp b/tests/sksl/shared/ForLoopControlFlow.skrp index 93de9cfb2816..bc771d7db710 100644 --- a/tests/sksl/shared/ForLoopControlFlow.skrp +++ b/tests/sksl/shared/ForLoopControlFlow.skrp @@ -31,7 +31,7 @@ label label 0 load_loop_mask LoopMask = $0 copy_constant b = 0x40A00000 (5.0) store_loop_mask $0 = LoopMask -jump jump +19 (label 4 at #53) +jump jump +17 (label 4 at #51) label label 0x00000005 copy_constant $4 = 0 copy_slot_unmasked $1 = b @@ -40,9 +40,7 @@ store_condition_mask $1 = CondMask copy_slot_unmasked $2 = x(3) cmpeq_imm_float $2 = equal($2, 0x3F800000 (1.0)) merge_condition_mask CondMask = $1 & $2 -copy_constant $5 = 0xFFFFFFFF -copy_slot_masked $4 = Mask($5) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $4 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) load_condition_mask CondMask = $1 copy_constant $1 = 0 copy_slot_masked x(1) = Mask($1) @@ -56,7 +54,7 @@ copy_slot_unmasked $2 = b cmple_float $1 = lessThanEqual($1, $2) merge_loop_mask LoopMask &= $1 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -24 (label 5 at #35) +branch_if_any_lanes_active branch_if_any_lanes_active -22 (label 5 at #35) label label 0x00000003 load_loop_mask LoopMask = $0 copy_4_slots_unmasked $0..3 = x diff --git a/tests/sksl/shared/ReturnsValueOnEveryPathES3.skrp b/tests/sksl/shared/ReturnsValueOnEveryPathES3.skrp index 46836389b643..13914805a0d5 100644 --- a/tests/sksl/shared/ReturnsValueOnEveryPathES3.skrp +++ b/tests/sksl/shared/ReturnsValueOnEveryPathES3.skrp @@ -252,7 +252,7 @@ label label 0x00000004 load_condition_mask CondMask = $36 copy_constant $21 = 0 merge_condition_mask CondMask = $28 & $29 -branch_if_no_lanes_active branch_if_no_lanes_active +42 (label 3 at #297) +branch_if_no_lanes_active branch_if_no_lanes_active +40 (label 3 at #295) store_return_mask $22 = RetMask store_loop_mask $23 = LoopMask copy_uniform $24 = unknownInput @@ -260,15 +260,13 @@ cast_to_int_from_float $24 = FloatToInt($24) store_loop_mask $25 = LoopMask mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) case_op if ($24 == 0x00000001) { LoopMask = true; $25 = false; } -branch_if_no_lanes_active branch_if_no_lanes_active +21 (label 54 at #284) +branch_if_no_lanes_active branch_if_no_lanes_active +19 (label 54 at #282) copy_constant x₁ = 0 store_loop_mask $26 = LoopMask -jump jump +10 (label 56 at #276) +jump jump +8 (label 56 at #274) label label 0x00000039 copy_constant $36 = 0 -copy_constant $37 = 0xFFFFFFFF -copy_slot_masked $36 = Mask($37) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $36 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) reenable_loop_mask LoopMask |= $36 copy_slot_unmasked $27 = x₁ add_imm_int $27 += 0x00000001 @@ -278,12 +276,12 @@ copy_slot_unmasked $27 = x₁ cmple_imm_int $27 = lessThanEqual($27, 0x0000000A) merge_loop_mask LoopMask &= $27 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -14 (label 57 at #267) +branch_if_any_lanes_active branch_if_any_lanes_active -12 (label 57 at #267) label label 0x00000037 load_loop_mask LoopMask = $26 label label 0x00000036 reenable_loop_mask LoopMask |= $25 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 58 at #290) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 58 at #288) copy_constant $25 = 0xFFFFFFFF copy_slot_masked [switch_with_continue_in_loop].result = Mask($25) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) @@ -298,7 +296,7 @@ label label 0x00000003 load_condition_mask CondMask = $28 copy_constant $13 = 0 merge_condition_mask CondMask = $20 & $21 -branch_if_no_lanes_active branch_if_no_lanes_active +34 (label 2 at #335) +branch_if_no_lanes_active branch_if_no_lanes_active +34 (label 2 at #333) store_return_mask $14 = RetMask store_loop_mask $15 = LoopMask copy_uniform $16 = unknownInput @@ -306,14 +304,14 @@ cast_to_int_from_float $16 = FloatToInt($16) store_loop_mask $17 = LoopMask mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) case_op if ($16 == 0x00000001) { LoopMask = true; $17 = false; } -branch_if_no_lanes_active branch_if_no_lanes_active +13 (label 61 at #322) +branch_if_no_lanes_active branch_if_no_lanes_active +13 (label 61 at #320) copy_uniform $18 = unknownInput cmpeq_imm_float $18 = equal($18, 0x42F60000 (123.0)) -branch_if_no_active_lanes_eq branch +5 (label 62 at #317) if no lanes of $18 == 0xFFFFFFFF +branch_if_no_active_lanes_eq branch +5 (label 62 at #315) if no lanes of $18 == 0xFFFFFFFF copy_constant $19 = 0 copy_slot_masked [switch_with_if_that_returns].result = Mask($19) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) -jump jump +5 (label 63 at #321) +jump jump +5 (label 63 at #319) label label 0x0000003E copy_constant $19 = 0xFFFFFFFF copy_slot_masked [switch_with_if_that_returns].result = Mask($19) @@ -321,7 +319,7 @@ mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) label label 0x0000003F label label 0x0000003D reenable_loop_mask LoopMask |= $17 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 64 at #328) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 64 at #326) copy_constant $17 = 0xFFFFFFFF copy_slot_masked [switch_with_if_that_returns].result = Mask($17) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) @@ -336,7 +334,7 @@ label label 0x00000002 load_condition_mask CondMask = $20 copy_constant $0 = 0 merge_condition_mask CondMask = $12 & $13 -branch_if_no_lanes_active branch_if_no_lanes_active +29 (label 1 at #368) +branch_if_no_lanes_active branch_if_no_lanes_active +29 (label 1 at #366) store_return_mask $1 = RetMask store_loop_mask $2 = LoopMask copy_uniform $3 = unknownInput @@ -344,17 +342,17 @@ cast_to_int_from_float $3 = FloatToInt($3) store_loop_mask $4 = LoopMask mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) case_op if ($3 == 0x00000001) { LoopMask = true; $4 = false; } -branch_if_no_lanes_active branch_if_no_lanes_active +8 (label 67 at #355) +branch_if_no_lanes_active branch_if_no_lanes_active +8 (label 67 at #353) copy_uniform $5 = unknownInput cmpeq_imm_float $5 = equal($5, 0x42F60000 (123.0)) -branch_if_no_active_lanes_eq branch +4 (label 68 at #354) if no lanes of $5 == 0xFFFFFFFF +branch_if_no_active_lanes_eq branch +4 (label 68 at #352) if no lanes of $5 == 0xFFFFFFFF copy_constant $6 = 0 copy_slot_masked [switch_with_one_sided_if_then_fallthrough].result = Mask($6) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) label label 0x00000044 label label 0x00000043 reenable_loop_mask LoopMask |= $4 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 70 at #361) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 70 at #359) copy_constant $4 = 0xFFFFFFFF copy_slot_masked [switch_with_one_sided_if_then_fallthrough].result = Mask($4) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) diff --git a/tests/sksl/shared/SwitchWithEarlyReturn.skrp b/tests/sksl/shared/SwitchWithEarlyReturn.skrp index 3c1512ec17a3..744ff900f45e 100644 --- a/tests/sksl/shared/SwitchWithEarlyReturn.skrp +++ b/tests/sksl/shared/SwitchWithEarlyReturn.skrp @@ -459,7 +459,7 @@ label label 0x00000002 load_condition_mask CondMask = $20 copy_constant $0 = 0 merge_condition_mask CondMask = $12 & $13 -branch_if_no_lanes_active branch_if_no_lanes_active +48 (label 1 at #510) +branch_if_no_lanes_active branch_if_no_lanes_active +46 (label 1 at #508) copy_slot_unmasked x₁₄ = x store_return_mask $1 = RetMask copy_constant val₈ = 0 @@ -468,18 +468,16 @@ copy_slot_unmasked $3 = x₁₄ store_loop_mask $4 = LoopMask mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) case_op if ($3 == 0x00000001) { LoopMask = true; $4 = false; } -branch_if_no_lanes_active branch_if_no_lanes_active +24 (label 79 at #495) +branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 79 at #493) copy_constant i₁ = 0 store_loop_mask $5 = LoopMask -jump jump +13 (label 81 at #487) +jump jump +11 (label 81 at #485) label label 0x00000052 copy_constant $20 = 0 copy_slot_unmasked $6 = val₈ add_imm_int $6 += 0x00000001 copy_slot_masked val₈ = Mask($6) -copy_constant $21 = 0xFFFFFFFF -copy_slot_masked $20 = Mask($21) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $20 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) reenable_loop_mask LoopMask |= $20 copy_slot_unmasked $6 = i₁ add_imm_int $6 += 0x00000001 @@ -489,14 +487,14 @@ copy_slot_unmasked $6 = i₁ cmplt_imm_int $6 = lessThan($6, 0x00000005) merge_loop_mask LoopMask &= $6 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -17 (label 82 at #475) +branch_if_any_lanes_active branch_if_any_lanes_active -15 (label 82 at #475) label label 0x00000050 load_loop_mask LoopMask = $5 label label 0x0000004F case_op if ($3 == 0x00000002) { LoopMask = true; $4 = false; } label label 0x00000053 reenable_loop_mask LoopMask |= $4 -branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 84 at #503) +branch_if_no_lanes_active branch_if_no_lanes_active +4 (label 84 at #501) copy_constant $4 = 0xFFFFFFFF copy_slot_masked [fallthrough_with_loop_continue].result = Mask($4) mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask) diff --git a/tests/sksl/shared/UnusedVariables.skrp b/tests/sksl/shared/UnusedVariables.skrp index 9c57b83555b5..733306ae6aa6 100644 --- a/tests/sksl/shared/UnusedVariables.skrp +++ b/tests/sksl/shared/UnusedVariables.skrp @@ -27,12 +27,10 @@ copy_slot_unmasked b = $0 copy_slot_unmasked b = $0 copy_constant x = 0 store_loop_mask $0 = LoopMask -jump jump +10 (label 3 at #40) +jump jump +8 (label 3 at #38) label label 0x00000004 copy_constant $5 = 0 -copy_constant $6 = 0xFFFFFFFF -copy_slot_masked $5 = Mask($6) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $5 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) reenable_loop_mask LoopMask |= $5 copy_slot_unmasked $1 = x add_imm_int $1 += 0x00000001 @@ -42,7 +40,7 @@ copy_slot_unmasked $1 = x cmplt_imm_int $1 = lessThan($1, 0x00000001) merge_loop_mask LoopMask &= $1 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -14 (label 4 at #31) +branch_if_any_lanes_active branch_if_any_lanes_active -12 (label 4 at #31) label label 0x00000002 load_loop_mask LoopMask = $0 copy_slot_unmasked d = c diff --git a/tests/sksl/shared/WhileLoopControlFlow.skrp b/tests/sksl/shared/WhileLoopControlFlow.skrp index bee9f78b11f3..edca7fa7163c 100644 --- a/tests/sksl/shared/WhileLoopControlFlow.skrp +++ b/tests/sksl/shared/WhileLoopControlFlow.skrp @@ -23,7 +23,7 @@ branch_if_any_lanes_active branch_if_any_lanes_active -16 (label 2 at #6) label label 0 load_loop_mask LoopMask = $0 store_loop_mask $0 = LoopMask -jump jump +17 (label 4 at #43) +jump jump +15 (label 4 at #41) label label 0x00000005 copy_constant $4 = 0 copy_slot_unmasked $1 = x(2) @@ -33,9 +33,7 @@ store_condition_mask $1 = CondMask copy_slot_unmasked $2 = x(3) cmpeq_imm_float $2 = equal($2, 0x3F800000 (1.0)) merge_condition_mask CondMask = $1 & $2 -copy_constant $5 = 0xFFFFFFFF -copy_slot_masked $4 = Mask($5) -mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask) +continue_op $4 |= Mask(0xFFFFFFFF); LoopMask &= ~(CondMask & LoopMask & RetMask) load_condition_mask CondMask = $1 copy_constant $1 = 0 copy_slot_masked x(1) = Mask($1) @@ -46,7 +44,7 @@ copy_slot_unmasked $2 = x(2) cmplt_float $1 = lessThan($1, $2) merge_loop_mask LoopMask &= $1 stack_rewind -branch_if_any_lanes_active branch_if_any_lanes_active -22 (label 5 at #27) +branch_if_any_lanes_active branch_if_any_lanes_active -20 (label 5 at #27) label label 0x00000003 load_loop_mask LoopMask = $0 copy_4_slots_unmasked $0..3 = x