mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Reduce heap trashing due to std::string construction / concatenation via caching of section flags string representations
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54842 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -27,7 +27,7 @@ namespace llvm {
|
||||
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;
|
||||
|
||||
@@ -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 @@ namespace llvm {
|
||||
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 @@ namespace llvm {
|
||||
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 @@ namespace llvm {
|
||||
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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user