When emitting a constant, check for ConstantExpr before
authorVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 30 Jul 2003 12:54:47 +0000 (12:54 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 30 Jul 2003 12:54:47 +0000 (12:54 +0000)
ordinary (primitive) types since ConstantExprs may be of primitive type!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7418 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/SparcV9AsmPrinter.cpp

index b541e985be2cabaa3f85e29a3045813eb3997082..6cd28cf005e6a6da9f0e3b3ce6d7fbeaa3370998 100644 (file)
@@ -714,7 +714,21 @@ SparcModuleAsmPrinter::printSingleConstantValue(const Constant* CV)
   
   toAsm << "\t" << TypeToDataDirective(CV->getType()) << "\t";
   
-  if (CV->getType()->isPrimitiveType())
+  if (const ConstantPointerRef* CPR = dyn_cast<ConstantPointerRef>(CV))
+    { // This is a constant address for a global variable or method.
+      // Use the name of the variable or method as the address value.
+      assert(isa<GlobalValue>(CPR->getValue()) && "Unexpected non-global");
+      toAsm << getID(CPR->getValue()) << "\n";
+    }
+  else if (isa<ConstantPointerNull>(CV))
+    { // Null pointer value
+      toAsm << "0\n";
+    }
+  else if (const ConstantExpr* CE = dyn_cast<ConstantExpr>(CV))
+    { // Constant expression built from operators, constants, and symbolic addrs
+      toAsm << ConstantExprToString(CE, Target) << "\n";
+    }
+  else if (CV->getType()->isPrimitiveType())     // Check primitive types last
     {
       if (CV->getType()->isFloatingPoint()) {
         // FP Constants are printed as integer constants to avoid losing
@@ -737,19 +751,6 @@ SparcModuleAsmPrinter::printSingleConstantValue(const Constant* CV)
         WriteAsOperand(toAsm, CV, false, false) << "\n";
       }
     }
-  else if (const ConstantPointerRef* CPR = dyn_cast<ConstantPointerRef>(CV))
-    { // This is a constant address for a global variable or method.
-      // Use the name of the variable or method as the address value.
-      toAsm << getID(CPR->getValue()) << "\n";
-    }
-  else if (isa<ConstantPointerNull>(CV))
-    { // Null pointer value
-      toAsm << "0\n";
-    }
-  else if (const ConstantExpr* CE = dyn_cast<ConstantExpr>(CV))
-    { // Constant expression built from operators, constants, and symbolic addrs
-      toAsm << ConstantExprToString(CE, Target) << "\n";
-    }
   else
     {
       assert(0 && "Unknown elementary type for constant");