[jdk16] RFR: 8258384: AArch64: SVE verify_ptrue fails on some tests [v3]

Nick Gasson ngasson at openjdk.java.net
Mon Jan 11 10:08:00 UTC 2021


On Mon, 11 Jan 2021 07:30:15 GMT, Ningsheng Jian <njian at openjdk.org> wrote:

>> After applying [1], some Vector API tests fail with SIGILL on SVE
>> system. The SIGILL was triggered by verify_ptrue before c2 compiled
>> function returns, which means that the preserved p7 register (as ptrue)
>> has been clobbered before returning to c2 compiled code. (p7 is not
>> preserved cross function calls, and system calls [2]).
>> 
>> Currently we try to reinitialize ptrue at each entrypoint of returning
>> from non-c2 compiled code, which indicating possible C or system calls.
>> However, there's still one entrypoint missing, exception handling, as
>> we may jump to c2 compiled code for exception handler. See
>> OptoRuntime::generate_exception_blob().
>> 
>> Adding reinitialize_ptrue before jumping back to c2 compiled code in
>> generate_exception_blob() could solve those Vector API test failures.
>> Actually I had that in my initial test patch [3], I don't know why I
>> missed that in final patch... I reran tests with the same approach of
>> [3] and found that there's still something missing, the
>> nmethod_entry_barrier() in c2 function prolog. The barrier may call to
>> runtime code (see generate_method_entry_barrier()). To reduce the risk
>> of missing such reinitialize_ptrue in newly added code in future, I
>> think it would be better to do the reinitialize in
>> pop_call_clobbered_registers().
>> 
>> P.S. the SIGILL message is also not clear, it should print detailed
>> message as indicated by MacroAssembler::stop() call. This is caused by
>> JDK-8255711 removing the message printing code. This will be fixed by JDK-8259539.
>> 
>> Tested with tier1-3 on SVE hardware. Also verified with the same
>> approach of patch [3] with jtreg tests hotspot_all_no_apps and
>> jdk:tier1-3 passed without incorrect ptrue value assertion failure.
>> 
>> [1] https://github.com/openjdk/jdk/pull/1621
>> [2] https://github.com/torvalds/linux/blob/master/Documentation/arm64/sve.rst
>> [3] http://cr.openjdk.java.net/~njian/8231441/0001-RFC-Block-one-caller-save-register-for-C2.patch
>
> Ningsheng Jian has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Revert signal handler changes, which will be fixed in JDK-8259539.

Marked as reviewed by ngasson (Committer).

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

PR: https://git.openjdk.java.net/jdk16/pull/50


More information about the hotspot-compiler-dev mailing list