RFR: 8324890: C2 SuperWord: refactor out VLoop, make unrolling_analysis static, remove init/reset mechanism [v2]
Emanuel Peter
epeter at openjdk.org
Tue Jan 30 20:28:07 UTC 2024
> Subtask of https://github.com/openjdk/jdk/pull/16620
>
> 1. Move out the shared code between `SuperWord::SLP_extract` (where we do vectorization) and `SuperWord::unrolling_analysis`, and move it to a new class `VLoop`. This allows us to decouple `unrolling_analysis` from the SuperWord object, and we can make it static.
> 2. So far, SuperWord was reused for all loops in a compilation, and then "reset" (with `SuperWord::init`) for every loop. This is a bit of a nasty pattern. I now make a new `VLoop` and a new `SuperWord` object per loop.
> 3. Since we now make more `SuperWord` objects, we allocate the internal data structures more often. Therefore, I now pre-allocate/reserve sufficient space on initialization.
>
> Side-note about https://github.com/openjdk/jdk/pull/17604:
> I would like to remove the use of `SuperWord::is_marked_reduction` from `SuperWord::unrolling_analysis`. For starters: it is not clear what it was ever good for. Second: it requires us to do reduction marking/analysis before `unrolling_analysis`, and hence makes the reduction marking shared between `unrolling_analysis` and vectorization. I could move the reduction marking to `VLoop` now. But the `_loop_reducitons` set would have to be put on an arena, and I would like to avoid creating an arena for the `unrolling_analysis`. Plus, it would just be nicer code, to have reduction analysis together with body analysis, type analysis, etc. and all of them in only in `SLP_extract`.
Emanuel Peter 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 12 additional commits since the last revision:
- Merge branch 'master' into JDK-8324890
- _vtrace is moved to VLoop
- comment update
- cosmetics
- rename in preconditions
- remove loop_transform_helper
- fix small bug
- preallocate memory
- more refactoring
- moved mark_reductions
- ... and 2 more: https://git.openjdk.org/jdk/compare/c7ce673d...25e3710e
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/17624/files
- new: https://git.openjdk.org/jdk/pull/17624/files/06d83797..25e3710e
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=17624&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=17624&range=00-01
Stats: 9215 lines in 858 files changed: 218 ins; 158 del; 8839 mod
Patch: https://git.openjdk.org/jdk/pull/17624.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/17624/head:pull/17624
PR: https://git.openjdk.org/jdk/pull/17624
More information about the hotspot-compiler-dev
mailing list