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/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
index 358a677..6fff961 100644
--- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
@@ -49,6 +49,7 @@
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSet.h"
+#include "llvm/ADT/SmallString.h"
using namespace llvm;
STATISTIC(EmittedInsts, "Number of machine instrs printed");
@@ -69,15 +70,20 @@
AnonSymbol = Mang->getMangledName(GV, "$stub$tmp", true);
}
- void Init(const std::string &GV, Mangler *Mang) {
+ void Init(StringRef GVName, Mangler *Mang) {
// Already initialized.
if (!Stub.empty()) return;
- Stub = Mang->makeNameProper(GV + "$stub",
- Mangler::Private);
- LazyPtr = Mang->makeNameProper(GV + "$lazy_ptr",
- Mangler::Private);
- AnonSymbol = Mang->makeNameProper(GV + "$stub$tmp",
- Mangler::Private);
+ SmallString<128> TmpStr;
+ Mang->makeNameProper(TmpStr, GVName + "$stub", Mangler::Private);
+ Stub = TmpStr.str();
+ TmpStr.clear();
+
+ Mang->makeNameProper(TmpStr, GVName + "$lazy_ptr", Mangler::Private);
+ LazyPtr = TmpStr.str();
+ TmpStr.clear();
+
+ Mang->makeNameProper(TmpStr, GVName + "$stub$tmp", Mangler::Private);
+ AnonSymbol = TmpStr.str();
}
};
@@ -230,7 +236,9 @@
}
}
if (MO.getType() == MachineOperand::MO_ExternalSymbol) {
- FnStubInfo &FnInfo =FnStubs[Mang->makeNameProper(MO.getSymbolName())];
+ SmallString<128> MangledName;
+ Mang->makeNameProper(MangledName, MO.getSymbolName());
+ FnStubInfo &FnInfo = FnStubs[MangledName.str()];
FnInfo.Init(MO.getSymbolName(), Mang);
O << FnInfo.Stub;
return;