summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-03-30 13:59:06 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-03-30 13:59:06 +0000
commitd3ac79b3b4fae83a536f8355bd93ca42316e9488 (patch)
tree91821830c6ef662ff2d4a0d2771c458b358bbee5
parent881497ac2905a616b69f5ce36847169de1c391c1 (diff)
downloadbcm5719-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.h4
-rw-r--r--llvm/lib/MC/MCContext.cpp21
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);
OpenPOWER on IntegriCloud