RFR: 8330158: C2: Loop strip mining uses ABS with min int
Aleksey Shipilev
shade at openjdk.org
Mon Apr 22 08:58:32 UTC 2024
On Wed, 17 Apr 2024 15:49:59 GMT, Roland Westrelin <roland at openjdk.org> wrote:
>> This fixes 3 calls to ABS with a min int argument. I think all of them
>> are harmless:
>>
>> - in `PhaseIdealLoop::exact_limit()`, I removed the call to ABS. The
>> check is for a stride of 1 or -1.
>>
>> - in `OuterStripMinedLoopNode::adjust_strip_mined_loop()`, for the
>> computation of `scaled_iters_long`, the stride is passed to `ABS()`
>> and then implicitly casted to long. I now cast the stride to long
>> before `ABS()`. For a min int stride, `LoopStripMiningIter * stride`
>> overflows the int range for all values of `LoopStripMiningIter`
>> except 0 or 1. Those values are handled early on in that method. So
>> for a min in stride:
>> ```
>> (jlong)scaled_iters != scaled_iters_long
>> ```
>> is always true and the method returns early.
>>
>> - in `OuterStripMinedLoopNode::adjust_strip_mined_loop()`, the
>> computation of `short_scaled_iters` also calls `ABS()` with the
>> stride as argument. But the result of that computation is only used
>> if the test for:
>> ```
>> (jlong)scaled_iters != scaled_iters_long
>> ```
>> doesn't cause an early return of the method. I reordered statements
>> so the `ABS()` calls happens after that test which will cause an early
>> return if the stride is min int.
>
> Thanks for reviewing this.
>
>> Have you tried running tests with #18751 applied?
>
> I only ran the particular test that you mentioned in the bug.
@rwestrel, if you could integrate this, we can then go forward with #18751. Thanks!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18813#issuecomment-2068855426
More information about the hotspot-compiler-dev
mailing list