RFR: 8346552: C2: Add IR tests to check that Parse Predicate cloning in Loop Unswitching works as expected [v2]

Manuel Hässig duke at openjdk.org
Thu Apr 10 11:19:11 UTC 2025


> # Issue Summary
> 
> When a loop is unswitched, all parse predicates from the original loop must be cloned to the second loop that is created. Forgetting to clone a parse predicate is a common error during development on loop unswitching code that we could not catch previously. Since we have the IR-framework now, this PR introduces a test to catch this error.
> 
> # Changes
> 
> The main contribution of this PR is a test to ensure that all predicates have been cloned into an unswitched loop. This also required some relating changes:
>  - add `OPAQUE_TEMPLATE_ASSERTION_PREDICATE_NODE` to the IR-framework,
>  - add some missing parse predicate nodes to the IR-framework,
>  - change the output of the labels of parse predicate nodes in the ideal graph so they can be recognized reliably by the IR-framework (the main problem was that `Loop ` is a prefix of `Loop Limit Check` that is hard to distinguish with spaces instead of underlines),
>  - rework the regex for detecting parse predicates in the IR-framework,
>  - add a test to ensure parse predicates are cloned into unswitched loops.
> 
> # Testing
> 
> - [Github Actions](https://github.com/mhaessig/jdk/actions/runs/14266369099)
> - tier1 through tier3 plus Oracle internal testing

Manuel Hässig has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:

 - ir-framework: use new before/after loop opts phases
 - Merge branch 'master' into JDK-8346552-predicate-cloning
 - Add IR test for predicate cloning
 - ir-framework: make the parse predicate node regex more robust
 - ir-framework: add auto vectorization check node
 - ir-framework: add opaque template assertion predicate node

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/24479/files
  - new: https://git.openjdk.org/jdk/pull/24479/files/50511998..fc3d5d11

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=24479&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=24479&range=00-01

  Stats: 34074 lines in 669 files changed: 16942 ins; 14756 del; 2376 mod
  Patch: https://git.openjdk.org/jdk/pull/24479.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24479/head:pull/24479

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


More information about the hotspot-compiler-dev mailing list