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