From 52c7ff70679d31d95db3f9c15fb7192e504942a9 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Fri, 12 Oct 2007 09:15:53 +0000 Subject: [PATCH] Restrict EXTRACT_SUBREG coalescing to avoid negative performance impact. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42903 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SimpleRegisterCoalescing.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index 9d43750f1c6..67e829efee1 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -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.