diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index e7c7845..ca6ba14 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -170,13 +170,15 @@
 /// FIXME: Performance here is going to be terribly until we start
 /// caching mangled names. However, we should fix the problem above
 /// first.
-IdentifierInfo *CodeGenModule::getMangledName(const NamedDecl *ND) const {
-  std::string Name;
-  llvm::raw_string_ostream Out(Name);
+const char *CodeGenModule::getMangledName(const NamedDecl *ND) {
+  llvm::SmallString<256> Name;
+  llvm::raw_svector_ostream Out(Name);
   if (!mangleName(ND, Context, Out))
-    return ND->getIdentifier();
+    return ND->getIdentifier()->getName();
 
-  return &Context.Idents.get(Out.str());
+  Name += '\0';
+  return MangledNames.GetOrCreateValue(Name.begin(), Name.end())
+           .getKeyData();
 }
 
 /// AddGlobalCtor - Add a function to the list that will be called before
@@ -379,7 +381,7 @@
     llvm::GlobalValue *GA = 
       new llvm::GlobalAlias(aliasee->getType(),
                             llvm::Function::ExternalLinkage,
-                            getMangledName(D)->getName(), aliasee, 
+                            getMangledName(D), aliasee, 
                             &getModule());
     
     llvm::GlobalValue *&Entry = GlobalDeclMap[getMangledName(D)];
@@ -582,7 +584,7 @@
     llvm::GlobalVariable *GV = 
       new llvm::GlobalVariable(Ty, false, 
                                llvm::GlobalValue::ExternalLinkage,
-                               0, getMangledName(D)->getName(), &getModule(), 
+                               0, getMangledName(D), &getModule(), 
                                0, ASTTy.getAddressSpace());
     Entry = GV;
 
@@ -630,7 +632,7 @@
   if (!GV) {
     GV = new llvm::GlobalVariable(InitType, false, 
                                   llvm::GlobalValue::ExternalLinkage,
-                                  0, getMangledName(D)->getName(), 
+                                  0, getMangledName(D), 
                                   &getModule(), 0, ASTTy.getAddressSpace());
   } else if (GV->getType() != 
              llvm::PointerType::get(InitType, ASTTy.getAddressSpace())) {
@@ -654,7 +656,7 @@
     // Make a new global with the correct type
     GV = new llvm::GlobalVariable(InitType, false, 
                                   llvm::GlobalValue::ExternalLinkage,
-                                  0, getMangledName(D)->getName(), 
+                                  0, getMangledName(D), 
                                   &getModule(), 0, ASTTy.getAddressSpace());
     // Steal the name of the old global
     GV->takeName(OldGV);
@@ -753,7 +755,7 @@
   const llvm::Type *Ty = getTypes().ConvertType(D->getType());
   llvm::Function *F = llvm::Function::Create(cast<llvm::FunctionType>(Ty), 
                                              llvm::Function::ExternalLinkage,
-                                             getMangledName(D)->getName(),
+                                             getMangledName(D),
                                              &getModule());
   SetFunctionAttributes(D, F);
   return F;
