RFR: 8303278: Imprecise bottom type of ExtractB/UB
Eric Liu
eliu at openjdk.org
Fri Mar 17 06:21:17 UTC 2023
This is a trivial patch, which fixes the bottom type of ExtractB/UB nodes.
ExtractNode can be generated by Vector API Vector.lane(int), which gets the lane element at the given index. A more precise type of range can help to optimize out unnecessary type conversion in some cases.
Below shows a typical case used ExtractBNode
public static byte byteLt16() {
ByteVector vecb = ByteVector.broadcast(ByteVector.SPECIES_128, 1);
return vecb.lane(1);
}
In this case, c2 constructs IR graph like:
ExtractB ConI(24)
| __|
| / |
LShiftI __|
| /
RShiftI
which generates AArch64 code:
movi v16.16b, #0x1
smov x11, v16.b[1]
sxtb w0, w11
with this patch, this shift pair can be optimized out by RShiftI's identity [1]. The code is optimized to:
movi v16.16b, #0x1
smov x0, v16.b[1]
[TEST]
Full jtreg passed except 4 files on x86:
jdk/incubator/vector/Byte128VectorTests.java
jdk/incubator/vector/Byte256VectorTests.java
jdk/incubator/vector/Byte512VectorTests.java
jdk/incubator/vector/Byte64VectorTests.java
They are caused by a known issue on x86 [2].
[1] https://github.com/openjdk/jdk/blob/742bc041eaba1ff9beb7f5b6d896e4f382b030ea/src/hotspot/share/opto/mulnode.cpp#L1052
[2] https://bugs.openjdk.org/browse/JDK-8303508
-------------
Commit messages:
- 8303278: Imprecise bottom type of ExtractB/UB
Changes: https://git.openjdk.org/jdk/pull/13070/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13070&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8303278
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
Patch: https://git.openjdk.org/jdk/pull/13070.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/13070/head:pull/13070
PR: https://git.openjdk.org/jdk/pull/13070
More information about the hotspot-compiler-dev
mailing list