Restrict EXTRACT_SUBREG coalescing to avoid negative performance impact.
authorEvan Cheng <evan.cheng@apple.com>
Fri, 12 Oct 2007 09:15:53 +0000 (09:15 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 12 Oct 2007 09:15:53 +0000 (09:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42903 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SimpleRegisterCoalescing.cpp

index 9d43750f1c68ca2ce73a4e3361a15d8da48d0947..67e829efee18d668ec32ef82957bce7b532c3b2b 100644 (file)
@@ -264,8 +264,13 @@ bool SimpleRegisterCoalescing::JoinCopy(MachineInstr *CopyMI,
         if (li_->hasInterval(*SR) && RHS.overlaps(li_->getInterval(*SR))) {
           DOUT << "Interfere with sub-register ";
           DEBUG(li_->getInterval(*SR).print(DOUT, mri_));
-          return true;
+          return true; // Not coalescable
         }
+    } else if (li_->getInterval(repDstReg).getSize() >
+               li_->getInterval(repSrcReg).getSize()) {
+      // Be conservative. If both sides are virtual registers, do not coalesce
+      // if the sub-register live interval is longer.
+      return false;
     }
   } else if (differingRegisterClasses(repSrcReg, repDstReg)) {
     // If they are not of the same register class, we cannot join them.