[llvm] [AMDGPU] Register allocation anti-hints to reduce MFMA hazard NOPs (PR #156943)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 23 20:49:18 PDT 2025
================
@@ -860,6 +867,56 @@ class MachineRegisterInfo {
return RegAllocHints.inBounds(VReg) ? &RegAllocHints[VReg] : nullptr;
}
+ /// setRegAllocationAntiHint - Add a register allocation anti-hint for the
+ /// specified virtual register. This tells the allocator to avoid allocating
+ /// VReg to the same physical register as AntiHintVReg (or overlapping ones).
+ void setRegAllocationAntiHint(Register VReg, Register AntiHintVReg) {
+ assert(VReg.isVirtual() && "Anti-hints are only for virtual registers");
+ assert(AntiHintVReg.isVirtual() && "Anti-hint target must be virtual");
+ AntiHintRegs.grow(Register::index2VirtReg(getNumVirtRegs()));
+ auto &AntiHints = AntiHintRegs[VReg];
+ // Avoid duplicates
+ if (llvm::find(AntiHints, AntiHintVReg) == AntiHints.end())
+ AntiHints.push_back(AntiHintVReg);
+ }
+
+ /// addRegAllocationAntiHint - Add multiple anti-hints at once.
+ void addRegAllocationAntiHints(Register VReg,
+ ArrayRef<Register> AntiHintVRegs) {
+ for (Register AntiHint : AntiHintVRegs)
+ setRegAllocationAntiHint(VReg, AntiHint);
+ }
+
+ /// clearRegAllocationAntiHints - Clear all anti-hints for a register.
+ void clearRegAllocationAntiHints(Register VReg) {
+ assert(VReg.isVirtual());
+ if (AntiHintRegs.inBounds(VReg))
+ AntiHintRegs[VReg].clear();
+ }
+
+ /// getRegAllocationAntiHints - Return the vector of anti-hints for VReg.
+ ArrayRef<Register> getRegAllocationAntiHints(Register VReg) const {
+ assert(VReg.isVirtual());
+ if (!AntiHintRegs.inBounds(VReg))
+ return ArrayRef<Register>();
+ return AntiHintRegs[VReg];
+ }
+
+ /// hasRegAllocationAntiHint - Check if VReg has AntiHintVReg as an anti-hint.
+ bool hasRegAllocationAntiHint(Register VReg, Register AntiHintVReg) const {
+ assert(VReg.isVirtual() && AntiHintVReg.isVirtual());
+ if (!AntiHintRegs.inBounds(VReg))
+ return false;
+ const auto &AntiHints = AntiHintRegs[VReg];
----------------
arsenm wrote:
NO auto
https://github.com/llvm/llvm-project/pull/156943
More information about the llvm-commits
mailing list