RFR: 8257483: C2: Split immediate vector rotate from RotateLeftV and RotateRightV nodes
Dong Bo
dongbo at openjdk.java.net
Tue Dec 1 07:11:07 UTC 2020
Currently, for all CPUs, if optimizing RotateLeftV and RotateRightV with match rules in AD files, we have to implement both immediate and variable versions.
On aarch64, with match rules for vector rotation, immediate vector rotatation can be optimized with shift+insert instructions (i.e. SLI/SRI, ~20% improvements with an initial implementation).
However there woule be performance regression for variable version, due to SLI/SRI have no register version in NEON intruction set and there is no register version for right shift neither.
The instructions for match rules of vector rotate variable should be:
mov w9, 32
dup v13.4s, w9
sub v20.4s, v13.4S, v19.4s
# For a loop, default version only has code below,
# the code above (loop invariants) are put outside of a loop.
sshl v17.4s, v16.4s, v19.4s
neg v18.16b, v20.16b # on aarch64, vector right shift is implemented as left shift by negative shift count
ushl v16.4s, v16.4s, v18.4s
orr v16.16b, v17.16b, v16.16b
With this patch, immediate vector rotation can be matched alone and optimized on CPUs like aarch64.
Verified with linux-x86_64-server-fastdebug tier1-3 and passed.
Also added immediate vector rotation tests to micro `test/micro/org/openjdk/bench/java/lang/RotateBenchmark.java`.
Tested the micro on a x86_64/aarch64 server and witnessed no regressions.
-------------
Commit messages:
- 8257483: C2: Split immediate vector rotate from RotateLeftV and RotateRightV nodes
Changes: https://git.openjdk.java.net/jdk/pull/1532/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1532&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8257483
Stats: 89 lines in 8 files changed: 73 ins; 0 del; 16 mod
Patch: https://git.openjdk.java.net/jdk/pull/1532.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/1532/head:pull/1532
PR: https://git.openjdk.java.net/jdk/pull/1532
More information about the hotspot-compiler-dev
mailing list