RFR: 8279225: [arm32] C1 longs comparison operation destroys argument registers [v2]

Hao Sun haosun at openjdk.java.net
Tue Dec 28 00:38:12 UTC 2021


On Mon, 27 Dec 2021 11:47:47 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
>
> Sergey Nazarkin has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Align C1 long cmp with match rules in arm.ad

Thanks for your update. LGTM. (I'm not a Reviewer)

Marked as reviewed by haosun (Author).

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

PR: https://git.openjdk.java.net/jdk/pull/6934


More information about the hotspot-compiler-dev mailing list