diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/ELFTargetAsmInfo.cpp | 2 | ||||
-rw-r--r-- | lib/Target/Sparc/SparcTargetAsmInfo.cpp | 4 | ||||
-rw-r--r-- | lib/Target/Sparc/SparcTargetAsmInfo.h | 2 | ||||
-rw-r--r-- | lib/Target/TargetAsmInfo.cpp | 15 | ||||
-rw-r--r-- | lib/Target/X86/X86TargetAsmInfo.cpp | 2 | ||||
-rw-r--r-- | lib/Target/X86/X86TargetAsmInfo.h | 2 |
6 files changed, 20 insertions, 7 deletions
diff --git a/lib/Target/ELFTargetAsmInfo.cpp b/lib/Target/ELFTargetAsmInfo.cpp index 82ac847e84..9ffc72d234 100644 --- a/lib/Target/ELFTargetAsmInfo.cpp +++ b/lib/Target/ELFTargetAsmInfo.cpp @@ -148,7 +148,7 @@ ELFTargetAsmInfo::MergeableStringSection(const GlobalVariable *GV) const { return getReadOnlySection_(); } -std::string ELFTargetAsmInfo::PrintSectionFlags(unsigned flags) const { +std::string ELFTargetAsmInfo::printSectionFlags(unsigned flags) const { std::string Flags = ",\""; if (!(flags & SectionFlags::Debug)) diff --git a/lib/Target/Sparc/SparcTargetAsmInfo.cpp b/lib/Target/Sparc/SparcTargetAsmInfo.cpp index c81b9e1f73..afa5327d95 100644 --- a/lib/Target/Sparc/SparcTargetAsmInfo.cpp +++ b/lib/Target/Sparc/SparcTargetAsmInfo.cpp @@ -27,9 +27,9 @@ SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM): CStringSection=".rodata.str"; } -std::string SparcELFTargetAsmInfo::PrintSectionFlags(unsigned flags) const { +std::string SparcELFTargetAsmInfo::printSectionFlags(unsigned flags) const { if (flags & SectionFlags::Mergeable) - return ELFTargetAsmInfo::PrintSectionFlags(flags); + return ELFTargetAsmInfo::printSectionFlags(flags); std::string Flags; if (!(flags & SectionFlags::Debug)) diff --git a/lib/Target/Sparc/SparcTargetAsmInfo.h b/lib/Target/Sparc/SparcTargetAsmInfo.h index 253a5d78f0..1af5d80b55 100644 --- a/lib/Target/Sparc/SparcTargetAsmInfo.h +++ b/lib/Target/Sparc/SparcTargetAsmInfo.h @@ -25,7 +25,7 @@ namespace llvm { struct SparcELFTargetAsmInfo : public ELFTargetAsmInfo { explicit SparcELFTargetAsmInfo(const TargetMachine &TM); - std::string PrintSectionFlags(unsigned flags) const; + std::string printSectionFlags(unsigned flags) const; }; } // namespace llvm diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 9bc0b4055e..1ef2182033 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -291,7 +291,7 @@ TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { // If section is named we need to switch into it via special '.section' // directive and also append funky flags. Otherwise - section name is just // some magic assembler directive. - return getSwitchToSectionDirective() + S->Name + PrintSectionFlags(S->Flags); + return getSwitchToSectionDirective() + S->Name + getSectionFlags(S->Flags); } // Lame default implementation. Calculate the section name for global. @@ -376,3 +376,16 @@ TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags) const { return &S; } + +const std::string& +TargetAsmInfo::getSectionFlags(unsigned Flags) const { + SectionFlags::FlagsStringsMapType::iterator I = FlagsStrings.find(Flags); + + // We didn't print these flags yet, print and save them to map. This reduces + // amount of heap trashing due to std::string construction / concatenation. + if (I == FlagsStrings.end()) + I = FlagsStrings.insert(std::make_pair(Flags, + printSectionFlags(Flags))).first; + + return I->second; +} diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 984c6b225c..178aec0d57 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -404,7 +404,7 @@ X86COFFTargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV, } } -std::string X86COFFTargetAsmInfo::PrintSectionFlags(unsigned flags) const { +std::string X86COFFTargetAsmInfo::printSectionFlags(unsigned flags) const { std::string Flags = ",\""; if (flags & SectionFlags::Code) diff --git a/lib/Target/X86/X86TargetAsmInfo.h b/lib/Target/X86/X86TargetAsmInfo.h index 0c30545f89..d7e11e0c24 100644 --- a/lib/Target/X86/X86TargetAsmInfo.h +++ b/lib/Target/X86/X86TargetAsmInfo.h @@ -52,7 +52,7 @@ namespace llvm { bool Global) const; virtual std::string UniqueSectionForGlobal(const GlobalValue* GV, SectionKind::Kind kind) const; - virtual std::string PrintSectionFlags(unsigned flags) const; + virtual std::string printSectionFlags(unsigned flags) const; protected: const X86TargetMachine *X86TM; }; |