From 7d16e85bfc2c6423c81ce87a177bf3b1b1012a04 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Fri, 10 Apr 2009 00:12:49 +0000 Subject: [PATCH] Pass in the std::string parameter instead of returning it by value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68747 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/AsmPrinter.h | 6 ++-- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 25 ++++++++--------- lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 28 +++++++++++-------- .../PowerPC/AsmPrinter/PPCAsmPrinter.cpp | 3 +- 4 files changed, 34 insertions(+), 28 deletions(-) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 66d254e2541..c1d86a21906 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -153,7 +153,8 @@ namespace llvm { /// getGlobalLinkName - Returns the asm/link name of of the specified /// global variable. Should be overridden by each target asm printer to /// generate the appropriate value. - virtual const std::string getGlobalLinkName(const GlobalVariable *GV) const; + virtual const std::string &getGlobalLinkName(const GlobalVariable *GV, + std::string &LinkName) const; /// EmitExternalGlobal - Emit the external reference to a global variable. /// Should be overridden if an indirect reference should be used. @@ -162,7 +163,8 @@ namespace llvm { /// getCurrentFunctionEHName - Called to return (and cache) the /// CurrentFnEHName. /// - std::string getCurrentFunctionEHName(const MachineFunction *MF) const; + const std::string &getCurrentFunctionEHName(const MachineFunction *MF, + std::string &FuncEHName) const; protected: /// getAnalysisUsage - Record analysis usage. diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index c9fd1ac60ac..d19e9afaf02 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -186,11 +186,8 @@ bool AsmPrinter::doFinalization(Module &M) { SwitchToDataSection(""); for (std::set::iterator i = ExtWeakSymbols.begin(), - e = ExtWeakSymbols.end(); i != e; ++i) { - const GlobalValue *GV = *i; - std::string Name = Mang->getValueName(GV); - O << TAI->getWeakRefDirective() << Name << '\n'; - } + e = ExtWeakSymbols.end(); i != e; ++i) + O << TAI->getWeakRefDirective() << Mang->getValueName(*i) << '\n'; } if (TAI->getSetDirective()) { @@ -236,14 +233,16 @@ bool AsmPrinter::doFinalization(Module &M) { return false; } -std::string -AsmPrinter::getCurrentFunctionEHName(const MachineFunction *MF) const { +const std::string & +AsmPrinter::getCurrentFunctionEHName(const MachineFunction *MF, + std::string &Name) const { assert(MF && "No machine function?"); - std::string Name = MF->getFunction()->getName(); + Name = MF->getFunction()->getName(); if (Name.empty()) Name = Mang->getValueName(MF->getFunction()); - return Mang->makeNameProper(TAI->getEHGlobalPrefix() + + Name = Mang->makeNameProper(TAI->getEHGlobalPrefix() + Name + ".eh", TAI->getGlobalPrefix()); + return Name; } void AsmPrinter::SetupMachineFunction(MachineFunction &MF) { @@ -536,9 +535,8 @@ void AsmPrinter::EmitXXStructorList(Constant *List) { /// getGlobalLinkName - Returns the asm/link name of of the specified /// global variable. Should be overridden by each target asm printer to /// generate the appropriate value. -const std::string AsmPrinter::getGlobalLinkName(const GlobalVariable *GV) const{ - std::string LinkName; - +const std::string &AsmPrinter::getGlobalLinkName(const GlobalVariable *GV, + std::string &LinkName) const { if (isa(GV)) { LinkName += TAI->getFunctionAddrPrefix(); LinkName += Mang->getValueName(GV); @@ -555,7 +553,8 @@ const std::string AsmPrinter::getGlobalLinkName(const GlobalVariable *GV) const{ /// EmitExternalGlobal - Emit the external reference to a global variable. /// Should be overridden if an indirect reference should be used. void AsmPrinter::EmitExternalGlobal(const GlobalVariable *GV) { - O << getGlobalLinkName(GV); + std::string GLN; + O << getGlobalLinkName(GV, GLN); } diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 508d4022dba..d59609b371e 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -2888,8 +2888,9 @@ private: // Add address. DIEBlock *Block = new DIEBlock(); AddUInt(Block, 0, DW_FORM_data1, DW_OP_addr); + std::string GLN; AddObjectLabel(Block, 0, DW_FORM_udata, - Asm->getGlobalLinkName(DI_GV.getGlobal())); + Asm->getGlobalLinkName(DI_GV.getGlobal(), GLN)); AddBlock(VariableDie, DW_AT_location, 0, Block); // Add to map. @@ -4009,10 +4010,12 @@ class DwarfException : public Dwarf { PrintRelDirective(); - if (GV) - O << Asm->getGlobalLinkName(GV); - else + if (GV) { + std::string GLN; + O << Asm->getGlobalLinkName(GV, GLN); + } else { O << "0"; + } Asm->EOL("TypeInfo"); } @@ -4120,14 +4123,15 @@ public: EmitExceptionTable(); // Save EH frame information - EHFrames. - push_back(FunctionEHFrameInfo(getAsm()->getCurrentFunctionEHName(MF), - SubprogramCount, - MMI->getPersonalityIndex(), - MF->getFrameInfo()->hasCalls(), - !MMI->getLandingPads().empty(), - MMI->getFrameMoves(), - MF->getFunction())); + std::string Name; + EHFrames.push_back( + FunctionEHFrameInfo(getAsm()->getCurrentFunctionEHName(MF, Name), + SubprogramCount, + MMI->getPersonalityIndex(), + MF->getFrameInfo()->hasCalls(), + !MMI->getLandingPads().empty(), + MMI->getFrameMoves(), + MF->getFunction())); } if (TimePassesIsEnabled) diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index 827c4f92b56..5b68062ab10 100644 --- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -423,7 +423,8 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) { /// EmitExternalGlobal - In this case we need to use the indirect symbol. /// void PPCAsmPrinter::EmitExternalGlobal(const GlobalVariable *GV) { - std::string Name = getGlobalLinkName(GV); + std::string Name; + getGlobalLinkName(GV, Name); if (TM.getRelocationModel() != Reloc::Static) { if (GV->hasHiddenVisibility()) HiddenGVStubs.insert(Name);