RFR: 8262916: Merge LShiftCntV and RShiftCntV into a single node
Eric Liu
eliu at openjdk.java.net
Fri Apr 9 08:54:22 UTC 2021
On Thu, 8 Apr 2021 13:37:31 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> `LShiftCntV`/`RShiftCntV` were added specifically for AArch32 and other platforms don't need/benefit from such separation.
I think AArch64 shared the same problem with AArch32 since it only has left shift instruction as well. I checked the generated code on AArch64 with latest master. Test case is TestCharVect2::test_srav[1].
0x0000ffffa9106c68: ldr q17, [x15, #16]
0x0000ffffa9106c6c: add x14, x10, x14
0x0000ffffa9106c70: neg v18.16b, v16.16b
0x0000ffffa9106c74: ushl v17.8h, v17.8h, v18.8h
0x0000ffffa9106c78: str q17, [x14, #16]
0x0000ffffa9106c7c: ldr q17, [x15, #32]
0x0000ffffa9106c80: neg v18.16b, v16.16b
0x0000ffffa9106c84: ushl v17.8h, v17.8h, v18.8h
0x0000ffffa9106c88: str q17, [x14, #32]
0x0000ffffa9106c8c: ldr q17, [x15, #48]
0x0000ffffa9106c90: neg v18.16b, v16.16b
0x0000ffffa9106c94: ushl v17.8h, v17.8h, v18.8h
0x0000ffffa9106c98: str q17, [x14, #48]
0x0000ffffa9106c9c: ldr q17, [x15, #64]
0x0000ffffa9106ca0: neg v18.16b, v16.16b
0x0000ffffa9106ca4: ushl v17.8h, v17.8h, v18.8h
0x0000ffffa9106ca8: str q17, [x14, #64]
0x0000ffffa9106cac: ldr q17, [x15, #80]
0x0000ffffa9106cb0: neg v18.16b, v16.16b
0x0000ffffa9106cb4: ushl v17.8h, v17.8h, v18.8h
It seems that keeping those two RShiftCntV and LShiftCntV is friendly to AArch32/64 in this case, but AArch64 should changed to what AArch32 dose. @theRealAph
[1] https://github.com/openjdk/jdk/blob/master/test/hotspot/jtreg/compiler/codegen/TestCharVect2.java#L1215
-------------
PR: https://git.openjdk.java.net/jdk/pull/3371
More information about the hotspot-compiler-dev
mailing list