diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-03-01 01:16:21 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-03-01 01:16:21 +0000 |
| commit | 242d91a476c98a1127a8e1d56278096ad48e46d0 (patch) | |
| tree | 81c14dc15d6d41336fe86a5c77fb3928fc522000 /llvm/lib | |
| parent | d8ea0e144ec21a46cca390e1b30f5fb582272f8a (diff) | |
| download | bcm5719-llvm-242d91a476c98a1127a8e1d56278096ad48e46d0.tar.gz bcm5719-llvm-242d91a476c98a1127a8e1d56278096ad48e46d0.zip | |
simplify handling "don't print top level name" processing, so that we get
stuff like %A = type { %A*} instead of an upref.
llvm-svn: 65748
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/VMCore/AsmWriter.cpp | 56 |
1 files changed, 19 insertions, 37 deletions
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp index 5f418408bc2..239760d2b08 100644 --- a/llvm/lib/VMCore/AsmWriter.cpp +++ b/llvm/lib/VMCore/AsmWriter.cpp @@ -166,15 +166,15 @@ TypePrinting::~TypePrinting() { /// use of type names or up references to shorten the type name where possible. void TypePrinting::CalcTypeName(const Type *Ty, SmallVectorImpl<const Type *> &TypeStack, - raw_ostream &OS) { + raw_ostream &OS, bool IgnoreTopLevelName) { // Check to see if the type is named. - DenseMap<const Type*, std::string> &TM = getTypeNamesMap(TypeNames); - DenseMap<const Type *, std::string>::iterator I = TM.find(Ty); - if (I != TM.end() && - // If the name wasn't temporarily removed use it. - !I->second.empty()) { - OS << I->second; - return; + if (!IgnoreTopLevelName) { + DenseMap<const Type*, std::string> &TM = getTypeNamesMap(TypeNames); + DenseMap<const Type *, std::string>::iterator I = TM.find(Ty); + if (I != TM.end()) { + OS << I->second; + return; + } } // Check to see if the Type is already on the stack... @@ -273,13 +273,16 @@ void TypePrinting::CalcTypeName(const Type *Ty, /// printTypeInt - The internal guts of printing out a type that has a /// potentially named portion. /// -void TypePrinting::print(const Type *Ty, raw_ostream &OS) { +void TypePrinting::print(const Type *Ty, raw_ostream &OS, + bool IgnoreTopLevelName) { // Check to see if the type is named. DenseMap<const Type*, std::string> &TM = getTypeNamesMap(TypeNames); - DenseMap<const Type*, std::string>::iterator I = TM.find(Ty); - if (I != TM.end()) { - OS << I->second; - return; + if (!IgnoreTopLevelName) { + DenseMap<const Type*, std::string>::iterator I = TM.find(Ty); + if (I != TM.end()) { + OS << I->second; + return; + } } // Otherwise we have a type that has not been named but is a derived type. @@ -289,33 +292,12 @@ void TypePrinting::print(const Type *Ty, raw_ostream &OS) { std::string TypeName; raw_string_ostream TypeOS(TypeName); - CalcTypeName(Ty, TypeStack, TypeOS); + CalcTypeName(Ty, TypeStack, TypeOS, IgnoreTopLevelName); OS << TypeOS.str(); // Cache type name for later use. - TM.insert(std::make_pair(Ty, TypeOS.str())); -} - -/// printAtLeastOneLevel - Print out one level of the possibly complex type -/// without considering any symbolic types that we may have equal to it. -void TypePrinting::printAtLeastOneLevel(const Type *Ty, raw_ostream &OS) { - // If the type does not have a name, then it is already guaranteed to print at - // least one level. - DenseMap<const Type*, std::string> &TM = getTypeNamesMap(TypeNames); - DenseMap<const Type*, std::string>::iterator I = TM.find(Ty); - if (I == TM.end()) - return print(Ty, OS); - - // Otherwise, temporarily remove the name and print it. - std::string OldName; - std::swap(OldName, I->second); - - // Print the type without the name. - SmallVector<const Type *, 16> TypeStack; - CalcTypeName(Ty, TypeStack, OS); - - // Restore the name. - std::swap(OldName, I->second); + if (!IgnoreTopLevelName) + TM.insert(std::make_pair(Ty, TypeOS.str())); } namespace { |

