Correction to last fix: Pointer types do not return true in Type::IsIntegral().
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 6 Jul 2003 22:50:31 +0000 (22:50 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 6 Jul 2003 22:50:31 +0000 (22:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7113 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/SparcV9RegClassInfo.cpp

index 1640dcab6c68d3c405e136dc6d388093878ad81a..8c20ab04c822091bbc3199870246e89e5ea150a1 100644 (file)
@@ -136,17 +136,20 @@ void SparcIntCCRegClass::colorIGNode(IGNode *Node,
     // Choose whether to use %xcc or %icc based on type of value compared
     const LiveRange* ccLR = Node->getParentLR();
     const Type* setCCType = (* ccLR->begin())->getType(); // any Value in LR
-    assert(setCCType->isIntegral());
-    int ccReg = (setCCType == Type::LongTy)? xcc : icc;
+    assert(setCCType->isIntegral() || isa<PointerType>(setCCType));
+    int ccReg = ((isa<PointerType>(setCCType) || setCCType == Type::LongTy)
+                 ? xcc : icc);
 
 #ifndef NDEBUG
     // Let's just make sure values of two different types have not been
     // coalesced into this LR.
-    for (ValueSet::const_iterator I=ccLR->begin(), E=ccLR->end(); I != E; ++I)
-      assert(setCCType->isIntegral() &&
-             ((ccReg == xcc && (*I)->getType() == Type::LongTy) ||
-              (ccReg == icc && (*I)->getType() != Type::LongTy))
+    for (ValueSet::const_iterator I=ccLR->begin(), E=ccLR->end(); I!=E; ++I) {
+      const Type* ccType = (*I)->getType();
+      assert((ccReg == xcc && (isa<PointerType>(ccType)
+                               || ccType == Type::LongTy)) ||
+             (ccReg == icc && ccType->isIntegral() && ccType != Type::LongTy)
              && "Comparisons needing different intCC regs coalesced in LR!");
+    }
 #endif
 
     Node->setColor(ccReg);                // only one int cc reg is available