[llvm] r184592 - Improve the time it takes to generating dwarf for assembly source files
Eric Christopher
echristo at gmail.com
Fri Jun 21 13:59:51 PDT 2013
> 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 :)
-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