Fast path implicit_def check.
authorEvan Cheng <evan.cheng@apple.com>
Tue, 13 Apr 2010 22:13:34 +0000 (22:13 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 13 Apr 2010 22:13:34 +0000 (22:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101183 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineLICM.cpp

index 13a4b8571884038ed204bcb12c66a096be542cfb..7f530ac7aece0d099bc6526f9ac03d68149c3376 100644 (file)
@@ -300,7 +300,7 @@ void MachineLICM::ProcessMI(MachineInstr *MI,
            "Not expecting virtual register!");
 
     if (!MO.isDef()) {
-      if (PhysRegDefs[Reg])
+      if (Reg && PhysRegDefs[Reg])
         // If it's using a non-loop-invariant register, then it's obviously not
         // safe to hoist.
         HasNonInvariantUse = true;
@@ -406,7 +406,7 @@ void MachineLICM::HoistRegionPostRA(MachineDomTreeNode *N) {
       MachineInstr *MI = Candidates[i].MI;
       for (unsigned j = 0, ee = MI->getNumOperands(); j != ee; ++j) {
         const MachineOperand &MO = MI->getOperand(j);
-        if (!MO.isReg() || MO.isDef())
+        if (!MO.isReg() || MO.isDef() || !MO.getReg())
           continue;
         if (PhysRegDefs[MO.getReg()]) {
           // If it's using a non-loop-invariant register, then it's obviously
@@ -502,6 +502,9 @@ void MachineLICM::HoistRegion(MachineDomTreeNode *N) {
 /// candidate for LICM. e.g. If the instruction is a call, then it's obviously
 /// not safe to hoist it.
 bool MachineLICM::IsLICMCandidate(MachineInstr &I) {
+  if (I.isImplicitDef())
+    return false;
+
   const TargetInstrDesc &TID = I.getDesc();
   
   // Ignore stuff that we obviously can't hoist.
@@ -620,9 +623,6 @@ bool MachineLICM::isLoadFromConstantMemory(MachineInstr *MI) {
 /// IsProfitableToHoist - Return true if it is potentially profitable to hoist
 /// the given loop invariant.
 bool MachineLICM::IsProfitableToHoist(MachineInstr &MI) {
-  if (MI.isImplicitDef())
-    return false;
-
   // FIXME: For now, only hoist re-materilizable instructions. LICM will
   // increase register pressure. We want to make sure it doesn't increase
   // spilling.