diff --git a/include/llvm/Target/ELFTargetAsmInfo.h b/include/llvm/Target/ELFTargetAsmInfo.h
index fe339f8..3dacb33 100644
--- a/include/llvm/Target/ELFTargetAsmInfo.h
+++ b/include/llvm/Target/ELFTargetAsmInfo.h
@@ -27,7 +27,7 @@
     explicit ELFTargetAsmInfo(const TargetMachine &TM);
 
     virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
-    virtual std::string PrintSectionFlags(unsigned flags) const;
+    virtual std::string printSectionFlags(unsigned flags) const;
     const Section* MergeableConstSection(const GlobalVariable *GV) const;
     inline const Section* MergeableConstSection(const Type *Ty) const;
     const Section* MergeableStringSection(const GlobalVariable *GV) const;
diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h
index 04e91cb..8eb9515 100644
--- a/include/llvm/Target/TargetAsmInfo.h
+++ b/include/llvm/Target/TargetAsmInfo.h
@@ -16,6 +16,7 @@
 #ifndef LLVM_TARGET_ASM_INFO_H
 #define LLVM_TARGET_ASM_INFO_H
 
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Support/DataTypes.h"
 #include <string>
@@ -83,6 +84,16 @@
     static inline unsigned setEntitySize(unsigned Flags, unsigned Size) {
       return ((Flags & ~EntitySize) | ((Size & 0xFF) << 24));
     }
+
+    struct KeyInfo {
+      static inline unsigned getEmptyKey() { return Invalid; }
+      static inline unsigned getTombstoneKey() { return Invalid - 1; }
+      static unsigned getHashValue(const unsigned &Key) { return Key; }
+      static bool isEqual(unsigned LHS, unsigned RHS) { return LHS == RHS; }
+      static bool isPod() { return true; }
+    };
+
+    typedef DenseMap<unsigned, std::string, KeyInfo> FlagsStringsMapType;
   }
 
   class TargetMachine;
@@ -109,6 +120,7 @@
   class TargetAsmInfo {
   private:
     mutable StringMap<Section> Sections;
+    mutable SectionFlags::FlagsStringsMapType FlagsStrings;
   protected:
     //===------------------------------------------------------------------===//
     // Properties to be set by the target writer, used to configure asm printer.
@@ -551,7 +563,8 @@
     virtual std::string UniqueSectionForGlobal(const GlobalValue* GV,
                                                SectionKind::Kind kind) const;
 
-    virtual std::string PrintSectionFlags(unsigned flags) const { return ""; }
+    const std::string& getSectionFlags(unsigned Flags) const;
+    virtual std::string printSectionFlags(unsigned flags) const { return ""; }
 
     virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
 
diff --git a/lib/Target/ELFTargetAsmInfo.cpp b/lib/Target/ELFTargetAsmInfo.cpp
index 82ac847..9ffc72d 100644
--- a/lib/Target/ELFTargetAsmInfo.cpp
+++ b/lib/Target/ELFTargetAsmInfo.cpp
@@ -148,7 +148,7 @@
   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 c81b9e1..afa5327 100644
--- a/lib/Target/Sparc/SparcTargetAsmInfo.cpp
+++ b/lib/Target/Sparc/SparcTargetAsmInfo.cpp
@@ -27,9 +27,9 @@
   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 253a5d7..1af5d80 100644
--- a/lib/Target/Sparc/SparcTargetAsmInfo.h
+++ b/lib/Target/Sparc/SparcTargetAsmInfo.h
@@ -25,7 +25,7 @@
   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 9bc0b40..1ef2182 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -291,7 +291,7 @@
   // 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 @@
 
   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 984c6b2..178aec0 100644
--- a/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -404,7 +404,7 @@
   }
 }
 
-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 0c30545..d7e11e0 100644
--- a/lib/Target/X86/X86TargetAsmInfo.h
+++ b/lib/Target/X86/X86TargetAsmInfo.h
@@ -52,7 +52,7 @@
                                            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;
   };
