RFR: 8337702: Use new ForwardExceptionNode to call StubRoutines::forward_exception_entry() [v4]

Tobias Hotz duke at openjdk.org
Mon Aug 12 06:38:33 UTC 2024


On Fri, 9 Aug 2024 20:05:50 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:

>> 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
>
> Vladimir Kozlov has updated the pull request incrementally with one additional commit since the last revision:
> 
>   add ForwardExceptionNode type to vmStruct

src/hotspot/share/opto/generateOptoStub.cpp line 258:

> 256: 
> 257:   assert (StubRoutines::forward_exception_entry() != nullptr, "must be generated before");
> 258:   Node *exc_target = makecon(TypeRawPtr::make( StubRoutines::forward_exception_entry() ));

`exc_target` is no longer used, so this should probably be removed

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20437#discussion_r1713228039


More information about the hotspot-compiler-dev mailing list