diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/CodeGen/MachineCSE.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp | 1 | 
2 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/MachineCSE.cpp b/llvm/lib/CodeGen/MachineCSE.cpp index 3031d4588b2..491a22caf0c 100644 --- a/llvm/lib/CodeGen/MachineCSE.cpp +++ b/llvm/lib/CodeGen/MachineCSE.cpp @@ -63,6 +63,8 @@ namespace {      virtual void releaseMemory() {        ScopeMap.clear();        Exps.clear(); +      AllocatableRegs.clear(); +      ReservedRegs.clear();      }    private: @@ -76,6 +78,8 @@ namespace {      ScopedHTType VNT;      SmallVector<MachineInstr*, 64> Exps;      unsigned CurrVN; +    BitVector AllocatableRegs; +    BitVector ReservedRegs;      bool PerformTrivialCoalescing(MachineInstr *MI, MachineBasicBlock *MBB);      bool isPhysDefTriviallyDead(unsigned Reg, @@ -236,9 +240,9 @@ bool MachineCSE::PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,        return false;      for (unsigned i = 0, e = PhysDefs.size(); i != e; ++i) { -      if (TRI->isInAllocatableClass(PhysDefs[i])) -        // Avoid extending live range of physical registers unless -        // they are unallocatable. +      if (AllocatableRegs.test(PhysDefs[i]) || ReservedRegs.test(PhysDefs[i])) +        // Avoid extending live range of physical registers if they are +        //allocatable or reserved.          return false;      }      CrossMBB = true; @@ -588,5 +592,7 @@ bool MachineCSE::runOnMachineFunction(MachineFunction &MF) {    MRI = &MF.getRegInfo();    AA = &getAnalysis<AliasAnalysis>();    DT = &getAnalysis<MachineDominatorTree>(); +  AllocatableRegs = TRI->getAllocatableSet(MF); +  ReservedRegs = TRI->getReservedRegs(MF);    return PerformCSE(DT->getRootNode());  } diff --git a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp index 6a46e636267..9c8486c9bcd 100644 --- a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp @@ -79,7 +79,6 @@ getReservedRegs(const MachineFunction &MF) const {    BitVector Reserved(getNumRegs());    Reserved.set(ARM::SP);    Reserved.set(ARM::PC); -  Reserved.set(ARM::FPSCR);    if (TFI->hasFP(MF))      Reserved.set(FramePtr);    if (hasBasePointer(MF))  | 

