RFR: 8345299: C2: some nodes can still have incorrect control after do_range_check()

Roland Westrelin roland at openjdk.org
Mon Dec 2 14:01:12 UTC 2024


8339733 fixed controls for updated pre/main limits during
do_range_check(). However, it missed one issue:

Control for the new limits is computed in `new_limit_ctrl` for both
pre and main loops. `new_limit_ctrl` is currently initialized from the
pre limit control but it also needs to take the main loop limit
control into account as sometimes, the main loop limit control is
below the pre limit and pre loop entry control.

8339733 also introduced a couple bugs. Control of the `Bool`/`Cmp`
nodes are updated for the pre and main loop to `new_limit_ctrl`. But
that's incorrect because `new_limit_ctrl` may be above the pre loop
while the `Bool`/`Cmp` for the pre loop are in the loop (because they
depend on the loop iv) and for the main loop are after the pre loop
(because they depend on the iv out of the pre loop). I fixed this for
the pre loop by setting control for the `Bool`/`Cmp` to be as late as
possible. For the main loop, no change appears to be required as
control computed by c2 is already late enough. I've added an assert
instead.

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

Commit messages:
 - comment
 - fix

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

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


More information about the hotspot-compiler-dev mailing list