RFR: 8350988: Consolidate Identity of self-inverse operations
Hannes Greule
hgreule at openjdk.org
Sat Mar 1 13:46:30 UTC 2025
subnode has multiple nodes that are self-inverse but lacking the respective optimization. ReverseINode and ReverseLNode already have the optimization, but we can deduplicate the code for all those operations.
For most nodes, the optimization is obvious. The NegF/DNodes however are worth to look at in detail imo:
- `Float.NaN` has the same bits set as `-Float.NaN`. That means, it this specific case, the operation is a no-op anyway
- For other values, the msb is flipped, flipping twice results in the original value again.
Similar changes could be made to the corresponding vector nodes. If you want, I can do that in a follow-up RFE.
One note: During benchmarking those changes, I ran into https://bugs.openjdk.org/browse/JDK-8307516. That means code like
int v = 0;
for (int datum : data) {
v ^= Integer.reverseBytes(Integer.reverseBytes(datum));
}
return v;
was vectorized before but is considered "not profitable" with the changes here, causing slowdowns in such cases.
-------------
Commit messages:
- collapse impl, add more fitting nodes
- test
Changes: https://git.openjdk.org/jdk/pull/23851/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23851&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8350988
Stats: 204 lines in 4 files changed: 179 ins; 8 del; 17 mod
Patch: https://git.openjdk.org/jdk/pull/23851.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/23851/head:pull/23851
PR: https://git.openjdk.org/jdk/pull/23851
More information about the hotspot-compiler-dev
mailing list