From: Evan Cheng Date: Mon, 18 Feb 2008 08:40:53 +0000 (+0000) Subject: For now, avoid commuting def MI for copy MI's whose source is not killed. That simply... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=96cfff0906915a060e543db8e0e4a74c674ef7c0;p=oota-llvm.git For now, avoid commuting def MI for copy MI's whose source is not killed. That simply trade a live interval for another and because only the non-two-address operands can be folded into loads, may end up pessimising code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47262 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index 17a89086bb6..199c89ef55a 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -247,6 +247,13 @@ bool SimpleRegisterCoalescing::RemoveCopyByCommutingDef(LiveInterval &IntA, unsigned CopyIdx = li_->getDefIndex(li_->getInstructionIndex(CopyMI)); + // FIXME: For now, only eliminate the copy by commuting its def is the source + // does not live pass the move. Coalescing those copies may end up may simply + // end up swapping a live interval for another. That and because usually only + // the non-two address operand can be folded can end up pessimizing the code. + if (CopyMI->findRegisterUseOperandIdx(IntA.reg, true) != -1) + return false; + // BValNo is a value number in B that is defined by a copy from A. 'B3' in // the example above. LiveInterval::iterator BLR = IntB.FindLiveRangeContaining(CopyIdx);