From: Alkis Evlogimenos Date: Tue, 6 Jul 2004 16:03:21 +0000 (+0000) Subject: Do not crash when joining two intervals of registers of different X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=5de868b0b2daf145d7991bc9b3bf25807bcc7ca7;p=oota-llvm.git Do not crash when joining two intervals of registers of different classes: just ignore that move. Thanks to Vladimir Prus who found the bug! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14644 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 9c108056445..2347c6b567a 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -502,7 +502,9 @@ void LiveIntervals::joinIntervals() const TargetRegisterClass *rcA, *rcB; rcA = mf_->getSSARegMap()->getRegClass(intA->reg); rcB = mf_->getSSARegMap()->getRegClass(intB->reg); - assert(rcA == rcB && "registers must be of the same class"); + // if they are not of the same register class we continue + if (rcA != rcB) + continue; // if their intervals do not overlap we join them if (!intB->overlaps(*intA)) { @@ -524,6 +526,13 @@ void LiveIntervals::joinIntervals() MRegisterInfo::isVirtualRegister(intB->reg) && "A must be physical and B must be virtual"); + const TargetRegisterClass *rcA, *rcB; + rcA = mri_->getRegClass(intA->reg); + rcB = mf_->getSSARegMap()->getRegClass(intB->reg); + // if they are not of the same register class we continue + if (rcA != rcB) + continue; + if (!intA->overlaps(*intB) && !overlapsAliases(*intA, *intB)) { intA->join(*intB);