RFR: 8357982: Fix several failing BMI tests with -XX:+UseAPX [v7]
Sandhya Viswanathan
sviswanathan at openjdk.org
Thu Jun 5 23:50:52 UTC 2025
On Thu, 5 Jun 2025 08:08:48 GMT, Jatin Bhateja <jbhateja at openjdk.org> wrote:
>> A) Patch extends the following tests with hard-coded encoding checks for various BMI instructions to cover REX2 or extended EVEX encodings supported by APX.
>>
>>
>> compiler/intrinsics/bmi/verifycode/AndnTestI.java
>> compiler/intrinsics/bmi/verifycode/AndnTestL.java
>> compiler/intrinsics/bmi/verifycode/BzhiTestI2L.java
>> compiler/intrinsics/bmi/verifycode/LZcntTestL.java
>> compiler/intrinsics/bmi/verifycode/TZcntTestL.java
>>
>>
>> B) After integration of JDK-8349582, which added APX NDD support, AndN instruction selection patterns that expect (Xor SRC, -1) as one of its operands were not getting selected because of a lower-cost generic immediate pattern match; patch fixes this issue through strict predicate checks.
>>
>> Above tests are now passing, validations were carried out using Intel Software Development emulator.
>>
>> Kindly review and share your feedback.
>>
>> Best Regards,
>> Jatin
>
> Jatin Bhateja has updated the pull request incrementally with one additional commit since the last revision:
>
> Review resolutions
test/hotspot/jtreg/compiler/intrinsics/bmi/verifycode/LZcntTestI.java line 57:
> 55: // REX2 variant
> 56: instrMaskAPX = new byte[]{(byte) 0xFF, (byte)0x80, (byte) 0xFF};
> 57: instrPatternAPX = new byte[]{(byte) 0xD5, (byte) 0x80, (byte) 0xBD};
I think we should check for 0xF3 as well here for lzcnt to differentiate it from bsr:
instrMaskAPX = new byte[]{(byte) 0xFF, (byte) 0xFF, (byte)0x80, (byte) 0xFF};
instrPatternAPX = new byte[]{(byte) 0xF3, (byte) 0xD5, (byte) 0x80, (byte) 0xBD};
test/hotspot/jtreg/compiler/intrinsics/bmi/verifycode/TZcntTestI.java line 56:
> 54: // REX2 variant
> 55: instrMaskAPX = new byte[]{(byte) 0xFF, (byte)0x80, (byte) 0xFF};
> 56: instrPatternAPX = new byte[]{(byte) 0xD5, (byte) 0x80, (byte) 0xBC};
I think we should check for 0xF3 as well here for tzcnt to differentiate it from bsf:
instrMaskAPX = new byte[]{(byte) 0xFF, (byte) 0xFF, (byte)0x80, (byte) 0xFF};
instrPatternAPX = new byte[]{(byte) 0xF3, (byte) 0xD5, (byte) 0x80, (byte) 0xBC};
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25501#discussion_r2130968611
PR Review Comment: https://git.openjdk.org/jdk/pull/25501#discussion_r2130962379
More information about the hotspot-compiler-dev
mailing list