diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h index 37b64571aa6..73d730a647e 100644 --- a/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -47,6 +47,8 @@ namespace llvm { typedef std::map Reg2RegMap; Reg2RegMap r2rMap_; + std::vector allocatableRegs_; + public: struct InstrSlots { diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 6cf95d20903..14bccf6fa96 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -87,6 +87,7 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { tm_ = &fn.getTarget(); mri_ = tm_->getRegisterInfo(); lv_ = &getAnalysis(); + allocatableRegs_ = mri_->getAllocatableSet(fn); // number MachineInstrs unsigned miIndex = 0; @@ -484,7 +485,7 @@ void LiveIntervals::handleRegisterDef(MachineBasicBlock *MBB, unsigned reg) { if (MRegisterInfo::isVirtualRegister(reg)) handleVirtualRegisterDef(MBB, MI, getOrCreateInterval(reg)); - else if (lv_->getAllocatablePhysicalRegisters()[reg]) { + else if (allocatableRegs_[reg]) { handlePhysicalRegisterDef(MBB, MI, getOrCreateInterval(reg)); for (const unsigned* AS = mri_->getAliasSet(reg); *AS; ++AS) handlePhysicalRegisterDef(MBB, MI, getOrCreateInterval(*AS)); @@ -541,10 +542,8 @@ void LiveIntervals::joinIntervalsInMachineBB(MachineBasicBlock *MBB) { // on not allocatable physical registers unsigned regA, regB; if (TII.isMoveInstr(*mi, regA, regB) && - (MRegisterInfo::isVirtualRegister(regA) || - lv_->getAllocatablePhysicalRegisters()[regA]) && - (MRegisterInfo::isVirtualRegister(regB) || - lv_->getAllocatablePhysicalRegisters()[regB])) { + (MRegisterInfo::isVirtualRegister(regA) || allocatableRegs_[regA]) && + (MRegisterInfo::isVirtualRegister(regB) || allocatableRegs_[regB])) { // Get representative registers. regA = rep(regA); diff --git a/lib/CodeGen/LiveIntervalAnalysis.h b/lib/CodeGen/LiveIntervalAnalysis.h index 37b64571aa6..73d730a647e 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.h +++ b/lib/CodeGen/LiveIntervalAnalysis.h @@ -47,6 +47,8 @@ namespace llvm { typedef std::map Reg2RegMap; Reg2RegMap r2rMap_; + std::vector allocatableRegs_; + public: struct InstrSlots {