summaryrefslogtreecommitdiff
path: root/lib/MC/MCParser
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2015-11-14 06:35:56 +0000
committerAkira Hatanaka <ahatanaka@apple.com>2015-11-14 06:35:56 +0000
commit55c02687140ffb7bb37a381cf40db4ee4aea4b10 (patch)
tree4e9c2014b715d5bf99da7ab3394411e71d5186bc /lib/MC/MCParser
parent09dcb16d132ccbb3aaaf4cba5839c990e3101641 (diff)
downloadllvm-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.cpp12
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;
}