diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-08 00:40:47 +0000 | 
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-08 00:40:47 +0000 | 
| commit | 3b9a4428416566bca21fd43cfbaeeb566465b5d4 (patch) | |
| tree | 4ffabfaa19ee1c1ed186feffee4ccc182dd50b5f | |
| parent | c0b61ff9c7ca6ce7a04430655bdb16843b7ff31f (diff) | |
| download | bcm5719-llvm-3b9a4428416566bca21fd43cfbaeeb566465b5d4.tar.gz bcm5719-llvm-3b9a4428416566bca21fd43cfbaeeb566465b5d4.zip  | |
Don't scan physreg use-def chains looking for a PIC base.
We can't rematerialize a PIC base after register allocation anyway, and
scanning physreg use-def chains is very expensive in a function with
many calls.
<rdar://problem/12047515>
llvm-svn: 161461
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 14 | 
1 files changed, 4 insertions, 10 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index ec793f8eb63..b26c08fc9c4 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -1463,6 +1463,9 @@ unsigned X86InstrInfo::isStoreToStackSlotPostFE(const MachineInstr *MI,  /// regIsPICBase - Return true if register is PIC base (i.e.g defined by  /// X86::MOVPC32r.  static bool regIsPICBase(unsigned BaseReg, const MachineRegisterInfo &MRI) { +  // Don't waste compile time scanning use-def chains of physregs. +  if (!TargetRegisterInfo::isVirtualRegister(BaseReg)) +    return false;    bool isPICBase = false;    for (MachineRegisterInfo::def_iterator I = MRI.def_begin(BaseReg),           E = MRI.def_end(); I != E; ++I) { @@ -1520,16 +1523,7 @@ X86InstrInfo::isReallyTriviallyReMaterializable(const MachineInstr *MI,            return false;          const MachineFunction &MF = *MI->getParent()->getParent();          const MachineRegisterInfo &MRI = MF.getRegInfo(); -        bool isPICBase = false; -        for (MachineRegisterInfo::def_iterator I = MRI.def_begin(BaseReg), -               E = MRI.def_end(); I != E; ++I) { -          MachineInstr *DefMI = I.getOperand().getParent(); -          if (DefMI->getOpcode() != X86::MOVPC32r) -            return false; -          assert(!isPICBase && "More than one PIC base?"); -          isPICBase = true; -        } -        return isPICBase; +        return regIsPICBase(BaseReg, MRI);        }        return false;      }  | 

