summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/SimpleRegisterCoalescing.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-02-18 18:56:31 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-02-18 18:56:31 +0000
commita9407f593778c3eff02dbb1fa11129865a59c6d3 (patch)
tree5e2c1086f0947b846e43cdddfa3fce449c61733c /lib/CodeGen/SimpleRegisterCoalescing.cpp
parent7c4e9a44a47742b7e28109d45b4fceda7d9e8032 (diff)
downloadexternal_llvm-a9407f593778c3eff02dbb1fa11129865a59c6d3.zip
external_llvm-a9407f593778c3eff02dbb1fa11129865a59c6d3.tar.gz
external_llvm-a9407f593778c3eff02dbb1fa11129865a59c6d3.tar.bz2
- Remove the previous check which broke coalescer-commute3.ll
- 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
Diffstat (limited to 'lib/CodeGen/SimpleRegisterCoalescing.cpp')
-rw-r--r--lib/CodeGen/SimpleRegisterCoalescing.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp
index 199c89e..7c512ed 100644
--- a/lib/CodeGen/SimpleRegisterCoalescing.cpp
+++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp
@@ -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