From: Jakob Stoklund Olesen Date: Tue, 8 Feb 2011 19:33:55 +0000 (+0000) Subject: Avoid folding a load instruction into an instruction that redefines the register. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7b1f498a7648b790929a4f97fd82228aa7ac7bea;p=llvm Avoid folding a load instruction into an instruction that redefines the register. The target hook doesn't know how to do that. (Neither do I). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125108 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/InlineSpiller.cpp b/lib/CodeGen/InlineSpiller.cpp index 3e4f6c83036..00ca3d5bb64 100644 --- a/lib/CodeGen/InlineSpiller.cpp +++ b/lib/CodeGen/InlineSpiller.cpp @@ -157,7 +157,8 @@ bool InlineSpiller::reMaterializeFor(MachineBasicBlock::iterator MI) { // Finally we can rematerialize OrigMI before MI. SlotIndex DefIdx = edit_->rematerializeAt(*MI->getParent(), MI, NewLI.reg, RM, lis_, tii_, tri_); - DEBUG(dbgs() << "\tremat: " << DefIdx << '\n'); + DEBUG(dbgs() << "\tremat: " << DefIdx << '\t' + << *lis_.getInstructionFromIndex(DefIdx)); // Replace operands for (unsigned i = 0, e = Ops.size(); i != e; ++i) { @@ -270,6 +271,9 @@ bool InlineSpiller::foldMemoryOperand(MachineBasicBlock::iterator MI, // FIXME: Teach targets to deal with subregs. if (MO.getSubReg()) return false; + // We cannot fold a load instruction into a def. + if (LoadMI && MO.isDef()) + return false; // Tied use operands should not be passed to foldMemoryOperand. if (!MI->isRegTiedToDefOperand(Idx)) FoldOps.push_back(Idx);