Integrated: 8279225: [arm32] C1 longs comparison operation destroys argument registers
Sergey Nazarkin
snazarki at openjdk.java.net
Tue Dec 28 11:32:14 UTC 2021
On Fri, 24 Dec 2021 16:25:37 GMT, Sergey Nazarkin <snazarki at openjdk.org> wrote:
> Several regression tests are failed on arm32 CPU if tiered compilation is enabled.
>
> The list includes
> java/math/BigDecimal/DivideMcTests
> java/util/Arrays/Sorting.java
> java/util/Arrays/SortingNearlySortedPrimitive.java
> java/util/concurrent/tck/JSR166TestCase
> java/util/stream/SliceOpTest.java
> etc
>
> It appears C1 comp_op for long operands destroys arguments registers:
> void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, LIR_Op2* op) {
> ....
> Register ylo = opr2->as_register_lo();
> Register yhi = opr2->as_register_hi();
> if (condition == lir_cond_equal || condition == lir_cond_notEqual) {
> __ teq(xhi, yhi);
> __ teq(xlo, ylo, eq);
> } else {
> __ subs(xlo, xlo, ylo); // <<< incorrect
> __ sbcs(xhi, xhi, yhi); // <<< incorrect
> }
> ...
> }
>
> Tested with hotspot_tier2, jdk_tier3 on linux_arm
This pull request has now been integrated.
Changeset: 299022df
Author: Sergey Nazarkin <snazarki at openjdk.org>
Committer: Alexey Bakhtin <abakhtin at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/299022dfacbcb49e3bc5beca8ff9b1fca1101493
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
8279225: [arm32] C1 longs comparison operation destroys argument registers
Reviewed-by: haosun, aph
-------------
PR: https://git.openjdk.java.net/jdk/pull/6934
More information about the hotspot-compiler-dev
mailing list