RFR: 8305638: Refactor Template Assertion Predicate Bool creation and Predicate code in Split If and Loop Unswitching

Christian Hagedorn chagedorn at openjdk.org
Wed Nov 29 08:49:25 UTC 2023


This patch is intended for JDK 23.

While preparing the patch for the full fix for Assertion Predicates [JDK-8288981](https://bugs.openjdk.org/browse/JDK-8288981), I still noticed that some changes are not required for the actual fix and could be split off and reviewed separately in this PR.

The patch applies the following cleanup changes:
- The complete fix had to add slightly different cloning cases in `PhaseIdealLoop::create_bool_from_template_assertion_predicate()` which already has quite some logic to switch between different cases. Additionally, the algorithm in the method itself was already hard to understand and difficult to adapt. I therefore re-implemented it in a separate class `CloneTemplateAssertionPredicateBool` together with some helper classes like `DFSNodeStack`. To use it, I've added a `TemplateAssertionPredicateBool` class that offers three cloning possibilities:
  - `clone()`: Clone without modification
  -  `clone_and_replace_opaque_loop_nodes()`: Clone and replace the `OpaqueLoop*Nodes` with a new init and stride node.
  - `clone_and_replace_init()`: Special case of `clone_and_replace_opaque_loop_nodes()` which only replaces `OpaqueLoopInitNode` and clones `OpaqueLoopStrideNode`.
  
  This refactoring could be extracted from the complete fix.
- The Split If code to detect (`subgraph_has_opaque()`) and clone Template Assertion Predicate Bools was extracted to a separate class `CloneTemplateAssertionPredicateBoolDown` and uses the new `TemplateAssertionPredicateBool` class to do the actual cloning.
- In the process of coding the complete fix, I've refactored the Loop Unswitching code quite a bit. This change could also be extracted into a separate RFE. Changes include:
  - Renaming
  - Extracting code to separate classes/methods
  - Adding comments
- Some small refactoring including:
  - Removing unused parameters
  - Renaming variables/parameters/methods

Thanks,
Christian

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

Commit messages:
 - Misc renamings/refactoring
 - Refactor Loop Unswitching
 - Refactor Template Assertion Predicate Bool creation and Split If

Changes: https://git.openjdk.org/jdk/pull/16877/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16877&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8305638
  Stats: 927 lines in 11 files changed: 610 ins; 175 del; 142 mod
  Patch: https://git.openjdk.org/jdk/pull/16877.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/16877/head:pull/16877

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


More information about the hotspot-compiler-dev mailing list