summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorGeoff Berry <gberry@codeaurora.org>2016-12-15 19:55:19 +0000
committerGeoff Berry <gberry@codeaurora.org>2016-12-15 19:55:19 +0000
commit66d1f0ff1fb839678e23d56b7173befafe70bd3e (patch)
treeb3130929798610945d5f4f2c7ff2feed57f9a3c5 /llvm/lib
parente089554c8f6bffff5ff9df9e67b5217eafbeb8a6 (diff)
downloadbcm5719-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')
-rw-r--r--llvm/lib/CodeGen/LiveRangeEdit.cpp9
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);
OpenPOWER on IntegriCloud