RFR: 8366427: C2 SuperWord: refactor VTransform scalar nodes

Emanuel Peter epeter at openjdk.org
Fri Aug 29 14:24:09 UTC 2025


I'm working on cost-modeling, and am integrating some smaller changes from this proof-of-concept PR:
https://github.com/openjdk/jdk/pull/20964

This is a pure refactoring - no change in behaviour. I'm presenting it like this because it will make reviews easier.

The goal is to split up some cases that are currently treated the same, but will alter have different behavior. There may be a little bit of code duplication, but the code will soon be made different ;)

We split the `VTransformScalarNode`:
- `VTransformMemopScalarNode`
  - Uses that only wanted scalar mem nodes can now directly check for `isa_MemopScalar`.
  - We can directly store the `_vpointer` in a field, that way we don't need to do a lookup via `vloop_analyzer`. This could also be helpful later on if we ever do widening (unrolling during auto vectorization): we could then do the necessary modifications to the `vpointer`.
- `VTransformLoopPhiNode`
  - Later on, they will play a more special role, they will give us easy access to the beginning state of the loop body and the backedges.
- `VTransformCFGNode`
  - Calling them scalar nodes is not 100% accurate. We'll probably have to further refine them later on. But splitting them off now seems like a reasonable choice. Once we do if-conversion we'll have to do more work on CFG.
- `VTransformDataScalarNode`
  - These represent all the normal "calculation" nodes in the loop.
- `VTransformInputScalarNode` -> `VTransformOuterNode`:
  - For now, we are still just tracking input nodes, but soon we will need to track input and output nodes: basically just the 1-hop neighbourhood of nodes outside the loop. I'm already renaming them now, so it will be less noise later.

I decided to rather split up more, and avoid the `VTransformScalarNode` together, avoiding having to override overrides - that can be really confusing (e.g. what I had with `is_load_in_loop`).

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

Depends on: https://git.openjdk.org/jdk/pull/26991

Commit messages:
 - improve print_spec
 - rm comment
 - InputScalar -> Outer renaming
 - rm useless methods
 - rm vloop_analyzer from vpointer method
 - JDK-8366427

Changes: https://git.openjdk.org/jdk/pull/27002/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27002&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8366427
  Stats: 157 lines in 4 files changed: 114 ins; 0 del; 43 mod
  Patch: https://git.openjdk.org/jdk/pull/27002.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27002/head:pull/27002

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


More information about the hotspot-compiler-dev mailing list