Eliminate the concept of a deferred symbol table. The optimization really isn't,
authorChris Lattner <sabre@nondot.org>
Wed, 20 Nov 2002 18:07:48 +0000 (18:07 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 20 Nov 2002 18:07:48 +0000 (18:07 +0000)
and it causes obscure bugs to show up in passes.

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

include/llvm/Function.h
lib/VMCore/Function.cpp

index bb2c3ca99672336cbdf442a032a294e360fc1ce7..34b6c0f252160f9f666ccd5825d8f131b5d92f05 100644 (file)
@@ -111,22 +111,12 @@ public:
   //===--------------------------------------------------------------------===//
   // Symbol Table Accessing functions...
 
-  /// hasSymbolTable() - Returns true if there is a symbol table allocated to
-  /// this object AND if there is at least one name in it!
-  ///
-  bool hasSymbolTable() const;
-
-  /// getSymbolTable() - CAUTION: The current symbol table may be null if there
-  /// are no names (ie, the symbol table is empty)
+  /// getSymbolTable() - Return the symbol table...
   ///
   inline       SymbolTable *getSymbolTable()       { return SymTab; }
   inline const SymbolTable *getSymbolTable() const { return SymTab; }
-
-  /// getSymbolTableSure is guaranteed to not return a null pointer, because if
-  /// the function does not already have a symtab, one is created.  Use this if
-  /// you intend to put something into the symbol table for the function.
-  ///
-  SymbolTable *getSymbolTableSure();  // Implemented in Value.cpp
+  SymbolTable *getSymbolTableSure() { return SymTab; }
+  bool hasSymbolTable() const { return true; }
 
   
   //===--------------------------------------------------------------------===//
index 5edd9ae2a6913e77218aa573327fbc92ae8b752a..9b837dcaa1308054ed0cf9fcc8a819de2a940db1 100644 (file)
@@ -84,7 +84,7 @@ Function::Function(const FunctionType *Ty, bool isInternal,
   BasicBlocks.setParent(this);
   ArgumentList.setItemParent(this);
   ArgumentList.setParent(this);
-  SymTab = 0;
+  SymTab = new SymbolTable();
 
   // Create the arguments vector, all arguments start out unnamed.
   for (unsigned i = 0, e = Ty->getNumParams(); i != e; ++i) {
@@ -137,27 +137,6 @@ const Type *Function::getReturnType() const {
   return getFunctionType()->getReturnType();
 }
 
-SymbolTable *Function::getSymbolTableSure() {
-  if (!SymTab) SymTab = new SymbolTable();
-  return SymTab;
-}
-
-// hasSymbolTable() - Returns true if there is a symbol table allocated to
-// this object AND if there is at least one name in it!
-//
-bool Function::hasSymbolTable() const {
-  if (!SymTab) return false;
-
-  for (SymbolTable::const_iterator I = SymTab->begin(); 
-       I != SymTab->end(); ++I) {
-    if (I->second.begin() != I->second.end())
-      return true;                                // Found nonempty type plane!
-  }
-  
-  return false;
-}
-
-
 // dropAllReferences() - This function causes all the subinstructions to "let
 // go" of all references that they are maintaining.  This allows one to
 // 'delete' a whole class at a time, even though there may be circular