[llvm] r262811 - Bitcode reader: Inline readAbbreviatedField in readRecord and move the enclosing loop in each case (NFC)
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 7 08:29:47 PST 2016
> On Mar 7, 2016, at 8:20 AM, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
>
> With the gold plugin I got a smaller but measurable speedup. Linking
> clang with -plugin-opt=disable-output went from 15.99 seconds to 15.85
> seconds.
Thanks for double-checking!
0.9% improvement right?
I reported earlier that readRecord() accounts for ~%3 of the total link time, and that it is ~20% faster itself, so you're seeing even more improvements than I did.
ThinLTO is stressing it more with ~10% of the total link time and thus ~2% improvement on the total.
--
Mehdi
>
> Cheers,
> Rafael
>
>
> On 6 March 2016 at 19:38, Mehdi Amini via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>> Author: mehdi_amini
>> Date: Sun Mar 6 18:38:09 2016
>> New Revision: 262811
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=262811&view=rev
>> Log:
>> Bitcode reader: Inline readAbbreviatedField in readRecord and move the enclosing loop in each case (NFC)
>>
>> Summary: This make readRecord 20% faster, measured on an LTO build
>>
>> Reviewers: rafael
>>
>> Subscribers: llvm-commits
>>
>> Differential Revision: http://reviews.llvm.org/D17911
>>
>> From: Mehdi Amini <mehdi.amini at apple.com>
>>
>> Modified:
>> llvm/trunk/lib/Bitcode/Reader/BitstreamReader.cpp
>>
>> Modified: llvm/trunk/lib/Bitcode/Reader/BitstreamReader.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitstreamReader.cpp?rev=262811&r1=262810&r2=262811&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Bitcode/Reader/BitstreamReader.cpp (original)
>> +++ llvm/trunk/lib/Bitcode/Reader/BitstreamReader.cpp Sun Mar 6 18:38:09 2016
>> @@ -131,8 +131,25 @@ void BitstreamCursor::skipRecord(unsigne
>> const BitCodeAbbrevOp &EltEnc = Abbv->getOperandInfo(++i);
>>
>> // Read all the elements.
>> - for (; NumElts; --NumElts)
>> - skipAbbreviatedField(*this, EltEnc);
>> + // Decode the value as we are commanded.
>> + switch (EltEnc.getEncoding()) {
>> + default:
>> + report_fatal_error("Array element type can't be an Array or a Blob");
>> + case BitCodeAbbrevOp::Fixed:
>> + assert((unsigned)Op.getEncodingData() <= MaxChunkSize);
>> + for (; NumElts; --NumElts)
>> + Read((unsigned)EltEnc.getEncodingData());
>> + break;
>> + case BitCodeAbbrevOp::VBR:
>> + assert((unsigned)Op.getEncodingData() <= MaxChunkSize);
>> + for (; NumElts; --NumElts)
>> + ReadVBR64((unsigned)EltEnc.getEncodingData());
>> + break;
>> + case BitCodeAbbrevOp::Char6:
>> + for (; NumElts; --NumElts)
>> + Read(6);
>> + break;
>> + }
>> continue;
>> }
>>
>> @@ -206,13 +223,23 @@ unsigned BitstreamCursor::readRecord(uns
>> if (!EltEnc.isEncoding())
>> report_fatal_error(
>> "Array element type has to be an encoding of a type");
>> - if (EltEnc.getEncoding() == BitCodeAbbrevOp::Array ||
>> - EltEnc.getEncoding() == BitCodeAbbrevOp::Blob)
>> - report_fatal_error("Array element type can't be an Array or a Blob");
>>
>> // Read all the elements.
>> - for (; NumElts; --NumElts)
>> - Vals.push_back(readAbbreviatedField(*this, EltEnc));
>> + switch (EltEnc.getEncoding()) {
>> + default:
>> + report_fatal_error("Array element type can't be an Array or a Blob");
>> + case BitCodeAbbrevOp::Fixed:
>> + for (; NumElts; --NumElts)
>> + Vals.push_back(Read((unsigned)EltEnc.getEncodingData()));
>> + break;
>> + case BitCodeAbbrevOp::VBR:
>> + for (; NumElts; --NumElts)
>> + Vals.push_back(ReadVBR64((unsigned)EltEnc.getEncodingData()));
>> + break;
>> + case BitCodeAbbrevOp::Char6:
>> + for (; NumElts; --NumElts)
>> + Vals.push_back(BitCodeAbbrevOp::DecodeChar6(Read(6)));
>> + }
>> continue;
>> }
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list