Moved UnaryOperator::create to InstrTypes.cpp until there is an iUnaryOps.cpp
Moved BinaryOperator::create to iBinaryOperators.cpp
Add getUniqueName to SymbolTable

llvm-svn: 76
diff --git a/llvm/lib/VMCore/SymbolTable.cpp b/llvm/lib/VMCore/SymbolTable.cpp
index 395c23f..214f41f 100644
--- a/llvm/lib/VMCore/SymbolTable.cpp
+++ b/llvm/lib/VMCore/SymbolTable.cpp
@@ -6,6 +6,7 @@
 
 #include "llvm/SymbolTable.h"
 #include "llvm/InstrTypes.h"
+#include "llvm/Tools/StringExtras.h"
 #ifndef NDEBUG
 #include "llvm/BasicBlock.h"   // Required for assertions to work.
 #include "llvm/Type.h"
@@ -45,6 +46,24 @@
   return I->second.find(Name);
 }
 
+// getUniqueName - Given a base name, return a string that is either equal to
+// it (or derived from it) that does not already occur in the symbol table for
+// the specified type.
+//
+string SymbolTable::getUniqueName(const Type *Ty, const string &BaseName) {
+  iterator I = find(Ty);
+  if (I == end()) return BaseName;
+
+  string TryName = BaseName;
+  unsigned Counter = 0;
+  type_iterator End = I->second.end();
+
+  while (I->second.find(TryName) != End)     // Loop until we find unoccupied
+    TryName = BaseName + utostr(++Counter);  // Name in the symbol table
+  return TryName;
+}
+
+
 
 // lookup - Returns null on failure...
 Value *SymbolTable::lookup(const Type *Ty, const string &Name) {