summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/ScheduleDAGInstrs.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
index d8d8422f0ed..ec376e8e7bb 100644
--- a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
+++ b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
@@ -310,9 +310,15 @@ void ScheduleDAGInstrs::addPhysRegDeps(SUnit *SU, unsigned OperIdx) {
SUnit *DefSU = I->SU;
if (DefSU == &ExitSU)
continue;
+ auto IsDefDead = [this](SUnit *DefSU, unsigned Reg) {
+ for (MCSubRegIterator SR(Reg, TRI, true); SR.isValid(); ++SR)
+ if (!DefSU->getInstr()->registerDefIsDead(*SR))
+ return false;
+ return true;
+ };
if (DefSU != SU &&
(Kind != SDep::Output || !MO.isDead() ||
- !DefSU->getInstr()->registerDefIsDead(*Alias))) {
+ !IsDefDead(DefSU, *Alias))) {
if (Kind == SDep::Anti)
DefSU->addPred(SDep(SU, Kind, /*Reg=*/*Alias));
else {
OpenPOWER on IntegriCloud