[llvm] [RegAlloc] Add register allocation anti-hints infrastructure (PR #218071)
Lukas Sommer via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 24 02:01:35 PDT 2026
================
@@ -44,8 +45,37 @@ AllocationOrder AllocationOrder::create(Register VirtReg, const VirtRegMap &VRM,
dbgs() << '\n';
}
});
- assert(all_of(Hints,
- [&](MCPhysReg Hint) { return is_contained(Order, Hint); }) &&
+
+ // Get anti-hints
+ SmallVector<MCPhysReg, 16> AntiHintedPhysRegs;
+ MRI.getPhysRegAntiHints(VirtReg, AntiHintedPhysRegs, VRM);
+
+ LLVM_DEBUG({
+ if (!AntiHintedPhysRegs.empty()) {
+ dbgs() << "anti-hints:";
+ for (MCPhysReg AntiHint : AntiHintedPhysRegs)
+ dbgs() << ' ' << printReg(AntiHint, TRI);
+ dbgs() << '\n';
+ }
+ });
+
+ // Storage for filtered order (used if anti-hints cause reordering)
+ SmallVector<MCPhysReg, 16> ShuffledOrder;
+
+ if (!AntiHintedPhysRegs.empty()) {
+ TRI->applyRegAllocationAntiHints(VirtReg, Order, ShuffledOrder,
+ AntiHintedPhysRegs, MF, &VRM, Matrix);
+ }
+ // Use ShuffledOrder as the order if it was populated by anti-hints
+ // processing
+ ArrayRef<MCPhysReg> FinalOrder =
+ ShuffledOrder.empty() ? Order : ShuffledOrder;
+ // Create allocation order object
+ AllocationOrder AO(std::move(Hints), FinalOrder, HardHints,
----------------
sommerlukas wrote:
Do we need to process `Hints` as well? Wouldn't `AllocationOrder` process the `Hints` before `FinalOrder`, so we could end up with an assignment based on a hint that our anti-hint wants to discourage?
https://github.com/llvm/llvm-project/pull/218071
More information about the llvm-commits
mailing list