pull calcTypeName into TypePrinting class, make its type stack
authorChris Lattner <sabre@nondot.org>
Sat, 28 Feb 2009 20:34:19 +0000 (20:34 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 28 Feb 2009 20:34:19 +0000 (20:34 +0000)
be a smallvector instead of vector.

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

lib/VMCore/AsmWriter.cpp

index 6967cdf2216786f55c727c0e920f92d03c6cb4ae..fcb6bbba694a1164ca8c2cd4bc36705e17b2ffae 100644 (file)
@@ -147,6 +147,10 @@ namespace {
     
     void print(const Type *Ty);
     void printAtLeastOneLevel(const Type *Ty);
+    
+  private:
+    void calcTypeName(const Type *Ty, SmallVectorImpl<const Type *> &TypeStack,
+                      std::string &Result);
   };
 } // end anonymous namespace.
 
@@ -169,6 +173,7 @@ TypePrinting::TypePrinting(const Module *M, raw_ostream &os) : OS(os) {
         continue;
     }
     
+    // Get the name as a string and insert it into TypeNames.
     std::string NameStr;
     raw_string_ostream NameOS(NameStr);
     PrintLLVMName(NameOS, TI->first.c_str(), TI->first.length(), LocalPrefix);
@@ -176,10 +181,9 @@ TypePrinting::TypePrinting(const Module *M, raw_ostream &os) : OS(os) {
   }
 }
 
-static void calcTypeName(const Type *Ty,
-                         std::vector<const Type *> &TypeStack,
-                         std::map<const Type *, std::string> &TypeNames,
-                         std::string &Result) {
+void TypePrinting::calcTypeName(const Type *Ty,
+                                SmallVectorImpl<const Type *> &TypeStack,
+                                std::string &Result) {
   if (Ty->isInteger() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty))) {
     Result += Ty->getDescription();  // Base case
     return;
@@ -219,13 +223,13 @@ static void calcTypeName(const Type *Ty,
     }
     case Type::FunctionTyID: {
       const FunctionType *FTy = cast<FunctionType>(Ty);
-      calcTypeName(FTy->getReturnType(), TypeStack, TypeNames, Result);
+      calcTypeName(FTy->getReturnType(), TypeStack, Result);
       Result += " (";
       for (FunctionType::param_iterator I = FTy->param_begin(),
            E = FTy->param_end(); I != E; ++I) {
         if (I != FTy->param_begin())
           Result += ", ";
-        calcTypeName(*I, TypeStack, TypeNames, Result);
+        calcTypeName(*I, TypeStack, Result);
       }
       if (FTy->isVarArg()) {
         if (FTy->getNumParams()) Result += ", ";
@@ -241,7 +245,7 @@ static void calcTypeName(const Type *Ty,
       Result += "{ ";
       for (StructType::element_iterator I = STy->element_begin(),
            E = STy->element_end(); I != E; ++I) {
-        calcTypeName(*I, TypeStack, TypeNames, Result);
+        calcTypeName(*I, TypeStack, Result);
         if (next(I) != STy->element_end())
           Result += ',';
         Result += ' ';
@@ -253,7 +257,7 @@ static void calcTypeName(const Type *Ty,
     }
     case Type::PointerTyID: {
       const PointerType *PTy = cast<PointerType>(Ty);
-      calcTypeName(PTy->getElementType(), TypeStack, TypeNames, Result);
+      calcTypeName(PTy->getElementType(), TypeStack, Result);
       if (unsigned AddressSpace = PTy->getAddressSpace())
         Result += " addrspace(" + utostr(AddressSpace) + ")";
       Result += "*";
@@ -262,14 +266,14 @@ static void calcTypeName(const Type *Ty,
     case Type::ArrayTyID: {
       const ArrayType *ATy = cast<ArrayType>(Ty);
       Result += "[" + utostr(ATy->getNumElements()) + " x ";
-      calcTypeName(ATy->getElementType(), TypeStack, TypeNames, Result);
+      calcTypeName(ATy->getElementType(), TypeStack, Result);
       Result += "]";
       break;
     }
     case Type::VectorTyID: {
       const VectorType *PTy = cast<VectorType>(Ty);
       Result += "<" + utostr(PTy->getNumElements()) + " x ";
-      calcTypeName(PTy->getElementType(), TypeStack, TypeNames, Result);
+      calcTypeName(PTy->getElementType(), TypeStack, Result);
       Result += ">";
       break;
     }
@@ -305,9 +309,9 @@ void TypePrinting::print(const Type *Ty) {
   // Otherwise we have a type that has not been named but is a derived type.
   // Carefully recurse the type hierarchy to print out any contained symbolic
   // names.
-  std::vector<const Type *> TypeStack;
+  SmallVector<const Type *, 16> TypeStack;
   std::string TypeName;
-  calcTypeName(Ty, TypeStack, TypeNames, TypeName);
+  calcTypeName(Ty, TypeStack, TypeName);
   TypeNames.insert(std::make_pair(Ty, TypeName));//Cache type name for later use
   OS << TypeName;
 }