summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorCameron Zwarich <zwarich@apple.com>2011-05-20 23:25:36 +0000
committerCameron Zwarich <zwarich@apple.com>2011-05-20 23:25:36 +0000
commitd7ee0fcac992a0eced1902b643c1eca91aba565e (patch)
tree3de1628c8845d53ea85850e58aec7641591c3889 /llvm/lib/CodeGen
parent0837692ac637c42e585fc876f5cc8ad8229ab2b2 (diff)
downloadbcm5719-llvm-d7ee0fcac992a0eced1902b643c1eca91aba565e.tar.gz
bcm5719-llvm-d7ee0fcac992a0eced1902b643c1eca91aba565e.zip
Fix PR9962 by properly constraining register classes in RemoveCopyByCommutingDef(). This
actually fixes most of the VerifyCoalescing failures in test-suite. llvm-svn: 131768
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp b/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp
index c33ce24c5e8..21184895ccb 100644
--- a/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp
+++ b/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp
@@ -430,6 +430,10 @@ bool SimpleRegisterCoalescing::RemoveCopyByCommutingDef(const CoalescerPair &CP,
MachineInstr *NewMI = tii_->commuteInstruction(DefMI);
if (!NewMI)
return false;
+ if (TargetRegisterInfo::isVirtualRegister(IntA.reg) &&
+ TargetRegisterInfo::isVirtualRegister(IntB.reg) &&
+ !mri_->constrainRegClass(IntB.reg, mri_->getRegClass(IntA.reg)))
+ return false;
if (NewMI != DefMI) {
li_->ReplaceMachineInstrInMaps(DefMI, NewMI);
MBB->insert(DefMI, NewMI);
OpenPOWER on IntegriCloud