[llvm] r184592 - Improve the time it takes to generating dwarf for assembly source files
Kevin Enderby
enderby at apple.com
Fri Jun 21 14:03:19 PDT 2013
On Jun 21, 2013, at 1:59 PM, Eric Christopher <echristo at gmail.com> wrote:
>> comment. And the current code calls SrcMgr.FindLineNumber()
>> twice to do this causing its cache not to work and results in very
>> slow compile times:
>>
>> % time /Volumes/SandBox/build-llvm/Debug+Asserts/bin/llvm-mc -triple thumbv7-apple-ios -filetype=obj -o /tmp/x.o mscorlib.dll.E -g
>> 672.542u 0.299s 11:13.15 99.9% 0+0k 0+2io 2106pf+0w
>>
>> So we save the info from the last parsed cpp hash file line comment
>> to avoid making the second call to SrcMgr.FindLineNumber() most times
>> and end up with compile times like:
>>
>> % time /Volumes/SandBox/build-llvm/Debug+Asserts/bin/llvm-mc -triple thumbv7-apple-ios -filetype=obj -o /tmp/x.o mscorlib.dll.E -g
>> 3.404u 0.104s 0:03.80 92.1% 0+0k 0+3io 2105pf+0w
>>
>
> *blink* 11 minutes to 3 seconds? Nice work :)
It is a big machine generated assembly file:
% wc mscorlib.dll.E
221672 403313 7088742 mscorlib.dll.E
>
> -eric
>
>> rdar://14156934
>>
>> Modified:
>> llvm/trunk/lib/MC/MCParser/AsmParser.cpp
>>
>> Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=184592&r1=184591&r2=184592&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
>> +++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Fri Jun 21 15:51:39 2013
>> @@ -160,6 +160,13 @@ private:
>> int64_t CppHashLineNumber;
>> SMLoc CppHashLoc;
>> int CppHashBuf;
>> + /// When generating dwarf for assembly source files we need to calculate the
>> + /// logical line number based on the last parsed cpp hash file line comment
>> + /// and current line. Since this is slow and messes up the SourceMgr's
>> + /// cache we save the last info we queried with SrcMgr.FindLineNumber().
>> + SMLoc LastQueryIDLoc;
>> + int LastQueryBuffer;
>> + unsigned LastQueryLine;
>>
>> /// AssemblerDialect. ~OU means unset value and use value provided by MAI.
>> unsigned AssemblerDialect;
>> @@ -1519,7 +1526,18 @@ bool AsmParser::ParseStatement(ParseStat
>> getStreamer().EmitDwarfFileDirective(
>> getContext().nextGenDwarfFileNumber(), StringRef(), CppHashFilename);
>>
>> - unsigned CppHashLocLineNo = SrcMgr.FindLineNumber(CppHashLoc,CppHashBuf);
>> + // Since SrcMgr.FindLineNumber() is slow and messes up the SourceMgr's
>> + // cache with the different Loc from the call above we save the last
>> + // info we queried here with SrcMgr.FindLineNumber().
>> + unsigned CppHashLocLineNo;
>> + if (LastQueryIDLoc == CppHashLoc && LastQueryBuffer == CppHashBuf)
>> + CppHashLocLineNo = LastQueryLine;
>> + else {
>> + CppHashLocLineNo = SrcMgr.FindLineNumber(CppHashLoc, CppHashBuf);
>> + LastQueryLine = CppHashLocLineNo;
>> + LastQueryIDLoc = CppHashLoc;
>> + LastQueryBuffer = CppHashBuf;
>> + }
>> Line = CppHashLineNumber - 1 + (Line - CppHashLocLineNo);
>> }
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list