When checking whether a def of an aliased register is dead, ask the
authorDan Gohman <gohman@apple.com>
Mon, 26 Oct 2009 18:26:18 +0000 (18:26 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 26 Oct 2009 18:26:18 +0000 (18:26 +0000)
machineinstr whether the aliased register is dead, rather than the original
register is dead. This allows it to get the correct answer when examining
an instruction like this:
  CALLpcrel32 <ga:foo>, %AL<imp-def>, %EAX<imp-def,dead>
where EAX is dead but a subregister of it is still live. This fixes PR5294.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85135 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/ScheduleDAGInstrs.cpp

index 43454dd1cbe6f903307b324514619970fbe99464..880782e28176bee610cbcaeada68e8f29efa28e9 100644 (file)
@@ -208,7 +208,7 @@ void ScheduleDAGInstrs::BuildSchedGraph(AliasAnalysis *AA) {
           SUnit *DefSU = DefList[i];
           if (DefSU != SU &&
               (Kind != SDep::Output || !MO.isDead() ||
-               !DefSU->getInstr()->registerDefIsDead(Reg)))
+               !DefSU->getInstr()->registerDefIsDead(*Alias)))
             DefSU->addPred(SDep(SU, Kind, AOLatency, /*Reg=*/ *Alias));
         }
       }