/// 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<std::pair<Register, SmallVector<Register, 4>>,
- VirtReg2IndexFunctor> RegAllocHints;
+ IndexedMap<std::pair<unsigned, SmallVector<Register, 4>>,
+ VirtReg2IndexFunctor>
+ RegAllocHints;
/// PhysRegUseDefLists - This is an array of the head of the use/def list for
/// physical registers.
/// 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<Register, Register>
- getRegAllocationHint(Register VReg) const {
+ std::pair<unsigned, Register> getRegAllocationHint(Register VReg) const {
assert(VReg.isVirtual());
Register BestHint = (RegAllocHints[VReg.id()].second.size() ?
RegAllocHints[VReg.id()].second[0] : Register());
- return std::pair<Register, Register>(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<Register, Register> Hint = getRegAllocationHint(VReg);
+ std::pair<unsigned, Register> 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<Register, SmallVector<Register, 4>>
- &getRegAllocationHints(Register VReg) const {
+ const std::pair<unsigned, SmallVector<Register, 4>> &
+ getRegAllocationHints(Register VReg) const {
assert(VReg.isVirtual());
return RegAllocHints[VReg];
}
unsigned NumInstr = 0; // Number of instructions using LI
SmallPtrSet<MachineInstr *, 8> Visited;
- std::pair<Register, Register> TargetHint = MRI.getRegAllocationHint(LI.reg());
+ std::pair<unsigned, Register> TargetHint = MRI.getRegAllocationHint(LI.reg());
if (LI.isSpillable()) {
Register Reg = LI.reg();
SmallVectorImpl<MCPhysReg> &Hints, const MachineFunction &MF,
const VirtRegMap *VRM, const LiveRegMatrix *Matrix) const {
const MachineRegisterInfo &MRI = MF.getRegInfo();
- const std::pair<Register, SmallVector<Register, 4>> &Hints_MRI =
- MRI.getRegAllocationHints(VirtReg);
+ const std::pair<unsigned, SmallVector<Register, 4>> &Hints_MRI =
+ MRI.getRegAllocationHints(VirtReg);
SmallSet<Register, 32> HintedRegs;
// First hint may be a target hint.
}
bool VirtRegMap::hasKnownPreference(Register VirtReg) const {
- std::pair<unsigned, unsigned> Hint = MRI->getRegAllocationHint(VirtReg);
- if (Register::isPhysicalRegister(Hint.second))
+ std::pair<unsigned, Register> 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;
}
SmallVectorImpl<MCPhysReg> &Hints, const MachineFunction &MF,
const VirtRegMap *VRM, const LiveRegMatrix *Matrix) const {
const MachineRegisterInfo &MRI = MF.getRegInfo();
- std::pair<Register, Register> Hint = MRI.getRegAllocationHint(VirtReg);
+ std::pair<unsigned, Register> Hint = MRI.getRegAllocationHint(VirtReg);
unsigned Odd;
switch (Hint.first) {
void ARMBaseRegisterInfo::updateRegAllocHint(Register Reg, Register NewReg,
MachineFunction &MF) const {
MachineRegisterInfo *MRI = &MF.getRegInfo();
- std::pair<Register, Register> Hint = MRI->getRegAllocationHint(Reg);
+ std::pair<unsigned, Register> 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
for (unsigned I = 0, E = MRI.getNumVirtRegs(); I != E; ++I) {
Register Reg = Register::index2VirtReg(I);
- const std::pair<Register, SmallVector<Register, 4>> &Hints =
+ const std::pair<unsigned, SmallVector<Register, 4>> &Hints =
MRI.getRegAllocationHints(Reg);
if (Hints.second.empty())
continue;