Integrated: 8331575: C2: crash when ConvL2I is split thru phi at LongCountedLoop
Roland Westrelin
roland at openjdk.org
Thu May 16 08:57:19 UTC 2024
On Fri, 3 May 2024 12:33:43 GMT, Roland Westrelin <roland at openjdk.org> wrote:
> In the test case:
>
>
> long i;
> for (; i > 0; i--) {
> res += 42 / ((int) i);
>
>
> The long counted loop phi has type `[1..100]`. As a consequence, the
> `ConvL2I` also has type `[1..100]`. The `DivI` node that follows can't
> fault: it is not guarded by a zero check and has no control set.
>
> The `ConvL2I` is split through phi and so is the `DiVI` node:
> `PhaseIdealLoop::cannot_split_division()` returns true because the
> value coming from the backedge into the `DivI` (when it is about to be
> split thru phi) is the result of the `ConvL2I` which has type
> `[1..100`] so is not zero as far as the compiler can tell.
>
> On the last iteration of the loop, i is 1. Because the DivI was split
> thru Phi, it computes the value for the following iteration, so for i
> = 0. This causes a crash when the compiled code runs.
>
> The same problem can't happen with an int counted loop because logic
> in `PhaseIdealLoop::split_thru_phi()` prevents a `ConvI2L` from being
> split thru phi. I propose to fix this the same way: in the test case,
> it's not true that once the `ConvL2I` is split thru phi it keeps type
> `[1..100]`. The fix is fairly conservative because it's base on the
> existing logic for `ConvI2L`: we would want to not split a `ConvL2I`
> only a counted loopd but. I suppose the same is true for the `ConvI2L`
> and I thought it would be best to revisit both together.
This pull request has now been integrated.
Changeset: f398cd22
Author: Roland Westrelin <roland at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/f398cd225012694a586e528936159b6df7b1586c
Stats: 129 lines in 3 files changed: 127 ins; 0 del; 2 mod
8331575: C2: crash when ConvL2I is split thru phi at LongCountedLoop
Reviewed-by: chagedorn, epeter
-------------
PR: https://git.openjdk.org/jdk/pull/19086
More information about the hotspot-compiler-dev
mailing list