From b11ef0897cd7c67740d309e28d228c03f4dcba88 Mon Sep 17 00:00:00 2001 From: Akira Hatanaka Date: Sat, 14 Nov 2015 06:35:56 +0000 Subject: 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 llvm-svn: 253127 --- llvm/lib/MC/MCParser/MCTargetAsmParser.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'llvm/lib/MC/MCParser') diff --git a/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp b/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp index 234b3b64707..4e4b47805cd 100644 --- a/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp +++ b/llvm/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; } -- cgit v1.2.3