From c6a2041d997ffa2a7c19b76d8838852f37d04f55 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Tue, 8 Feb 2011 19:33:55 +0000 Subject: [PATCH] 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). llvm-svn: 125108 --- llvm/lib/CodeGen/InlineSpiller.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/InlineSpiller.cpp b/llvm/lib/CodeGen/InlineSpiller.cpp index 3e4f6c83036b..00ca3d5bb64d 100644 --- a/llvm/lib/CodeGen/InlineSpiller.cpp +++ b/llvm/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);