From eac8e25ea5ee64ea46f93bba42d842fbde61609c Mon Sep 17 00:00:00 2001 From: Jay Foad Date: Wed, 22 Mar 2023 16:56:05 +0000 Subject: [PATCH] [CodeGen] Fix type of MachineRegisterInfo::RegAllocHints. NFC. The first member of the pair should be unsigned instead of Register because it is the hint type, 0 for simple (target independent) hints and other values for target dependent hints. Differential Revision: https://reviews.llvm.org/D146646 --- llvm/include/llvm/CodeGen/MachineRegisterInfo.h | 17 ++++++++--------- llvm/lib/CodeGen/CalcSpillWeights.cpp | 2 +- llvm/lib/CodeGen/TargetRegisterInfo.cpp | 4 ++-- llvm/lib/CodeGen/VirtRegMap.cpp | 6 +++--- llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp | 4 ++-- .../tools/llvm-reduce/deltas/ReduceVirtualRegisters.cpp | 2 +- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h index ce447be..fc4e5ca 100644 --- a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h +++ b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h @@ -101,8 +101,9 @@ private: /// first member of the pair being non-zero. If the hinted register is /// virtual, it means the allocator should prefer the physical register /// allocated to it if any. - IndexedMap>, - VirtReg2IndexFunctor> RegAllocHints; + IndexedMap>, + VirtReg2IndexFunctor> + RegAllocHints; /// PhysRegUseDefLists - This is an array of the head of the use/def list for /// physical registers. @@ -818,27 +819,25 @@ public: /// getRegAllocationHint - Return the register allocation hint for the /// specified virtual register. If there are many hints, this returns the /// one with the greatest weight. - std::pair - getRegAllocationHint(Register VReg) const { + std::pair getRegAllocationHint(Register VReg) const { assert(VReg.isVirtual()); Register BestHint = (RegAllocHints[VReg.id()].second.size() ? RegAllocHints[VReg.id()].second[0] : Register()); - return std::pair(RegAllocHints[VReg.id()].first, - BestHint); + return {RegAllocHints[VReg.id()].first, BestHint}; } /// getSimpleHint - same as getRegAllocationHint except it will only return /// a target independent hint. Register getSimpleHint(Register VReg) const { assert(VReg.isVirtual()); - std::pair Hint = getRegAllocationHint(VReg); + std::pair Hint = getRegAllocationHint(VReg); return Hint.first ? Register() : Hint.second; } /// getRegAllocationHints - Return a reference to the vector of all /// register allocation hints for VReg. - const std::pair> - &getRegAllocationHints(Register VReg) const { + const std::pair> & + getRegAllocationHints(Register VReg) const { assert(VReg.isVirtual()); return RegAllocHints[VReg]; } diff --git a/llvm/lib/CodeGen/CalcSpillWeights.cpp b/llvm/lib/CodeGen/CalcSpillWeights.cpp index 1146c1d..5a005ba 100644 --- a/llvm/lib/CodeGen/CalcSpillWeights.cpp +++ b/llvm/lib/CodeGen/CalcSpillWeights.cpp @@ -157,7 +157,7 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &LI, SlotIndex *Start, unsigned NumInstr = 0; // Number of instructions using LI SmallPtrSet Visited; - std::pair TargetHint = MRI.getRegAllocationHint(LI.reg()); + std::pair TargetHint = MRI.getRegAllocationHint(LI.reg()); if (LI.isSpillable()) { Register Reg = LI.reg(); diff --git a/llvm/lib/CodeGen/TargetRegisterInfo.cpp b/llvm/lib/CodeGen/TargetRegisterInfo.cpp index e6baf00..051de16 100644 --- a/llvm/lib/CodeGen/TargetRegisterInfo.cpp +++ b/llvm/lib/CodeGen/TargetRegisterInfo.cpp @@ -424,8 +424,8 @@ bool TargetRegisterInfo::getRegAllocationHints( SmallVectorImpl &Hints, const MachineFunction &MF, const VirtRegMap *VRM, const LiveRegMatrix *Matrix) const { const MachineRegisterInfo &MRI = MF.getRegInfo(); - const std::pair> &Hints_MRI = - MRI.getRegAllocationHints(VirtReg); + const std::pair> &Hints_MRI = + MRI.getRegAllocationHints(VirtReg); SmallSet HintedRegs; // First hint may be a target hint. diff --git a/llvm/lib/CodeGen/VirtRegMap.cpp b/llvm/lib/CodeGen/VirtRegMap.cpp index f80b06d..8e00712 100644 --- a/llvm/lib/CodeGen/VirtRegMap.cpp +++ b/llvm/lib/CodeGen/VirtRegMap.cpp @@ -116,10 +116,10 @@ bool VirtRegMap::hasPreferredPhys(Register VirtReg) const { } bool VirtRegMap::hasKnownPreference(Register VirtReg) const { - std::pair Hint = MRI->getRegAllocationHint(VirtReg); - if (Register::isPhysicalRegister(Hint.second)) + std::pair Hint = MRI->getRegAllocationHint(VirtReg); + if (Hint.second.isPhysical()) return true; - if (Register::isVirtualRegister(Hint.second)) + if (Hint.second.isVirtual()) return hasPhys(Hint.second); return false; } diff --git a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp index e6c6ab2..0fc2d8c 100644 --- a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp @@ -338,7 +338,7 @@ bool ARMBaseRegisterInfo::getRegAllocationHints( SmallVectorImpl &Hints, const MachineFunction &MF, const VirtRegMap *VRM, const LiveRegMatrix *Matrix) const { const MachineRegisterInfo &MRI = MF.getRegInfo(); - std::pair Hint = MRI.getRegAllocationHint(VirtReg); + std::pair Hint = MRI.getRegAllocationHint(VirtReg); unsigned Odd; switch (Hint.first) { @@ -391,7 +391,7 @@ bool ARMBaseRegisterInfo::getRegAllocationHints( void ARMBaseRegisterInfo::updateRegAllocHint(Register Reg, Register NewReg, MachineFunction &MF) const { MachineRegisterInfo *MRI = &MF.getRegInfo(); - std::pair Hint = MRI->getRegAllocationHint(Reg); + std::pair Hint = MRI->getRegAllocationHint(Reg); if ((Hint.first == ARMRI::RegPairOdd || Hint.first == ARMRI::RegPairEven) && Hint.second.isVirtual()) { // If 'Reg' is one of the even / odd register pair and it's now changed diff --git a/llvm/tools/llvm-reduce/deltas/ReduceVirtualRegisters.cpp b/llvm/tools/llvm-reduce/deltas/ReduceVirtualRegisters.cpp index eed5be7..2b97e65 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceVirtualRegisters.cpp +++ b/llvm/tools/llvm-reduce/deltas/ReduceVirtualRegisters.cpp @@ -23,7 +23,7 @@ static void dropRegisterHintsFromFunction(Oracle &O, MachineFunction &MF) { for (unsigned I = 0, E = MRI.getNumVirtRegs(); I != E; ++I) { Register Reg = Register::index2VirtReg(I); - const std::pair> &Hints = + const std::pair> &Hints = MRI.getRegAllocationHints(Reg); if (Hints.second.empty()) continue; -- 2.7.4