RFR: 8350988: Consolidate Identity of self-inverse operations [v3]
Hannes Greule
hgreule at openjdk.org
Thu Mar 13 14:00:27 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.
Hannes Greule has updated the pull request incrementally with one additional commit since the last revision:
add tests for ReverseBytesS/ReverseBytesUS
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/23851/files
- new: https://git.openjdk.org/jdk/pull/23851/files/b82ed237..0a48b5b8
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=23851&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=23851&range=01-02
Stats: 58 lines in 1 file changed: 54 ins; 0 del; 4 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