diff options
| author | Lang Hames <lhames@gmail.com> | 2012-02-17 00:27:16 +0000 | 
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2012-02-17 00:27:16 +0000 | 
| commit | 5bade3dc6ed11b39f5ac460a33e65c80d7a44df1 (patch) | |
| tree | b984dfce659196b505ff88866e461528ede57042 /llvm | |
| parent | 0d72bb49f0687704aeed405fa58a8fac27e2dddf (diff) | |
| download | bcm5719-llvm-5bade3dc6ed11b39f5ac460a33e65c80d7a44df1.tar.gz bcm5719-llvm-5bade3dc6ed11b39f5ac460a33e65c80d7a44df1.zip  | |
Re-enable 150652 and 150654 - Make FPSCR non-reserved, and make MachineCSE bail on reserved registers. This *should* be safe as of r150786.
llvm-svn: 150769
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))  | 

