diff options
author | Geoff Berry <gberry@codeaurora.org> | 2016-12-15 19:55:19 +0000 |
---|---|---|
committer | Geoff Berry <gberry@codeaurora.org> | 2016-12-15 19:55:19 +0000 |
commit | 66d1f0ff1fb839678e23d56b7173befafe70bd3e (patch) | |
tree | b3130929798610945d5f4f2c7ff2feed57f9a3c5 /llvm/lib/CodeGen | |
parent | e089554c8f6bffff5ff9df9e67b5217eafbeb8a6 (diff) | |
download | bcm5719-llvm-66d1f0ff1fb839678e23d56b7173befafe70bd3e.tar.gz bcm5719-llvm-66d1f0ff1fb839678e23d56b7173befafe70bd3e.zip |
[LiveRangeEdit] Change eliminateDeadDef assert to if condition.
The assert could potentially fire (though no cases have been
encountered), so just check that the instruction we're handling
specially for rematerialization only has one def to begin with.
Reviewed by Wei Mi over email.
llvm-svn: 289861
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/LiveRangeEdit.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/LiveRangeEdit.cpp b/llvm/lib/CodeGen/LiveRangeEdit.cpp index 01fc0a45d3d..4bc65fcdd1c 100644 --- a/llvm/lib/CodeGen/LiveRangeEdit.cpp +++ b/llvm/lib/CodeGen/LiveRangeEdit.cpp @@ -272,10 +272,11 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink, bool ReadsPhysRegs = false; bool isOrigDef = false; unsigned Dest; - if (VRM && MI->getOperand(0).isReg() && MI->getOperand(0).isDef()) { - // It is assumed that callers of eliminateDeadDefs() will never pass in dead - // instructions with multiple virtual register defs. - assert(MI->getDesc().getNumDefs() == 1 && "Unexpected instruction with multiple defs."); + // Only optimize rematerialize case when the instruction has one def, since + // otherwise we could leave some dead defs in the code. This case is + // extremely rare. + if (VRM && MI->getOperand(0).isReg() && MI->getOperand(0).isDef() && + MI->getDesc().getNumDefs() == 1) { Dest = MI->getOperand(0).getReg(); unsigned Original = VRM->getOriginal(Dest); LiveInterval &OrigLI = LIS.getInterval(Original); |