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.

llvm-svn: 47262
This commit is contained in:
Evan Cheng 2008-02-18 08:40:53 +00:00
parent b22dbdf4fc
commit 6eeae5bd62

View File

@ -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);