From 7c5b021793e8c8184c655040ea5e169b55c55063 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 19 Oct 2009 22:49:00 +0000 Subject: [PATCH] add a twine version of MCContext::GetOrCreateSymbol. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84561 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCContext.h | 2 ++ lib/MC/MCContext.cpp | 10 +++++++++- lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 9 +++++---- lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp | 4 ++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h index e577ef53d13..fa20f450646 100644 --- a/include/llvm/MC/MCContext.h +++ b/include/llvm/MC/MCContext.h @@ -19,6 +19,7 @@ namespace llvm { class MCSection; class MCSymbol; class StringRef; + class Twine; /// MCContext - Context object for machine code objects. This class owns all /// of the sections that it creates. @@ -58,6 +59,7 @@ namespace llvm { /// @param IsTemporary - Whether this symbol is an assembler temporary, /// which should not survive into the symbol table for the translation unit. MCSymbol *GetOrCreateSymbol(const StringRef &Name); + MCSymbol *GetOrCreateSymbol(const Twine &Name); /// CreateTemporarySymbol - Create a new temporary symbol with the specified /// @param Name. diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index db59f7f505c..09479c595a9 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -8,10 +8,11 @@ //===----------------------------------------------------------------------===// #include "llvm/MC/MCContext.h" - #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSymbol.h" #include "llvm/MC/MCValue.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/ADT/Twine.h" using namespace llvm; MCContext::MCContext() { @@ -38,6 +39,13 @@ MCSymbol *MCContext::GetOrCreateSymbol(const StringRef &Name) { return Entry = new (*this) MCSymbol(Name, false); } +MCSymbol *MCContext::GetOrCreateSymbol(const Twine &Name) { + SmallString<128> NameSV; + Name.toVector(NameSV); + return GetOrCreateSymbol(NameSV.str()); +} + + MCSymbol *MCContext::CreateTemporarySymbol(const StringRef &Name) { // If unnamed, just create a symbol. if (Name.empty()) diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index 7e89b9f5e92..576cc9c529e 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -173,7 +173,7 @@ namespace { else { // FIXME: Remove this when Darwin transition to @GOT like syntax. Name = Mang->getMangledName(GV, "$non_lazy_ptr", true); - MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.c_str()); + MCSymbol *Sym = OutContext.GetOrCreateSymbol(StringRef(Name)); MachineModuleInfoMachO &MMIMachO = MMI->getObjFileInfo(); @@ -1336,10 +1336,11 @@ void ARMAsmPrinter::printInstructionThroughMCStreamer(const MachineInstr *MI) { // Emit the label. // FIXME: MOVE TO SHARED PLACE. - SmallString<60> Name; unsigned Id = (unsigned)MI->getOperand(2).getImm(); - raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "PC" << Id; - OutStreamer.EmitLabel(OutContext.GetOrCreateSymbol(Name.str())); + const char *Prefix = MAI->getPrivateGlobalPrefix(); + MCSymbol *Label = + OutContext.GetOrCreateSymbol(Twine(Prefix)+"PC"+Twine(Id)); + OutStreamer.EmitLabel(Label); // Form and emit tha dd. diff --git a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp index a07d82d90e7..ae8e6d3db46 100644 --- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp @@ -288,12 +288,12 @@ void X86AsmPrinter::printSymbolOperand(const MachineOperand &MO) { std::string Name = Mang->makeNameProper(MO.getSymbolName()); if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { Name += "$stub"; - MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name); + MCSymbol *Sym = OutContext.GetOrCreateSymbol(StringRef(Name)); const MCSymbol *&StubSym = MMI->getObjFileInfo().getFnStubEntry(Sym); if (StubSym == 0) { Name.erase(Name.end()-5, Name.end()); - StubSym = OutContext.GetOrCreateSymbol(Name); + StubSym = OutContext.GetOrCreateSymbol(StringRef(Name)); } }