- Remove the previous check which broke coalescer-commute3.ll
authorEvan Cheng <evan.cheng@apple.com>
Mon, 18 Feb 2008 18:56:31 +0000 (18:56 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 18 Feb 2008 18:56:31 +0000 (18:56 +0000)
- For now, conservatively ignore copy MI whose source is a physical register. Commuting its def MI can cause a physical register live interval to be live through a loop (since we know it's live coming into the def MI).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47281 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SimpleRegisterCoalescing.cpp

index 199c89ef55ae57694902862612b674d3d2062805..7c512ed368a8669d088ceb64c8daa984987caf96 100644 (file)
@@ -247,11 +247,11 @@ 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)
+  // FIXME: For now, only eliminate the copy by commuting its def when the
+  // source register is a virtual register. We want to guard against cases
+  // where the copy is a back edge copy and commuting the def lengthen the
+  // live interval of the source register to the entire loop.
+  if (TargetRegisterInfo::isPhysicalRegister(IntA.reg))
     return false;
 
   // BValNo is a value number in B that is defined by a copy from A. 'B3' in