Integrated: 8342943: Replace predicate walking and cloning code for main/post loops with a predicate visitor

Christian Hagedorn chagedorn at openjdk.org
Wed Nov 6 06:12:35 UTC 2024


On Wed, 30 Oct 2024 15:18:56 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:

> #### Replacing the Remaining Predicate Walking and Cloning Code
> The goal is to replace and unify all the remaining custom predicate walking and cloning code currently used for:
> -  <s>[JDK-8341977](https://bugs.openjdk.org/browse/JDK-8341977): Loop Peeling</s> (integrated with https://github.com/openjdk/jdk/pull/21679))
> - [JDK-8342943](https://bugs.openjdk.org/browse/JDK-8342943): Main and post loop (this PR)
> - [JDK-8342945](https://bugs.openjdk.org/browse/JDK-8342945): Loop Unswitching and removing useless Assertion Predicates (upcoming)
> - [JDK-8342946](https://bugs.openjdk.org/browse/JDK-8342946): Loop Unrolling (upcoming)
> 
> ---
> (Sections taken over from https://github.com/openjdk/jdk/pull/21679)
> 
> #### Single Template Assertion Predicate Check
> This replacement allows us to have a single `TemplateAssertionPredicate::is_predicate()` check that is called for all predicate matching code. This enables the removal of uncommon traps for Template Assertion Predicates with [JDK-8342047](https://bugs.openjdk.org/browse/JDK-8342047) which is a missing piece in order to fix the remaining problems with Assertion Predicates ([JDK-8288981](https://bugs.openjdk.org/browse/JDK-8288981)).
> 
> #### Common Refactorings for all the Patches in this Series
> In each of the patch, I will do similar refactoring ideas:
> - Replace the existing code in the corresponding `PhaseIdealLoop` method with call to a new (or existing) predicate visitor which extends the `PredicateVisitor` interface. 
> - The visitor implements the Assertion Predicate `visit()` methods to implement the cloning and initialization of the Template Assertion Predicates.
> - The predicate visitor is then passed to the `PredicateIterator` which walks through all predicates found at a loop and applies the visitor for each predicate. 
> - The visitor creates new nodes (if there are Template Assertion Predicates) either in place or at the loop entry of a target loop. In the latter case, the calling code of the `PredicateIterator` must make sure to connect the tail of the newly created predicate chain after the old loop entry to the target loop head.
> - Keep the semantics which includes to only apply the Template Assertion Predicate processing if there are Parse Predicates. This limitation should eventually be removed. But I want to do that separately at a later point.
> ---
> 
> #### Refactorings of this Patch
> This patch replaces the predicate walking and cloning code for **main and post loops**. The code can reuse the code established w...

This pull request has now been integrated.

Changeset: 4431852a
Author:    Christian Hagedorn <chagedorn at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/4431852a880b06241231d346311170331c20ab2d
Stats:     275 lines in 5 files changed: 94 ins; 164 del; 17 mod

8342943: Replace predicate walking and cloning code for main/post loops with a predicate visitor

Reviewed-by: roland, kvn

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

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


More information about the hotspot-compiler-dev mailing list