RFR: 8361700: Missed optimization in PhaseIterGVN for mask and shift patterns due to missing notification in PhaseIterGVN::add_users_of_use_to_worklist
Manuel Hässig
mhaessig at openjdk.org
Wed Jul 16 14:58:46 UTC 2025
On Wed, 16 Jul 2025 14:31:19 GMT, Marc Chevalier <mchevalier at openjdk.org> wrote:
>> This PR addresses a missed optimization in `PhaseIterGVN` due to the lack of change notification to indirect users within `PhaseIterGVN::add_users_of_use_to_worklist`.
>>
>> The affected optimization is the transformation of `(x & mask) >> shift` into `(x >> shift) & (mask >> shift)`, where `mask` is a constant. This transformation is handled in `RShiftNode::IdealIL` for both `RShiftI` and `RShiftL` nodes.
>>
>> The dependency of this optimization extends beyond a direct input: from the viewpoint of a shift node, it relies on changes to the inputs of its inputs (i.e., an `AndI`/`AndL` input node to the shift). Therefore, when the `And` node changes, the corresponding shift node must be notified to allow the optimization to take place.
>>
>> Currently, `PhaseIterGVN::add_users_of_use_to_worklist` contains specific logic to handle similar dependencies for other cases, but this specific scenario is not addressed. The proposed fix adds the necessary logic in `add_users_of_use_to_worklist` to ensure proper notification for this optimization pattern.
>>
>> ### Testing
>> - [x] [GitHub Actions](https://github.com/benoitmaillard/jdk/actions?query=branch%3AJDK-8361700)
>> - [x] tier1-3, plus some internal testing
>> - [x] Added test from the fuzzer
>>
>> Thank you for reviewing!
>
> src/hotspot/share/opto/phaseX.cpp line 2552:
>
>> 2550: }
>> 2551: }
>> 2552: // If changed AndI/AndL inputs, check RShift users for "(x & mask) >> shift" reordering
>
> "reordering" sounds not quite right to me, but I don't have a much better idea.
Suggestion:
// If changed AndI/AndL inputs, check RShift users for "(x & mask) >> shift" optimization opportunity
Those are my two cents
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26347#discussion_r2210649883
More information about the hotspot-compiler-dev
mailing list