diff --git a/src/core/SkRasterPipelineOpList.h b/src/core/SkRasterPipelineOpList.h index 9dfa06172897..d62c88a85396 100644 --- a/src/core/SkRasterPipelineOpList.h +++ b/src/core/SkRasterPipelineOpList.h @@ -58,10 +58,11 @@ #define SK_RASTER_PIPELINE_OPS_SKSL(M) \ 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(continue_op) \ - M(load_return_mask) M(store_return_mask) M(mask_off_return_mask) \ + M(load_condition_mask) M(store_condition_mask) \ + M(merge_condition_mask) M(merge_inv_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(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) \ M(bitwise_and_n_ints) \ diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h index 9a5a125e1676..9b672bfc8270 100644 --- a/src/opts/SkRasterPipeline_opts.h +++ b/src/opts/SkRasterPipeline_opts.h @@ -3356,6 +3356,12 @@ STAGE_TAIL(merge_condition_mask, I32* ptr) { update_execution_mask(); } +STAGE_TAIL(merge_inv_condition_mask, I32* ptr) { + // Set the condition-mask to the intersection of the first mask and the inverse of the second. + r = sk_bit_cast(ptr[0] & ~ptr[1]); + update_execution_mask(); +} + STAGE_TAIL(load_loop_mask, F* ctx) { g = sk_unaligned_load(ctx); update_execution_mask(); diff --git a/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp b/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp index d634fb947685..d41d4e276c74 100644 --- a/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp +++ b/src/sksl/codegen/SkSLRasterPipelineBuilder.cpp @@ -1965,9 +1965,10 @@ void Program::makeStages(TArray* pipeline, pipeline->push_back({ProgramOp::load_condition_mask, src}); break; } - case BuilderOp::merge_condition_mask: { + case BuilderOp::merge_condition_mask: + case BuilderOp::merge_inv_condition_mask: { float* ptr = tempStackPtr - (2 * N); - pipeline->push_back({ProgramOp::merge_condition_mask, ptr}); + pipeline->push_back({(ProgramOp)inst.fOp, ptr}); break; } case BuilderOp::push_loop_mask: { @@ -2838,6 +2839,7 @@ void Program::dump(SkWStream* out) const { break; } case POp::merge_condition_mask: + case POp::merge_inv_condition_mask: case POp::add_float: case POp::add_int: case POp::sub_float: case POp::sub_int: case POp::mul_float: case POp::mul_int: @@ -3042,6 +3044,10 @@ void Program::dump(SkWStream* out) const { opText = "CondMask = " + opArg1 + " & " + opArg2; break; + case POp::merge_inv_condition_mask: + opText = "CondMask = " + opArg1 + " & ~" + opArg2; + break; + case POp::load_loop_mask: opText = "LoopMask = " + opArg1; break; diff --git a/src/sksl/codegen/SkSLRasterPipelineBuilder.h b/src/sksl/codegen/SkSLRasterPipelineBuilder.h index 2d3bc141126c..f426a33370a3 100644 --- a/src/sksl/codegen/SkSLRasterPipelineBuilder.h +++ b/src/sksl/codegen/SkSLRasterPipelineBuilder.h @@ -562,6 +562,11 @@ class Builder { fInstructions.push_back({BuilderOp::merge_condition_mask, {}}); } + void merge_inv_condition_mask() { + SkASSERT(this->executionMaskWritesAreEnabled()); + fInstructions.push_back({BuilderOp::merge_inv_condition_mask, {}}); + } + void push_loop_mask() { SkASSERT(this->executionMaskWritesAreEnabled()); fInstructions.push_back({BuilderOp::push_loop_mask, {}}); diff --git a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp index fb74935d7de9..2dc574eb4496 100644 --- a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp +++ b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp @@ -1882,11 +1882,8 @@ bool Generator::writeIfStatement(const IfStatement& i) { } if (i.ifFalse()) { - // Negate the test-condition, then reapply it to the condition-mask. - // Then, run the if-false branch. - fBuilder.push_constant_u(~0); - fBuilder.binary_op(BuilderOp::bitwise_xor_n_ints, /*slots=*/1); - fBuilder.merge_condition_mask(); + // Apply the inverse condition-mask. Then run the if-false branch. + fBuilder.merge_inv_condition_mask(); if (!this->writeStatement(*i.ifFalse())) { return unsupported(); } @@ -3563,11 +3560,9 @@ bool Generator::pushTernaryExpression(const Expression& test, return unsupported(); } - // Switch back to the test-expression stack temporarily, and negate the test condition. + // Switch back to the test-expression stack and apply the inverted test condition. testStack.enter(); - fBuilder.push_constant_u(~0); - fBuilder.binary_op(BuilderOp::bitwise_xor_n_ints, /*slots=*/1); - fBuilder.merge_condition_mask(); + fBuilder.merge_inv_condition_mask(); testStack.exit(); // Push the false-expression onto the primary stack, immediately after the true-expression. diff --git a/tests/RasterPipelineBuilderTest.cpp b/tests/RasterPipelineBuilderTest.cpp index 2a41015a0916..ac1e2ad9c8f5 100644 --- a/tests/RasterPipelineBuilderTest.cpp +++ b/tests/RasterPipelineBuilderTest.cpp @@ -101,6 +101,7 @@ DEF_TEST(RasterPipelineBuilderPushPopMaskRegisters, r) { builder.push_loop_mask(); // push into 1 builder.push_return_mask(); // push into 2 builder.merge_condition_mask(); // set the condition-mask to 1 & 2 + builder.merge_inv_condition_mask(); // set the condition-mask to 1 & ~2 builder.pop_condition_mask(); // pop from 2 builder.merge_loop_mask(); // mask off the loop-mask against 1 builder.push_condition_mask(); // push into 2 @@ -121,6 +122,7 @@ R"(store_condition_mask $0 = CondMask store_loop_mask $1 = LoopMask store_return_mask $2 = RetMask merge_condition_mask CondMask = $1 & $2 +merge_inv_condition_mask CondMask = $1 & ~$2 load_condition_mask CondMask = $2 merge_loop_mask LoopMask &= $1 store_condition_mask $2 = CondMask diff --git a/tests/sksl/folding/ShortCircuitBoolFolding.skrp b/tests/sksl/folding/ShortCircuitBoolFolding.skrp index 0a13b0c59836..711c72ccf6af 100644 --- a/tests/sksl/folding/ShortCircuitBoolFolding.skrp +++ b/tests/sksl/folding/ShortCircuitBoolFolding.skrp @@ -11,8 +11,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -25,8 +24,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -37,8 +35,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -50,8 +47,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -62,8 +58,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -75,8 +70,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -88,8 +82,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -100,8 +93,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -112,8 +104,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -126,8 +117,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -138,8 +128,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -151,8 +140,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -163,8 +151,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -176,8 +163,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -189,8 +175,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -201,8 +186,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) @@ -220,8 +204,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) @@ -238,8 +221,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _1_ok add_imm_int $2 += 0x00000001 copy_slot_masked _1_ok = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_slot_unmasked $2 = _2_bad add_imm_int $2 += 0x00000001 copy_slot_masked _2_bad = Mask($2) diff --git a/tests/sksl/shared/CompileTimeConstantVariables.skrp b/tests/sksl/shared/CompileTimeConstantVariables.skrp index 5e1e1368470b..921936c1e429 100644 --- a/tests/sksl/shared/CompileTimeConstantVariables.skrp +++ b/tests/sksl/shared/CompileTimeConstantVariables.skrp @@ -18,40 +18,37 @@ cmpeq_imm_int $1 = equal($1, 0) merge_condition_mask CondMask = $0 & $1 splat_4_constants $2..5 = 0x4008F5C3 (2.14) copy_4_slots_masked [main].result = Mask($2..5) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 store_condition_mask $2 = CondMask copy_slot_unmasked $3 = integerInput cmpeq_imm_int $3 = equal($3, 0x00000001) merge_condition_mask CondMask = $2 & $3 copy_4_uniforms $4..7 = colorGreen copy_4_slots_masked [main].result = Mask($4..7) -bitwise_xor_imm_int $3 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $2 & $3 +merge_inv_condition_mask CondMask = $2 & ~$3 store_condition_mask $4 = CondMask copy_slot_unmasked $5 = integerInput cmpeq_imm_int $5 = equal($5, 0x00000002) merge_condition_mask CondMask = $4 & $5 copy_4_slots_unmasked $6..9 = kConstVec copy_4_slots_masked [main].result = Mask($6..9) -bitwise_xor_imm_int $5 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $4 & $5 +merge_inv_condition_mask CondMask = $4 & ~$5 copy_constant $6 = 0x4048F5C3 (3.14) copy_uniform $7 = colorGreen(0) mul_imm_float $7 *= 0x4048F5C3 (3.14) cmplt_float $6 = lessThan($6, $7) -branch_if_no_active_lanes_eq branch +4 (label 0 at #47) if no lanes of $6 == 0xFFFFFFFF +branch_if_no_active_lanes_eq branch +4 (label 0 at #44) if no lanes of $6 == 0xFFFFFFFF splat_4_constants $7..10 = 0x4048F5C3 (3.14) copy_4_slots_masked [main].result = Mask($7..10) -jump jump +15 (label 1 at #61) +jump jump +15 (label 1 at #58) label label 0 copy_uniform $7 = colorGreen(0) mul_imm_float $7 *= 0x4008F5C3 (2.14) cmple_imm_float $7 = lessThanEqual($7, 0x4008F5C3 (2.14)) -branch_if_no_active_lanes_eq branch +4 (label 2 at #55) if no lanes of $7 == 0xFFFFFFFF +branch_if_no_active_lanes_eq branch +4 (label 2 at #52) if no lanes of $7 == 0xFFFFFFFF splat_4_constants $8..11 = 0 copy_4_slots_masked [main].result = Mask($8..11) -jump jump +6 (label 3 at #60) +jump jump +6 (label 3 at #57) label label 0x00000002 copy_constant $8 = 0x3F800000 (1.0) splat_2_constants $9..10 = 0 diff --git a/tests/sksl/shared/LogicalAndShortCircuit.skrp b/tests/sksl/shared/LogicalAndShortCircuit.skrp index d808d0977133..035e79c36663 100644 --- a/tests/sksl/shared/LogicalAndShortCircuit.skrp +++ b/tests/sksl/shared/LogicalAndShortCircuit.skrp @@ -11,8 +11,7 @@ merge_condition_mask CondMask = $0 & $1 copy_slot_unmasked $2 = _2_y cmpeq_imm_int $2 = equal($2, 0x00000002) copy_slot_masked _0_TrueTrue = Mask($2) -bitwise_xor_imm_int $1 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $0 & $1 +merge_inv_condition_mask CondMask = $0 & ~$1 copy_constant $2 = 0 copy_slot_masked _0_TrueTrue = Mask($2) load_condition_mask CondMask = $0 @@ -22,7 +21,7 @@ store_condition_mask $24 = CondMask copy_slot_unmasked $25 = _0_TrueTrue copy_constant $19 = 0 merge_condition_mask CondMask = $24 & $25 -branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 3 at #56) +branch_if_no_lanes_active branch_if_no_lanes_active +30 (label 3 at #54) splat_2_constants x, y = 0x00000001 (1.401298e-45) store_condition_mask $20 = CondMask store_condition_mask $26 = CondMask @@ -30,7 +29,7 @@ copy_slot_unmasked $27 = x cmpeq_imm_int $27 = equal($27, 0x00000001) copy_constant $21 = 0 merge_condition_mask CondMask = $26 & $27 -branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 5 at #39) +branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 5 at #38) copy_slot_unmasked $22 = y add_imm_int $22 += 0x00000001 copy_slot_masked y = Mask($22) @@ -41,8 +40,7 @@ load_condition_mask CondMask = $26 merge_condition_mask CondMask = $20 & $21 copy_constant $22 = 0 copy_slot_masked [TrueFalse].result = Mask($22) -bitwise_xor_imm_int $21 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $20 & $21 +merge_inv_condition_mask CondMask = $20 & ~$21 copy_slot_unmasked $22 = x cmpeq_imm_int $22 = equal($22, 0x00000001) copy_slot_unmasked $23 = y @@ -57,7 +55,7 @@ label label 0x00000003 load_condition_mask CondMask = $24 copy_constant $13 = 0 merge_condition_mask CondMask = $18 & $19 -branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 2 at #91) +branch_if_no_lanes_active branch_if_no_lanes_active +30 (label 2 at #88) splat_2_constants x₁, y₁ = 0x00000001 (1.401298e-45) store_condition_mask $14 = CondMask store_condition_mask $24 = CondMask @@ -65,7 +63,7 @@ copy_slot_unmasked $25 = x₁ cmpeq_imm_int $25 = equal($25, 0x00000002) copy_constant $15 = 0 merge_condition_mask CondMask = $24 & $25 -branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 7 at #74) +branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 7 at #72) copy_slot_unmasked $16 = y₁ add_imm_int $16 += 0x00000001 copy_slot_masked y₁ = Mask($16) @@ -76,8 +74,7 @@ load_condition_mask CondMask = $24 merge_condition_mask CondMask = $14 & $15 copy_constant $16 = 0 copy_slot_masked [FalseTrue].result = Mask($16) -bitwise_xor_imm_int $15 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $14 & $15 +merge_inv_condition_mask CondMask = $14 & ~$15 copy_slot_unmasked $16 = x₁ cmpeq_imm_int $16 = equal($16, 0x00000001) copy_slot_unmasked $17 = y₁ @@ -92,7 +89,7 @@ label label 0x00000002 load_condition_mask CondMask = $18 copy_constant $0 = 0 merge_condition_mask CondMask = $12 & $13 -branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 1 at #126) +branch_if_no_lanes_active branch_if_no_lanes_active +30 (label 1 at #122) splat_2_constants x₂, y₂ = 0x00000001 (1.401298e-45) store_condition_mask $1 = CondMask store_condition_mask $18 = CondMask @@ -100,7 +97,7 @@ copy_slot_unmasked $19 = x₂ cmpeq_imm_int $19 = equal($19, 0x00000002) copy_constant $2 = 0 merge_condition_mask CondMask = $18 & $19 -branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 9 at #109) +branch_if_no_lanes_active branch_if_no_lanes_active +6 (label 9 at #106) copy_slot_unmasked $3 = y₂ add_imm_int $3 += 0x00000001 copy_slot_masked y₂ = Mask($3) @@ -111,8 +108,7 @@ load_condition_mask CondMask = $18 merge_condition_mask CondMask = $1 & $2 copy_constant $3 = 0 copy_slot_masked [FalseFalse].result = Mask($3) -bitwise_xor_imm_int $2 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $1 & $2 +merge_inv_condition_mask CondMask = $1 & ~$2 copy_slot_unmasked $3 = x₂ cmpeq_imm_int $3 = equal($3, 0x00000001) copy_slot_unmasked $4 = y₂ diff --git a/tests/sksl/shared/LogicalOrShortCircuit.skrp b/tests/sksl/shared/LogicalOrShortCircuit.skrp index 73717d69c3ad..b627acd9c202 100644 --- a/tests/sksl/shared/LogicalOrShortCircuit.skrp +++ b/tests/sksl/shared/LogicalOrShortCircuit.skrp @@ -11,7 +11,7 @@ store_condition_mask $24 = CondMask copy_slot_unmasked $25 = _0_TrueTrue copy_constant $19 = 0 merge_condition_mask CondMask = $24 & $25 -branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 3 at #45) +branch_if_no_lanes_active branch_if_no_lanes_active +29 (label 3 at #43) splat_2_constants x, y = 0x00000001 (1.401298e-45) store_condition_mask $20 = CondMask store_condition_mask $26 = CondMask @@ -19,8 +19,7 @@ copy_slot_unmasked $27 = x cmpeq_imm_int $27 = equal($27, 0x00000001) merge_condition_mask CondMask = $26 & $27 copy_constant $21 = 0xFFFFFFFF -bitwise_xor_imm_int $27 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $26 & $27 +merge_inv_condition_mask CondMask = $26 & ~$27 copy_slot_unmasked $22 = y add_imm_int $22 += 0x00000001 copy_slot_masked y = Mask($22) @@ -34,8 +33,7 @@ copy_slot_unmasked $23 = y cmpeq_imm_int $23 = equal($23, 0x00000001) bitwise_and_int $22 &= $23 copy_slot_masked [TrueFalse].result = Mask($22) -bitwise_xor_imm_int $21 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $20 & $21 +merge_inv_condition_mask CondMask = $20 & ~$21 copy_constant $22 = 0 copy_slot_masked [TrueFalse].result = Mask($22) load_condition_mask CondMask = $20 @@ -46,7 +44,7 @@ label label 0x00000003 load_condition_mask CondMask = $24 copy_constant $13 = 0 merge_condition_mask CondMask = $18 & $19 -branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 2 at #80) +branch_if_no_lanes_active branch_if_no_lanes_active +29 (label 2 at #76) splat_2_constants x₁, y₁ = 0x00000001 (1.401298e-45) store_condition_mask $14 = CondMask store_condition_mask $24 = CondMask @@ -54,8 +52,7 @@ copy_slot_unmasked $25 = x₁ cmpeq_imm_int $25 = equal($25, 0x00000002) merge_condition_mask CondMask = $24 & $25 copy_constant $15 = 0xFFFFFFFF -bitwise_xor_imm_int $25 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $24 & $25 +merge_inv_condition_mask CondMask = $24 & ~$25 copy_slot_unmasked $16 = y₁ add_imm_int $16 += 0x00000001 copy_slot_masked y₁ = Mask($16) @@ -69,8 +66,7 @@ copy_slot_unmasked $17 = y₁ cmpeq_imm_int $17 = equal($17, 0x00000002) bitwise_and_int $16 &= $17 copy_slot_masked [FalseTrue].result = Mask($16) -bitwise_xor_imm_int $15 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $14 & $15 +merge_inv_condition_mask CondMask = $14 & ~$15 copy_constant $16 = 0 copy_slot_masked [FalseTrue].result = Mask($16) load_condition_mask CondMask = $14 @@ -81,7 +77,7 @@ label label 0x00000002 load_condition_mask CondMask = $18 copy_constant $0 = 0 merge_condition_mask CondMask = $12 & $13 -branch_if_no_lanes_active branch_if_no_lanes_active +31 (label 1 at #115) +branch_if_no_lanes_active branch_if_no_lanes_active +29 (label 1 at #109) splat_2_constants x₂, y₂ = 0x00000001 (1.401298e-45) store_condition_mask $1 = CondMask store_condition_mask $18 = CondMask @@ -89,8 +85,7 @@ copy_slot_unmasked $19 = x₂ cmpeq_imm_int $19 = equal($19, 0x00000002) merge_condition_mask CondMask = $18 & $19 copy_constant $2 = 0xFFFFFFFF -bitwise_xor_imm_int $19 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $18 & $19 +merge_inv_condition_mask CondMask = $18 & ~$19 copy_slot_unmasked $3 = y₂ add_imm_int $3 += 0x00000001 copy_slot_masked y₂ = Mask($3) @@ -100,8 +95,7 @@ load_condition_mask CondMask = $18 merge_condition_mask CondMask = $1 & $2 copy_constant $3 = 0 copy_slot_masked [FalseFalse].result = Mask($3) -bitwise_xor_imm_int $2 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $1 & $2 +merge_inv_condition_mask CondMask = $1 & ~$2 copy_slot_unmasked $3 = x₂ cmpeq_imm_int $3 = equal($3, 0x00000001) copy_slot_unmasked $4 = y₂ diff --git a/tests/sksl/shared/TernarySideEffects.skrp b/tests/sksl/shared/TernarySideEffects.skrp index bf40d09627b1..f7c579344dcd 100644 --- a/tests/sksl/shared/TernarySideEffects.skrp +++ b/tests/sksl/shared/TernarySideEffects.skrp @@ -8,8 +8,7 @@ merge_condition_mask CondMask = $16 & $17 copy_slot_unmasked $0 = x add_imm_float $0 += 0x3F800000 (1.0) copy_slot_masked x = Mask($0) -bitwise_xor_imm_int $17 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $16 & $17 +merge_inv_condition_mask CondMask = $16 & ~$17 copy_slot_unmasked $1 = y add_imm_float $1 += 0x3F800000 (1.0) copy_slot_masked y = Mask($1) @@ -22,8 +21,7 @@ merge_condition_mask CondMask = $16 & $17 copy_slot_unmasked $0 = x add_imm_float $0 += 0x40400000 (3.0) copy_slot_masked x = Mask($0) -bitwise_xor_imm_int $17 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $16 & $17 +merge_inv_condition_mask CondMask = $16 & ~$17 copy_slot_unmasked $1 = y add_imm_float $1 += 0x40400000 (3.0) copy_slot_masked y = Mask($1) @@ -36,8 +34,7 @@ merge_condition_mask CondMask = $16 & $17 copy_slot_unmasked $0 = x add_imm_float $0 += 0x40A00000 (5.0) copy_slot_masked x = Mask($0) -bitwise_xor_imm_int $17 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $16 & $17 +merge_inv_condition_mask CondMask = $16 & ~$17 copy_slot_unmasked $1 = y add_imm_float $1 += 0x40A00000 (5.0) copy_slot_masked y = Mask($1) @@ -50,8 +47,7 @@ merge_condition_mask CondMask = $16 & $17 copy_slot_unmasked $0 = x add_imm_float $0 += 0x41100000 (9.0) copy_slot_masked x = Mask($0) -bitwise_xor_imm_int $17 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $16 & $17 +merge_inv_condition_mask CondMask = $16 & ~$17 copy_slot_unmasked $1 = y add_imm_float $1 += 0x41100000 (9.0) copy_slot_masked y = Mask($1) @@ -62,7 +58,7 @@ copy_2_slots_unmasked $17..18 = x, y cmpne_float $17 = notEqual($17, $18) copy_slot_unmasked $0 = y merge_condition_mask CondMask = $16 & $17 -branch_if_no_lanes_active branch_if_no_lanes_active +5 (label 4 at #70) +branch_if_no_lanes_active branch_if_no_lanes_active +5 (label 4 at #66) copy_slot_unmasked $1 = x add_imm_float $1 += 0x3F800000 (1.0) copy_slot_masked x = Mask($1) @@ -74,7 +70,7 @@ copy_2_slots_unmasked $17..18 = x, y cmpeq_float $17 = equal($17, $18) copy_slot_unmasked $0 = y merge_condition_mask CondMask = $16 & $17 -branch_if_no_lanes_active branch_if_no_lanes_active +5 (label 5 at #82) +branch_if_no_lanes_active branch_if_no_lanes_active +5 (label 5 at #78) copy_slot_unmasked $1 = x add_imm_float $1 += 0x40000000 (2.0) copy_slot_masked x = Mask($1) @@ -86,8 +82,7 @@ copy_2_slots_unmasked $17..18 = x, y cmpne_float $17 = notEqual($17, $18) merge_condition_mask CondMask = $16 & $17 copy_slot_unmasked $0 = x -bitwise_xor_imm_int $17 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $16 & $17 +merge_inv_condition_mask CondMask = $16 & ~$17 copy_slot_unmasked $1 = y add_imm_float $1 += 0x40400000 (3.0) copy_slot_masked y = Mask($1) @@ -98,8 +93,7 @@ copy_2_slots_unmasked $17..18 = x, y cmpeq_float $17 = equal($17, $18) merge_condition_mask CondMask = $16 & $17 copy_slot_unmasked $0 = x -bitwise_xor_imm_int $17 ^= 0xFFFFFFFF -merge_condition_mask CondMask = $16 & $17 +merge_inv_condition_mask CondMask = $16 & ~$17 copy_slot_unmasked $1 = y add_imm_float $1 += 0x40800000 (4.0) copy_slot_masked y = Mask($1)