change Mangler::makeNameProper to return its result in a SmallVector
instead of returning it in an std::string.  Based on this change:

1. Change TargetLoweringObjectFileCOFF::getCOFFSection to take a StringRef
2. Change a bunch of targets to call makeNameProper with a smallstring,
   making several of them *much* more efficient.
3. Rewrite Mangler::makeNameProper to not build names and then prepend
   prefixes, not use temporary std::strings, and to avoid other crimes.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93298 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index ba1a377..914af53 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -25,6 +25,7 @@
 #include "llvm/IntrinsicInst.h"
 #include "llvm/InlineAsm.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Analysis/ConstantsScanner.h"
 #include "llvm/Analysis/FindUsedTypes.h"
@@ -2207,12 +2208,17 @@
   // If there are no type names, exit early.
   if (I == End) return;
 
+  SmallString<128> TempName;
+
   // Print out forward declarations for structure types before anything else!
   Out << "/* Structure forward decls */\n";
   for (; I != End; ++I) {
-    std::string Name = "struct l_" + Mang->makeNameProper(I->first);
-    Out << Name << ";\n";
-    TypeNames.insert(std::make_pair(I->second, Name));
+    const char *Prefix = "struct l_";
+    TempName.append(Prefix, Prefix+strlen(Prefix));
+    Mang->makeNameProper(TempName, I->first);
+    Out << TempName.str() << ";\n";
+    TypeNames.insert(std::make_pair(I->second, TempName.str()));
+    TempName.clear();
   }
 
   Out << '\n';
@@ -2221,10 +2227,14 @@
   // for struct or opaque types.
   Out << "/* Typedefs */\n";
   for (I = TST.begin(); I != End; ++I) {
-    std::string Name = "l_" + Mang->makeNameProper(I->first);
+    const char *Prefix = "l_";
+    TempName.append(Prefix, Prefix+strlen(Prefix));
+    Mang->makeNameProper(TempName, I->first);
+    
     Out << "typedef ";
-    printType(Out, I->second, false, Name);
+    printType(Out, I->second, false, TempName.str());
     Out << ";\n";
+    TempName.clear();
   }
 
   Out << '\n';