[PATCH] D114831: [NFC][regalloc] Move ExtraRegInfo and related to LiveRangeStageManager

Mircea Trofin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 2 15:29:05 PST 2021


mtrofin added a comment.

In D114831#3168361 <https://reviews.llvm.org/D114831#3168361>, @MatzeB wrote:

>> We'll want to use ExtraRegInfo & associated APIs in the ML-based implementation, hence the factoring.
>
> I understand that. I am hinting at possible designs on how much or how little we abstract:
>
> 1. Treat "eviction" as a strategy that is part of `RegAllocGreedy` and specifically embrace the fact that things only work in combination with RegAllocGreedy:
>
>   // RegAllocGreedy.h
>   class RegAllocGreedy;
>   
>   // This is interface only works for RAGreedy, hence it is in RegAllocGreedy.h. Benefit: we can directly
>   // re-use datastructures and call methods on RAGreedy.
>   class EvictionStrategy {
>     RegAllocGreedy *RAGreedy;
>     EvictionStrategy(RegAllocGreedy* RAGreedy) : RAGreedy(RAGreedy) {}
>   
>     void doStuff() {
>       // ...
>       RAGreedy->setStage(...);
>       // ...
>     }
>   };
>   
>   class RegAllocGreedy {
>   
>     void setStage(...);
>     friend class EvictionStrategy;
>     // ...
>     EvictionStrategy *Eviction;
>   };
>
> This will require fewer abstraction to be built up, with the downside of having a higher entanglement between the two.
>
> 2. The other end of the spectrum is pushing for more abstraction modeling eviction independently of the rest of the register allocator. This usually comes with the goal of having a cleaner separation of concerns and better re-usability of the algorithm (for other regallocs or compilers?).
>
> Now my point is that the current patches appear to aiming more at option 2) while at the same time the interfaces are clearly heavily inspired/only usable for `RegAllocGreedy`. So I was posing the question if we should rather acknowledge that reality and aim more for a 1) design instead...
>
> While I personally think 1) is the better choice in this context, I wouldn't be surprised if different people have different opinions here, so I was fishing for opinions...

Option 1 would mean extracting RAGreedy in that header, and that looks like a larger factoring in a .h, in comparison to the ExtraRegInfo stuff.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114831/new/

https://reviews.llvm.org/D114831



More information about the llvm-commits mailing list