Add support for undef
[oota-llvm.git] / lib / CodeGen / AsmPrinter.cpp
index 9d99bdc4cde1824453994816edc39de2347d8042..eb57cced13ee9a7b918b7a6aa7c691b2de7c1763 100644 (file)
@@ -46,12 +46,6 @@ void AsmPrinter::emitZeros(unsigned NumZeros) const {
     if (ZeroDirective)
       O << ZeroDirective << NumZeros << "\n";
     else {
-      if (NumZeros >= 8 && Data64bitsDirective) {
-        for (; NumZeros >= 8; NumZeros -= 8)
-          O << Data64bitsDirective << "0\n";
-      }
-      for (; NumZeros >= 4; NumZeros -= 4)
-        O << Data32bitsDirective << "0\n";
       for (; NumZeros; --NumZeros)
         O << Data8bitsDirective << "0\n";
     }
@@ -61,7 +55,7 @@ void AsmPrinter::emitZeros(unsigned NumZeros) const {
 // Print out the specified constant, without a storage class.  Only the
 // constants valid in constant expressions can occur here.
 void AsmPrinter::emitConstantValueOnly(const Constant *CV) {
-  if (CV->isNullValue())
+  if (CV->isNullValue() || isa<UndefValue>(CV))
     O << "0";
   else if (const ConstantBool *CB = dyn_cast<ConstantBool>(CV)) {
     assert(CB == ConstantBool::True);
@@ -177,7 +171,7 @@ static void printAsCString(std::ostream &O, const ConstantArray *CVA) {
 void AsmPrinter::emitGlobalConstant(const Constant *CV) {  
   const TargetData &TD = TM.getTargetData();
 
-  if (CV->isNullValue()) {
+  if (CV->isNullValue() || isa<UndefValue>(CV)) {
     emitZeros(TD.getTypeSize(CV->getType()));
     return;
   } else if (const ConstantArray *CVA = dyn_cast<ConstantArray>(CV)) {
@@ -225,21 +219,21 @@ void AsmPrinter::emitGlobalConstant(const Constant *CV) {
       U.FVal = Val;
 
       if (Data64bitsDirective)
-        O << Data64bitsDirective << U.UVal << "\t" << CommentChar
+        O << Data64bitsDirective << U.UVal << "\t" << CommentString
           << " double value: " << Val << "\n";
       else if (TD.isBigEndian()) {
         O << Data32bitsDirective << unsigned(U.UVal >> 32)
-          << "\t" << CommentChar << " double most significant word "
+          << "\t" << CommentString << " double most significant word "
           << Val << "\n";
         O << Data32bitsDirective << unsigned(U.UVal)
-          << "\t" << CommentChar << " double least significant word "
+          << "\t" << CommentString << " double least significant word "
           << Val << "\n";
       } else {
         O << Data32bitsDirective << unsigned(U.UVal)
-          << "\t" << CommentChar << " double least significant word " << Val
+          << "\t" << CommentString << " double least significant word " << Val
           << "\n";
         O << Data32bitsDirective << unsigned(U.UVal >> 32)
-          << "\t" << CommentChar << " double most significant word " << Val
+          << "\t" << CommentString << " double most significant word " << Val
           << "\n";
       }
       return;
@@ -250,7 +244,7 @@ void AsmPrinter::emitGlobalConstant(const Constant *CV) {
       } U;
       U.FVal = Val;
       
-      O << Data32bitsDirective << U.UVal << "\t" << CommentChar
+      O << Data32bitsDirective << U.UVal << "\t" << CommentString
         << " float " << Val << "\n";
       return;
     }
@@ -262,17 +256,17 @@ void AsmPrinter::emitGlobalConstant(const Constant *CV) {
         O << Data64bitsDirective << Val << "\n";
       else if (TD.isBigEndian()) {
         O << Data32bitsDirective << unsigned(Val >> 32)
-          << "\t" << CommentChar << " Double-word most significant word "
+          << "\t" << CommentString << " Double-word most significant word "
           << Val << "\n";
         O << Data32bitsDirective << unsigned(Val)
-          << "\t" << CommentChar << " Double-word least significant word "
+          << "\t" << CommentString << " Double-word least significant word "
           << Val << "\n";
       } else {
         O << Data32bitsDirective << unsigned(Val)
-          << "\t" << CommentChar << " Double-word least significant word "
+          << "\t" << CommentString << " Double-word least significant word "
           << Val << "\n";
         O << Data32bitsDirective << unsigned(Val >> 32)
-          << "\t" << CommentChar << " Double-word most significant word "
+          << "\t" << CommentString << " Double-word most significant word "
           << Val << "\n";
       }
       return;