walk type symbol table also, so we get:
authorChris Lattner <sabre@nondot.org>
Sun, 1 Mar 2009 00:32:33 +0000 (00:32 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 1 Mar 2009 00:32:33 +0000 (00:32 +0000)
type opaque ; type %0
%C = type { %0, %0 }

instead of:

%C = type { opaque, opaque }

when appropriate.

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

lib/VMCore/AsmWriter.cpp

index 1e744a9233b255b666b9f5ac1662a2eff3557acc..5f418408bc23eb24fd2864f62aadfd29d3bf9872 100644 (file)
@@ -332,6 +332,13 @@ namespace {
       : TP(tp), NumberedTypes(numberedTypes) {}
     
     void Run(const Module &M) {
+      // Get types from the type symbol table.  This gets opaque types referened
+      // only through derived named types.
+      const TypeSymbolTable &ST = M.getTypeSymbolTable();
+      for (TypeSymbolTable::const_iterator TI = ST.begin(), E = ST.end();
+           TI != E; ++TI)
+        IncorporateType(TI->second);
+      
       // Get types from global variables.
       for (Module::const_global_iterator I = M.global_begin(),
            E = M.global_end(); I != E; ++I) {
@@ -368,11 +375,12 @@ namespace {
   private:
     void IncorporateType(const Type *Ty) {
       // Check to see if we're already visited this type.
-      if (!VisitedTypes.insert(Ty).second || TP.hasTypeName(Ty))
+      if (!VisitedTypes.insert(Ty).second)
         return;
       
       // If this is a structure or opaque type, add a name for the type.
-      if (isa<StructType>(Ty) || isa<OpaqueType>(Ty)) {
+      if ((isa<StructType>(Ty) || isa<OpaqueType>(Ty))
+          && !TP.hasTypeName(Ty)) {
         TP.addTypeName(Ty, "%"+utostr(unsigned(NumberedTypes.size())));
         NumberedTypes.push_back(Ty);
       }