Avoid creating %physreg:subidx operands in SimpleRegisterCoalescing::RemoveCopyByComm...
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 9 Jul 2010 05:56:21 +0000 (05:56 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 9 Jul 2010 05:56:21 +0000 (05:56 +0000)
This fixes PR7602.

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

lib/CodeGen/SimpleRegisterCoalescing.cpp

index 87337c9676ed117fdd0ab8a2ba3dd116b1173218..b547c1df7438bda2277145dd857b58f6f0a7658b 100644 (file)
@@ -460,7 +460,10 @@ bool SimpleRegisterCoalescing::RemoveCopyByCommutingDef(const CoalescerPair &CP,
     LiveInterval::iterator ULR = IntA.FindLiveRangeContaining(UseIdx);
     if (ULR == IntA.end() || ULR->valno != AValNo)
       continue;
-    UseMO.setReg(NewReg);
+    if (TargetRegisterInfo::isPhysicalRegister(NewReg))
+      UseMO.substPhysReg(NewReg, *tri_);
+    else
+      UseMO.setReg(NewReg);
     if (UseMI == CopyMI)
       continue;
     if (UseMO.isKill()) {