RFR: 8361700: Missed optimization in PhaseIterGVN for mask and shift patterns due to missing notification in PhaseIterGVN::add_users_of_use_to_worklist

Benoît Maillard bmaillard at openjdk.org
Wed Jul 16 12:53:00 UTC 2025


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!

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

Commit messages:
 - 8361700: Add comment for reference to the optimization
 - 8361700: Add test obtained from the fuzzer
 - 8361700: Add RShift nodes to worklist when candidates for mask and shift ideal optimization

Changes: https://git.openjdk.org/jdk/pull/26347/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26347&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8361700
  Stats: 69 lines in 2 files changed: 69 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/26347.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26347/head:pull/26347

PR: https://git.openjdk.org/jdk/pull/26347


More information about the hotspot-compiler-dev mailing list