RFR: 8332163: C2 SuperWord: refactor PacksetGraph and SuperWord::output into VTransformGraph

Emanuel Peter epeter at openjdk.org
Sun Jun 16 18:53:40 UTC 2024


The original PR was [here](https://github.com/openjdk/jdk/pull/19261), it got too chaotic.

I added some extra tests for this in: https://github.com/openjdk/jdk/pull/19558
I extracted some refactorings to: https://github.com/openjdk/jdk/pull/19573

We used to have:
- `PacksetGraph`: this detects cycles introduces by packs, and schedules/reorders the memops.
- `SuperWord::apply_vectorization`: creates `VectorNodes` directly from the `PackSet`.

In my blog, I have published lots of ideas for SuperWord / AutoVectorization improvements:
https://eme64.github.io/blog/2023/11/03/C2-AutoVectorizer-Improvement-Ideas.html

Many ideas are based on the "VectorTransform IR": cost-model, if-conversion, direct widening of scalars to vectors, additional optimizations/features with shuffle/pack/extract, handling more reduction patterns, etc.

I now decided to name it `VTransform`, which is essencially a graph `VtransformGraph` of nodes `VTransformNodes` that resemble the C2 Node on purpose, because the `VTransform` models the C2 graph after vectorization. We can now model the transformation from scalar-loop to vectorized-loop without modifying the C2 graph yet.

The new code has these steps:
- Given the `PackSet` from `SuperWord`, we create a `VTransformGraph` with `SuperWordVTransformBuilder`.
- [Not yet: all sorts of optimizations / checks on the `VTransformGraph`, in future RFE's]
- We then schedule the `VTransformGraph`, and check for cycles.
- Once we are ready to commit to vectorization, we call `VTransformGraph::apply_vectorization` which lets each individual `VTransformNode::apply` generate the new vectorized C2 nodes.

**Testing**

Regression testing passed.

Performance testing running...

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

Commit messages:
 - a few more cosmetics
 - revert renaming
 - JDK-8332163

Changes: https://git.openjdk.org/jdk/pull/19719/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19719&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8332163
  Stats: 1874 lines in 5 files changed: 1176 ins; 603 del; 95 mod
  Patch: https://git.openjdk.org/jdk/pull/19719.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19719/head:pull/19719

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


More information about the hotspot-compiler-dev mailing list