[jdk19] RFR: 8289127: Apache Lucene triggers: DEBUG MESSAGE: duplicated predicate failed which is impossible
Vladimir Kozlov
kvn at openjdk.org
Fri Jul 15 19:41:07 UTC 2022
On Fri, 15 Jul 2022 12:30:56 GMT, Roland Westrelin <roland at openjdk.org> wrote:
> Loop predication adds a skeleton predicate for a range check that computes:
>
> (AddL (ConvI2L (MulI (CastII (AddI (OpaqueLoopInit 0) (SubI (OpaqueLoopStride ..) 1))) 7)) ..)
>
> later transformed into:
>
> (AddL (SubL (ConvI2L (LShiftI (CastII (AddI (OpaqueLoopInit 0) (OpaqueLoopStride ..))) 3)) (AddL (ConvI2L (CastII (AddI (OpaqueLoopInit 0) (OpaqueLoopStride ..)))) -1)) ..)
>
> When pre/main/post loops are added, this expression is copied (above
> the main loop) and updated. The logic performing the copy relies on
> skeleton_follow_inputs() to find the OpaqueLoopInit nodes and clone it
> with an updated initial value. Note there are 2 OpaqueLoopInit nodes
> to update in the transformed expression. But because
> skeleton_follow_inputs() doesn't include LShiftI only one of the
> OpaqueLoopInit node is cloned with an updated initial value.
>
> After loop opts are over, the OpaqueLoopInit nodes are replaced by
> their input which result in this particular case in a predicate that
> always fails.
>
> The fix is to fix skeleton_follow_inputs() to include LShiftI. I also
> added verification code to catch similar issues in the future.
Testing results are good.
-------------
Marked as reviewed by kvn (Reviewer).
PR: https://git.openjdk.org/jdk19/pull/143
More information about the hotspot-compiler-dev
mailing list