From a2fb634defce316ec972aa6f3ca3a941b4656f5e Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Tue, 25 Mar 2008 02:02:19 +0000 Subject: lastRegisterUse() should ignore identity copies. Those will be erased. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48759 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SimpleRegisterCoalescing.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'lib/CodeGen/SimpleRegisterCoalescing.cpp') diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index 6f5b523638..870fcc4408 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -1541,6 +1541,10 @@ SimpleRegisterCoalescing::lastRegisterUse(unsigned Start, unsigned End, E = mri_->use_end(); I != E; ++I) { MachineOperand &Use = I.getOperand(); MachineInstr *UseMI = Use.getParent(); + unsigned SrcReg, DstReg; + if (tii_->isMoveInstr(*UseMI, SrcReg, DstReg) && SrcReg == DstReg) + // Ignore identity copies. + continue; unsigned Idx = li_->getInstructionIndex(UseMI); if (Idx >= Start && Idx < End && Idx >= UseIdx) { LastUse = &Use; @@ -1562,14 +1566,17 @@ SimpleRegisterCoalescing::lastRegisterUse(unsigned Start, unsigned End, if (e < s || MI == NULL) return NULL; - for (unsigned i = 0, NumOps = MI->getNumOperands(); i != NumOps; ++i) { - MachineOperand &Use = MI->getOperand(i); - if (Use.isRegister() && Use.isUse() && Use.getReg() && - tri_->regsOverlap(Use.getReg(), Reg)) { - UseIdx = e; - return &Use; + // Ignore identity copies. + unsigned SrcReg, DstReg; + if (!(tii_->isMoveInstr(*MI, SrcReg, DstReg) && SrcReg == DstReg)) + for (unsigned i = 0, NumOps = MI->getNumOperands(); i != NumOps; ++i) { + MachineOperand &Use = MI->getOperand(i); + if (Use.isRegister() && Use.isUse() && Use.getReg() && + tri_->regsOverlap(Use.getReg(), Reg)) { + UseIdx = e; + return &Use; + } } - } e -= InstrSlots::NUM; } -- cgit v1.2.3-70-g09d2