RFR: 8325252: C2 SuperWord: refactor the packset

Emanuel Peter epeter at openjdk.org
Wed Mar 20 15:08:51 UTC 2024


I'm refactoring the packset, separating the details of packset-manupulation from the SuperWord algorithm.

Most importantly: I split it into two classes: `PairSet` and `PackSet`.
`combine_pairs_to_longer_packs` converts the first into the second.

I was able to simplify the combining, and remove the pack-sorting.
I now walk "pair-chains" directly with `PairSetIterator`. One such pair-chain is equivalent to a pack.

I moved all the `filter / split` functionality to the `PackSet`, which allows hiding a lot of packset-manipulation from the SuperWord algorithm.

I ran into some issues when I was extending the pairset in `extend_pairset_with_more_pairs_by_following_use_and_def`:
Using the PairSetIterator changed the order of extension, and that messed with the packing heuristic, and quite a few examples did not vectorize, because we would pack up the wrong 2 nodes out of a choice of 4 (e.g. we would pack `ac bd` instead of `ab cd`). Hence, I now still have to keep the insertion order for the pairs, and this basically means we are extending with a BFS order. Maybe this issue can be removed, if I improve the packing heuristic with some look-ahead expansion approach (but that is for another day [JDK-8309908](https://bugs.openjdk.org/browse/JDK-8309908)).

But since I already spent some time on some of the packing heuristic (reordering and cost estimate), I did a light refactoring, and added extra tests for MulAddS2I.

More details are described in the annotations in the code.

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

Commit messages:
 - revert the estimate_cost_savings_when_packing_pair to previous logic
 - pairset insertion order
 - improve estimate_cost_savings_when_packing_pair heuristic
 - fix MulAddS2I case, and add more tests
 - improve extension cost model
 - get_right_or_null_for
 - some const-ness
 - PairSetIterator now iterates pair-chains
 - small bugfix, need to check in_bb
 - rm last Todo
 - ... and 16 more: https://git.openjdk.org/jdk/compare/251347bd...bdc57434

Changes: https://git.openjdk.org/jdk/pull/18276/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18276&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8325252
  Stats: 1115 lines in 6 files changed: 483 ins; 339 del; 293 mod
  Patch: https://git.openjdk.org/jdk/pull/18276.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18276/head:pull/18276

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


More information about the hotspot-compiler-dev mailing list