diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachinePipeliner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachinePipeliner.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/MachinePipeliner.cpp b/llvm/lib/CodeGen/MachinePipeliner.cpp index 17c2564..527f1e4 100644 --- a/llvm/lib/CodeGen/MachinePipeliner.cpp +++ b/llvm/lib/CodeGen/MachinePipeliner.cpp @@ -2934,6 +2934,13 @@ void SwingSchedulerDAG::removeDeadInstructions(MachineBasicBlock *KernelBB, if (!MOI->isReg() || !MOI->isDef()) continue; unsigned reg = MOI->getReg(); + // Assume physical registers are used, unless they are marked dead. + if (TargetRegisterInfo::isPhysicalRegister(reg)) { + used = !MOI->isDead(); + if (used) + break; + continue; + } unsigned realUses = 0; for (MachineRegisterInfo::use_iterator UI = MRI.use_begin(reg), EI = MRI.use_end(); @@ -3650,7 +3657,7 @@ static SUnit *multipleIterations(SUnit *SU, SwingSchedulerDAG *DAG) { for (auto &P : SU->Preds) if (DAG->isBackedge(SU, P) && P.getSUnit()->getInstr()->isPHI()) for (auto &S : P.getSUnit()->Succs) - if (S.getKind() == SDep::Order && S.getSUnit()->getInstr()->isPHI()) + if (S.getKind() == SDep::Data && S.getSUnit()->getInstr()->isPHI()) return P.getSUnit(); return nullptr; } |