Save a std::string.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 30 Mar 2015 13:59:06 +0000 (13:59 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 30 Mar 2015 13:59:06 +0000 (13:59 +0000)
The group names are always symbol names, so we can use a StringRef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233545 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCContext.h
lib/MC/MCContext.cpp

index a17e05d87c111398c6c018aab611a881985c0934..c1f2fac82f7509555bdc96d2a358624fcf440ee8 100644 (file)
@@ -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)
index 2afa21219fc4dbddd43e240a64fdc44ce428e9d0..2cb81d06b0512f70eea594b75ee19091b81981b9 100644 (file)
@@ -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);