[llvm] r250239 - Add missing #include, found by modules build.
Sean Silva via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 13 18:06:06 PDT 2015
Are all the llvm-bcanalyzer.cpp changes intentional?
-- Sean Silva
On Tue, Oct 13, 2015 at 3:24 PM, Richard Smith via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: rsmith
> Date: Tue Oct 13 17:24:10 2015
> New Revision: 250239
>
> URL: http://llvm.org/viewvc/llvm-project?rev=250239&view=rev
> Log:
> Add missing #include, found by modules build.
>
> Modified:
> llvm/trunk/include/llvm/Transforms/Utils/LoopVersioning.h
> llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
>
> Modified: llvm/trunk/include/llvm/Transforms/Utils/LoopVersioning.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/LoopVersioning.h?rev=250239&r1=250238&r2=250239&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Utils/LoopVersioning.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Utils/LoopVersioning.h Tue Oct 13
> 17:24:10 2015
> @@ -16,6 +16,7 @@
> #ifndef LLVM_TRANSFORMS_UTILS_LOOPVERSIONING_H
> #define LLVM_TRANSFORMS_UTILS_LOOPVERSIONING_H
>
> +#include "llvm/Analysis/LoopAccessAnalysis.h"
> #include "llvm/Transforms/Utils/ValueMapper.h"
> #include "llvm/Transforms/Utils/LoopUtils.h"
>
>
> Modified: llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp?rev=250239&r1=250238&r2=250239&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp (original)
> +++ llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp Tue Oct 13
> 17:24:10 2015
> @@ -35,6 +35,7 @@
> #include "llvm/Support/CommandLine.h"
> #include "llvm/Support/Format.h"
> #include "llvm/Support/ManagedStatic.h"
> +#include "llvm/Support/MathExtras.h"
> #include "llvm/Support/MemoryBuffer.h"
> #include "llvm/Support/PrettyStackTrace.h"
> #include "llvm/Support/Signals.h"
> @@ -335,11 +336,20 @@ static const char *GetCodeName(unsigned
> }
>
> struct PerRecordStats {
> + /// The number of times this record code has been seen.
> unsigned NumInstances;
> + /// The number of times this record code has been seen abbreviated.
> unsigned NumAbbrev;
> + /// The total number of bits used for this record on disk.
> uint64_t TotalBits;
> -
> - PerRecordStats() : NumInstances(0), NumAbbrev(0), TotalBits(0) {}
> + /// The number of bits that would have been used if no abbrevs were
> used.
> + uint64_t UnabbrevBits;
> + /// The number of bits that would be used if "good" abbreviations were
> used.
> + uint64_t GoodAbbrevBits;
> +
> + PerRecordStats()
> + : NumInstances(0), NumAbbrev(0), TotalBits(0), UnabbrevBits(0),
> + GoodAbbrevBits(0) {}
> };
>
> struct PerBlockIDStats {
> @@ -378,6 +388,58 @@ static bool Error(const Twine &Err) {
> return true;
> }
>
> +static unsigned computeVBR6Bits(uint64_t Val) {
> + unsigned Bits = 0;
> + do {
> + Bits += 6;
> + } while (Val >>= 5);
> + return Bits;
> +}
> +
> +static void addBlobSize(uint64_t &Bits, StringRef Blob) {
> + // Blob size is always VBR6.
> + Bits += computeVBR6Bits(Blob.size());
> +
> + // Blob is always 32-bit aligned, and padded to a multiple of 32 bits.
> + RoundUpToAlignment(Bits, 32);
> + Bits += Blob.size() * 8;
> + RoundUpToAlignment(Bits, 32);
> +}
> +
> +/// \brief Compute the number of bits that would be used by the record if
> it
> +/// were unabbreviated.
> +static uint64_t computeUnabbrevBits(unsigned AbbrevIDWidth, unsigned Code,
> + ArrayRef<uint64_t> Record, StringRef
> Blob) {
> + uint64_t Bits =
> + AbbrevIDWidth + computeVBR6Bits(Code) +
> computeVBR6Bits(Record.size());
> + // Use VBR6 for all fields.
> + for (uint64_t Val : Record)
> + Bits += computeVBR6Bits(Val);
> + // Assume Blob representation for the blob, even though a Blob cannot
> + // be unabbreviated.
> + if (!Blob.empty())
> + addBlobSize(Bits, Blob);
> + return Bits;
> +}
> +
> +/// \brief Compute the number of bits that would be used by the record if
> a
> +/// "good" abbreviation were used. We use an extremely simple heuristic
> for
> +/// "good"ness: pick the best abbrev that uses a Literal for the record
> code,
> +/// a normal Blob field for the blob (if present), and a minimal-width
> Fixed
> +/// field for everything else.
> +static uint64_t computeGoodAbbrevBits(unsigned AbbrevIDWidth, unsigned
> Code,
> + ArrayRef<uint64_t> Record,
> + StringRef Blob) {
> + uint64_t Bits = AbbrevIDWidth;
> + // Use Fixed for all fields (other than the record code).
> + for (uint64_t Val : Record)
> + Bits += 64 - llvm::countLeadingZeros(Val);
> + // Assume Blob representation for the blob.
> + if (!Blob.empty())
> + addBlobSize(Bits, Blob);
> + return Bits;
> +}
> +
> /// ParseBlock - Read a block, updating statistics, etc.
> static bool ParseBlock(BitstreamCursor &Stream, unsigned BlockID,
> unsigned IndentLevel, CurStreamTypeType
> CurStreamType) {
> @@ -482,6 +544,10 @@ static bool ParseBlock(BitstreamCursor &
> BlockStats.CodeFreq[Code].NumInstances++;
> BlockStats.CodeFreq[Code].TotalBits +=
> Stream.GetCurrentBitNo()-RecordStartBit;
> + BlockStats.CodeFreq[Code].UnabbrevBits +=
> + computeUnabbrevBits(Stream.getAbbrevIDWidth(), Code, Record, Blob);
> + BlockStats.CodeFreq[Code].GoodAbbrevBits +=
> + computeGoodAbbrevBits(Stream.getAbbrevIDWidth(), Code, Record,
> Blob);
> if (Entry.ID != bitc::UNABBREV_RECORD) {
> BlockStats.CodeFreq[Code].NumAbbrev++;
> ++BlockStats.NumAbbreviatedRecords;
> @@ -720,28 +786,36 @@ static int AnalyzeBitcode() {
>
> // Print a histogram of the codes we see.
> if (!NoHistogram && !Stats.CodeFreq.empty()) {
> - std::vector<std::pair<unsigned, unsigned> > FreqPairs; //
> <freq,code>
> + std::vector<std::pair<uint64_t, unsigned> > FreqPairs; //
> <bits,code>
> for (unsigned i = 0, e = Stats.CodeFreq.size(); i != e; ++i)
> - if (unsigned Freq = Stats.CodeFreq[i].NumInstances)
> + if (unsigned Freq = Stats.CodeFreq[i].TotalBits)
> FreqPairs.push_back(std::make_pair(Freq, i));
> std::stable_sort(FreqPairs.begin(), FreqPairs.end());
> std::reverse(FreqPairs.begin(), FreqPairs.end());
>
> outs() << "\tRecord Histogram:\n";
> - outs() << "\t\t Count # Bits %% Abv Record Kind\n";
> + outs() << "\t\t Count # Bits % Abv % Cmp (cur/best) Record
> Kind\n";
> for (unsigned i = 0, e = FreqPairs.size(); i != e; ++i) {
> const PerRecordStats &RecStats =
> Stats.CodeFreq[FreqPairs[i].second];
>
> - outs() << format("\t\t%7d %9lu",
> + outs() << format("\t\t%7d %9lu ",
> RecStats.NumInstances,
> (unsigned long)RecStats.TotalBits);
>
> if (RecStats.NumAbbrev)
> outs() <<
> - format("%7.2f ",
> + format("%7.2f ",
>
> (double)RecStats.NumAbbrev/RecStats.NumInstances*100);
> else
> - outs() << " ";
> + outs() << " ";
> +
> + if (RecStats.UnabbrevBits)
> + outs() << format(
> + "%7.2f / %7.2f ",
> + (double)RecStats.TotalBits / RecStats.UnabbrevBits * 100,
> + (double)RecStats.GoodAbbrevBits / RecStats.UnabbrevBits *
> 100);
> + else
> + outs() << " ";
>
> if (const char *CodeName =
> GetCodeName(FreqPairs[i].second, I->first, StreamFile,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151013/161ccd33/attachment.html>
More information about the llvm-commits
mailing list