From: Chris Lattner Date: Fri, 20 Sep 2002 15:12:13 +0000 (+0000) Subject: Another change that doesn't affect functionality. Since we are only looking X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2db41cd5de49ffa6725945343b2859ac86629fc3;p=oota-llvm.git Another change that doesn't affect functionality. Since we are only looking at types in the symbol table, only traverse the type plane, saving a loop nest. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3858 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 444a148fc16..4b9b7cc5ddd 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -566,29 +566,31 @@ void CWriter::printModule(Module *M) { } -/// printSymbolTable - Run through symbol table looking for named constants -/// if a named constant is found, emit it's declaration... -/// Assuming that symbol table has only types and constants. +/// printSymbolTable - Run through symbol table looking for type names. If a +/// type name is found, emit it's declaration... /// void CWriter::printSymbolTable(const SymbolTable &ST) { - for (SymbolTable::const_iterator TI = ST.begin(); TI != ST.end(); ++TI) { - SymbolTable::type_const_iterator I = ST.type_begin(TI->first); - SymbolTable::type_const_iterator End = ST.type_end(TI->first); - - for (; I != End; ++I) { - const Value *V = I->second; - if (const Type *Ty = dyn_cast(V)) - if (const Type *STy = dyn_cast(Ty)) { - string Name = "struct l_" + makeNameProper(I->first); - Out << Name << ";\n"; - TypeNames.insert(std::make_pair(STy, Name)); - } else { - string Name = "l_" + makeNameProper(I->first); - Out << "typedef "; - printType(Ty, Name, true); - Out << ";\n"; - } - } + // If there are no type names, exit early. + if (ST.find(Type::TypeTy) == ST.end()) + return; + + // We are only interested in the type plane of the symbol table... + SymbolTable::type_const_iterator I = ST.type_begin(Type::TypeTy); + SymbolTable::type_const_iterator End = ST.type_end(Type::TypeTy); + + for (; I != End; ++I) { + const Value *V = I->second; + if (const Type *Ty = dyn_cast(V)) + if (const Type *STy = dyn_cast(Ty)) { + string Name = "struct l_" + makeNameProper(I->first); + Out << Name << ";\n"; + TypeNames.insert(std::make_pair(STy, Name)); + } else { + string Name = "l_" + makeNameProper(I->first); + Out << "typedef "; + printType(Ty, Name, true); + Out << ";\n"; + } } Out << "\n"; @@ -598,14 +600,10 @@ void CWriter::printSymbolTable(const SymbolTable &ST) { // Loop over all structures then push them into the stack so they are // printed in the correct order. - for (SymbolTable::const_iterator TI = ST.begin(); TI != ST.end(); ++TI) { - SymbolTable::type_const_iterator I = ST.type_begin(TI->first); - SymbolTable::type_const_iterator End = ST.type_end(TI->first); - - for (; I != End; ++I) - if (const StructType *STy = dyn_cast(I->second)) - printContainedStructs(STy, StructPrinted); - } + // + for (I = ST.type_begin(Type::TypeTy); I != End; ++I) + if (const StructType *STy = dyn_cast(I->second)) + printContainedStructs(STy, StructPrinted); } // Push the struct onto the stack and recursively push all structs diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index 444a148fc16..4b9b7cc5ddd 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -566,29 +566,31 @@ void CWriter::printModule(Module *M) { } -/// printSymbolTable - Run through symbol table looking for named constants -/// if a named constant is found, emit it's declaration... -/// Assuming that symbol table has only types and constants. +/// printSymbolTable - Run through symbol table looking for type names. If a +/// type name is found, emit it's declaration... /// void CWriter::printSymbolTable(const SymbolTable &ST) { - for (SymbolTable::const_iterator TI = ST.begin(); TI != ST.end(); ++TI) { - SymbolTable::type_const_iterator I = ST.type_begin(TI->first); - SymbolTable::type_const_iterator End = ST.type_end(TI->first); - - for (; I != End; ++I) { - const Value *V = I->second; - if (const Type *Ty = dyn_cast(V)) - if (const Type *STy = dyn_cast(Ty)) { - string Name = "struct l_" + makeNameProper(I->first); - Out << Name << ";\n"; - TypeNames.insert(std::make_pair(STy, Name)); - } else { - string Name = "l_" + makeNameProper(I->first); - Out << "typedef "; - printType(Ty, Name, true); - Out << ";\n"; - } - } + // If there are no type names, exit early. + if (ST.find(Type::TypeTy) == ST.end()) + return; + + // We are only interested in the type plane of the symbol table... + SymbolTable::type_const_iterator I = ST.type_begin(Type::TypeTy); + SymbolTable::type_const_iterator End = ST.type_end(Type::TypeTy); + + for (; I != End; ++I) { + const Value *V = I->second; + if (const Type *Ty = dyn_cast(V)) + if (const Type *STy = dyn_cast(Ty)) { + string Name = "struct l_" + makeNameProper(I->first); + Out << Name << ";\n"; + TypeNames.insert(std::make_pair(STy, Name)); + } else { + string Name = "l_" + makeNameProper(I->first); + Out << "typedef "; + printType(Ty, Name, true); + Out << ";\n"; + } } Out << "\n"; @@ -598,14 +600,10 @@ void CWriter::printSymbolTable(const SymbolTable &ST) { // Loop over all structures then push them into the stack so they are // printed in the correct order. - for (SymbolTable::const_iterator TI = ST.begin(); TI != ST.end(); ++TI) { - SymbolTable::type_const_iterator I = ST.type_begin(TI->first); - SymbolTable::type_const_iterator End = ST.type_end(TI->first); - - for (; I != End; ++I) - if (const StructType *STy = dyn_cast(I->second)) - printContainedStructs(STy, StructPrinted); - } + // + for (I = ST.type_begin(Type::TypeTy); I != End; ++I) + if (const StructType *STy = dyn_cast(I->second)) + printContainedStructs(STy, StructPrinted); } // Push the struct onto the stack and recursively push all structs