RFR: 8350988: Consolidate Identity of self-inverse operations [v3]

Vladimir Ivanov vlivanov at openjdk.org
Wed Mar 26 22:11:08 UTC 2025


On Thu, 13 Mar 2025 14:00:27 GMT, Hannes Greule <hgreule at openjdk.org> wrote:

>> 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

Looks good.

-------------

Marked as reviewed by vlivanov (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/23851#pullrequestreview-2718720573


More information about the hotspot-compiler-dev mailing list