RFR: 8337702: Use new ForwardExceptionNode to call StubRoutines::forward_exception_entry()
Vladimir Kozlov
kvn at openjdk.org
Fri Aug 2 06:06:04 UTC 2024
Currently C2 uses `TailCall` node when it generates code to forward exception in C2 runtime stubs.
`StubRoutines::forward_exception_entry()` address is passed as constant and method pointer is `NULL`:
[generateOptoStub.cpp#L258](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/generateOptoStub.cpp#L258)
On other hand TailCall mach node uses 2 registers as parameter which is hardcoded in `Matcher`: [matcher.cpp#L828](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/matcher.cpp#L828)
As result we waste two registers to pass constant and NULL.
Also incorrect relocation is used for such call because the address of `forward_exception` stub passed in register in mach node. When it is converted to `Address` for `jmp` instruction the default `external_word_type` relocation is used when `runtime_call_type` should be used. See discussion in PR [JDK-8337396](https://github.com/openjdk/jdk/pull/20412)
I added new ideal node `ForwardExceptionNode` to solve these issues. It is similar to `Rethrow` node (which mach node definition I used as template) but I kept it based on `Return` node similar to `TailCall` node.
Tested tier1-3,stress,xcomp
-------------
Commit messages:
- 8337702: Use new ForwardExceptionNode to call StubRoutines::forward_exception_entry()
Changes: https://git.openjdk.org/jdk/pull/20437/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20437&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8337702
Stats: 150 lines in 14 files changed: 128 ins; 1 del; 21 mod
Patch: https://git.openjdk.org/jdk/pull/20437.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/20437/head:pull/20437
PR: https://git.openjdk.org/jdk/pull/20437
More information about the hotspot-compiler-dev
mailing list