diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-30 13:59:06 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-30 13:59:06 +0000 |
commit | d3ac79b3b4fae83a536f8355bd93ca42316e9488 (patch) | |
tree | 91821830c6ef662ff2d4a0d2771c458b358bbee5 | |
parent | 881497ac2905a616b69f5ce36847169de1c391c1 (diff) | |
download | bcm5719-llvm-d3ac79b3b4fae83a536f8355bd93ca42316e9488.tar.gz bcm5719-llvm-d3ac79b3b4fae83a536f8355bd93ca42316e9488.zip |
Save a std::string.
The group names are always symbol names, so we can use a StringRef.
llvm-svn: 233545
-rw-r--r-- | llvm/include/llvm/MC/MCContext.h | 4 | ||||
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 21 |
2 files changed, 14 insertions, 11 deletions
diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index a17e05d87c1..c1f2fac82f7 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -164,7 +164,7 @@ namespace llvm { struct ELFSectionKey { std::string SectionName; - std::string GroupName; + StringRef GroupName; ELFSectionKey(StringRef SectionName, StringRef GroupName) : SectionName(SectionName), GroupName(GroupName) {} bool operator<(const ELFSectionKey &Other) const { @@ -176,7 +176,7 @@ namespace llvm { struct COFFSectionKey { std::string SectionName; - std::string GroupName; + StringRef GroupName; int SelectionKey; COFFSectionKey(StringRef SectionName, StringRef GroupName, int SelectionKey) diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 2afa21219fc..2cb81d06b05 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -291,6 +291,12 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type, unsigned Flags, unsigned EntrySize, StringRef Group, bool Unique, const char *BeginSymName) { + MCSymbol *GroupSym = nullptr; + if (!Group.empty()) { + GroupSym = GetOrCreateSymbol(Group); + Group = GroupSym->getName(); + } + // Do the lookup, if we have a hit, return it. auto IterBool = ELFUniquingMap.insert( std::make_pair(ELFSectionKey{Section, Group}, nullptr)); @@ -298,10 +304,6 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type, if (!IterBool.second && !Unique) return Entry.second; - MCSymbol *GroupSym = nullptr; - if (!Group.empty()) - GroupSym = GetOrCreateSymbol(Group); - StringRef CachedName = Entry.first.SectionName; SectionKind Kind; @@ -340,18 +342,19 @@ const MCSectionCOFF * MCContext::getCOFFSection(StringRef Section, unsigned Characteristics, SectionKind Kind, StringRef COMDATSymName, int Selection, const char *BeginSymName) { - // Do the lookup, if we have a hit, return it. + MCSymbol *COMDATSymbol = nullptr; + if (!COMDATSymName.empty()) { + COMDATSymbol = GetOrCreateSymbol(COMDATSymName); + COMDATSymName = COMDATSymbol->getName(); + } + // Do the lookup, if we have a hit, return it. COFFSectionKey T{Section, COMDATSymName, Selection}; auto IterBool = COFFUniquingMap.insert(std::make_pair(T, nullptr)); auto Iter = IterBool.first; if (!IterBool.second) return Iter->second; - MCSymbol *COMDATSymbol = nullptr; - if (!COMDATSymName.empty()) - COMDATSymbol = GetOrCreateSymbol(COMDATSymName); - MCSymbol *Begin = nullptr; if (BeginSymName) Begin = createTempSymbol(BeginSymName, false); |