RFR: 8330158: C2: Loop strip mining uses ABS with min int

Roland Westrelin roland at openjdk.org
Wed Apr 17 10:50:23 UTC 2024


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 statmements
  so the `ABS()` calls happens after that test which will cause an early
  return if the stride is min int.

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

Commit messages:
 - fix

Changes: https://git.openjdk.org/jdk/pull/18813/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18813&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8330158
  Stats: 11 lines in 1 file changed: 6 ins; 0 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/18813.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18813/head:pull/18813

PR: https://git.openjdk.org/jdk/pull/18813


More information about the hotspot-compiler-dev mailing list