diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2015-11-14 06:35:56 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2015-11-14 06:35:56 +0000 |
commit | 55c02687140ffb7bb37a381cf40db4ee4aea4b10 (patch) | |
tree | 4e9c2014b715d5bf99da7ab3394411e71d5186bc /lib/MC/MCParser | |
parent | 09dcb16d132ccbb3aaaf4cba5839c990e3101641 (diff) | |
download | llvm-55c02687140ffb7bb37a381cf40db4ee4aea4b10.tar.gz |
Reduce the size of MCRelaxableFragment.
MCRelaxableFragment previously kept a copy of MCSubtargetInfo and
MCInst to enable re-encoding the MCInst later during relaxation. A copy
of MCSubtargetInfo (instead of a reference or pointer) was needed
because the feature bits could be modified by the parser.
This commit replaces the MCSubtargetInfo copy in MCRelaxableFragment
with a constant reference to MCSubtargetInfo. The copies of
MCSubtargetInfo are kept in MCContext, and the target parsers are now
responsible for asking MCContext to provide a copy whenever the feature
bits of MCSubtargetInfo have to be toggled.
With this patch, I saw a 4% reduction in peak memory usage when I
compiled verify-uselistorder.lto.bc using llc.
rdar://problem/21736951
Differential Revision: http://reviews.llvm.org/D14346
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253127 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCParser')
-rw-r--r-- | lib/MC/MCParser/MCTargetAsmParser.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/MC/MCParser/MCTargetAsmParser.cpp b/lib/MC/MCParser/MCTargetAsmParser.cpp index 234b3b647073..4e4b47805cd8 100644 --- a/lib/MC/MCParser/MCTargetAsmParser.cpp +++ b/lib/MC/MCParser/MCTargetAsmParser.cpp @@ -12,15 +12,21 @@ using namespace llvm; MCTargetAsmParser::MCTargetAsmParser(MCTargetOptions const &MCOptions, - MCSubtargetInfo &STI) + const MCSubtargetInfo &STI) : AvailableFeatures(0), ParsingInlineAsm(false), MCOptions(MCOptions), - STI(STI) + STI(&STI) { } MCTargetAsmParser::~MCTargetAsmParser() { } +MCSubtargetInfo &MCTargetAsmParser::copySTI() { + MCSubtargetInfo &STICopy = getContext().getSubtargetCopy(getSTI()); + STI = &STICopy; + return STICopy; +} + const MCSubtargetInfo &MCTargetAsmParser::getSTI() const { - return STI; + return *STI; } |