RFR: 8301489: C1: ShortLoopOptimizer might lift instructions before their inputs [v3]

Roberto Castañeda Lozano rcastanedalo at openjdk.org
Wed Jun 21 12:00:05 UTC 2023


On Tue, 20 Jun 2023 10:21:51 GMT, Daniel Skantz <duke at openjdk.org> wrote:

>> ShortLoopOptimizer might lift instructions before their inputs on some graph shapes. We propose adding a check that the insertion point for an instruction that is a candidate for hoisting should not be higher up the dominator tree than any inputs to the instruction.
>> 
>> Testing: tier1-tier3.
>> 
>> Additional testing: observed that `(cur_invariant && !v.is_valid())` never occurs on tier1-tier3 before the added test case.
>> Also verified that the depth check is equivalent to `(*vp->block() == _insert->block()) || dominates(*vp, _insert)` on all of tier1-tier3.
>> 
>> Failure case: in the attached image the `arraylength` instruction from B10 is lifted to B0, as the dominator of B10 is calculated as B0. This is based on the logic in [`ComputeLinearScanOrder::compute_dominator_impl`](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/c1/c1_IR.cpp#L801).  But the array input is in Block 3. This is later spotted in `c1_LIRAssembler.cpp` with `Error: ShouldNotReachHere()`. We can reproduce the error on other instructions too -- the reader may refer to the test case provided.
>> 
>> ![image](https://github.com/openjdk/jdk/assets/111436254/9130516c-073d-45d1-a38a-af776e5e6672)
>
> Daniel Skantz has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Tweak test #iterations

Thanks for addressing the suggestions and for the additional explanation, looks good!

-------------

Marked as reviewed by rcastanedalo (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/14492#pullrequestreview-1490552606


More information about the hotspot-compiler-dev mailing list