Do not crash when joining two intervals of registers of different
authorAlkis Evlogimenos <alkis@evlogimenos.com>
Tue, 6 Jul 2004 16:03:21 +0000 (16:03 +0000)
committerAlkis Evlogimenos <alkis@evlogimenos.com>
Tue, 6 Jul 2004 16:03:21 +0000 (16:03 +0000)
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

lib/CodeGen/LiveIntervalAnalysis.cpp

index 9c108056445794f36c4e1774f17ab9fb93b3b10f..2347c6b567a8691902999adc5f77eaa79ef45d29 100644 (file)
@@ -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);