[llvm] r342657 - [gcov] Fix wrong line hit counts when multiple blocks are on the same line
Calixte Denizet via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 25 03:25:32 PDT 2018
I'm fixing the tests to avoid such a situation in the future.
Le mar. 25 sept. 2018 à 11:51, Calixte Denizet <cdenizet at mozilla.com> a
écrit :
> In looking at the logs it seems that number of Runs is wrong. It should be
> fixed in removing directory
> ./projects/compiler-rt/test/profile/Profile-x86_64/Output/.
> I've the same issue locally, when a test in test/profile is failing I need
> to update the test and rm this dir else the Runs is wrong.
>
> C
>
> Le lun. 24 sept. 2018 à 23:41, Vitaly Buka <vitalybuka at google.com> a
> écrit :
>
>> Ping. I'd like to revert this patch to fix the bot.
>>
>> http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/14504
>>
>> On Fri, Sep 21, 2018 at 11:44 AM Evgenii Stepanov via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Hi,
>>>
>>> since this patch, gcov tests are failing on ppc64 bot:
>>> http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt?numbuilds=200
>>>
>>> On Thu, Sep 20, 2018 at 9:09 AM, Calixte Denizet via llvm-commits <
>>> llvm-commits at lists.llvm.org> wrote:
>>>
>>>> Author: calixte
>>>> Date: Thu Sep 20 09:09:30 2018
>>>> New Revision: 342657
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=342657&view=rev
>>>> Log:
>>>> [gcov] Fix wrong line hit counts when multiple blocks are on the same
>>>> line
>>>>
>>>> Summary:
>>>> The goal of this patch is to have the same behaviour than gcc-gcov.
>>>> Currently the hit counts for a line is the sum of the counts for each
>>>> block on that line.
>>>> The idea is to detect the cycles in the graph of blocks in using the
>>>> algorithm by Hawick & James.
>>>> The count for a cycle is the min of the counts for each edge in the
>>>> cycle.
>>>> Once we've the count for each cycle, we can sum them and add the
>>>> transition counts of those cycles.
>>>>
>>>> Fix both https://bugs.llvm.org/show_bug.cgi?id=38065 and
>>>> https://bugs.llvm.org/show_bug.cgi?id=38066
>>>>
>>>> Reviewers: marco-c, davidxl
>>>>
>>>> Reviewed By: marco-c
>>>>
>>>> Subscribers: vsk, lebedev.ri, sylvestre.ledru, dblaikie, llvm-commits
>>>>
>>>> Differential Revision: https://reviews.llvm.org/D49659
>>>>
>>>> Modified:
>>>> llvm/trunk/include/llvm/ProfileData/GCOV.h
>>>> llvm/trunk/lib/ProfileData/GCOV.cpp
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.h.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.h.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.h.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.h.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_missing.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_no_options.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_objdir.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_paths.cpp.gcov
>>>> llvm/trunk/test/tools/llvm-cov/range_based_for.cpp
>>>>
>>>> Modified: llvm/trunk/include/llvm/ProfileData/GCOV.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/GCOV.h?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/include/llvm/ProfileData/GCOV.h (original)
>>>> +++ llvm/trunk/include/llvm/ProfileData/GCOV.h Thu Sep 20 09:09:30 2018
>>>> @@ -24,9 +24,11 @@
>>>> #include "llvm/ADT/iterator_range.h"
>>>> #include "llvm/Support/MemoryBuffer.h"
>>>> #include "llvm/Support/raw_ostream.h"
>>>> +#include <algorithm>
>>>> #include <cassert>
>>>> #include <cstddef>
>>>> #include <cstdint>
>>>> +#include <limits>
>>>> #include <memory>
>>>> #include <string>
>>>> #include <utility>
>>>> @@ -266,13 +268,14 @@ struct GCOVEdge {
>>>> GCOVBlock &Src;
>>>> GCOVBlock &Dst;
>>>> uint64_t Count = 0;
>>>> + uint64_t CyclesCount = 0;
>>>> };
>>>>
>>>> /// GCOVFunction - Collects function information.
>>>> class GCOVFunction {
>>>> public:
>>>> - using BlockIterator = pointee_iterator<SmallVectorImpl<
>>>> - std::unique_ptr<GCOVBlock>>::const_iterator>;
>>>> + using BlockIterator = pointee_iterator<
>>>> + SmallVectorImpl<std::unique_ptr<GCOVBlock>>::const_iterator>;
>>>>
>>>> GCOVFunction(GCOVFile &P) : Parent(P) {}
>>>>
>>>> @@ -322,6 +325,9 @@ class GCOVBlock {
>>>>
>>>> public:
>>>> using EdgeIterator = SmallVectorImpl<GCOVEdge *>::const_iterator;
>>>> + using BlockVector = SmallVector<const GCOVBlock *, 4>;
>>>> + using BlockVectorLists = SmallVector<BlockVector, 4>;
>>>> + using Edges = SmallVector<GCOVEdge *, 4>;
>>>>
>>>> GCOVBlock(GCOVFunction &P, uint32_t N) : Parent(P), Number(N) {}
>>>> ~GCOVBlock();
>>>> @@ -365,6 +371,16 @@ public:
>>>> void dump() const;
>>>> void collectLineCounts(FileInfo &FI);
>>>>
>>>> + static uint64_t getCycleCount(const Edges &Path);
>>>> + static void unblock(const GCOVBlock *U, BlockVector &Blocked,
>>>> + BlockVectorLists &BlockLists);
>>>> + static bool lookForCircuit(const GCOVBlock *V, const GCOVBlock
>>>> *Start,
>>>> + Edges &Path, BlockVector &Blocked,
>>>> + BlockVectorLists &BlockLists,
>>>> + const BlockVector &Blocks, uint64_t
>>>> &Count);
>>>> + static void getCyclesCount(const BlockVector &Blocks, uint64_t
>>>> &Count);
>>>> + static uint64_t getLineCount(const BlockVector &Blocks);
>>>> +
>>>> private:
>>>> GCOVFunction &Parent;
>>>> uint32_t Number;
>>>>
>>>> Modified: llvm/trunk/lib/ProfileData/GCOV.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/GCOV.cpp?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/ProfileData/GCOV.cpp (original)
>>>> +++ llvm/trunk/lib/ProfileData/GCOV.cpp Thu Sep 20 09:09:30 2018
>>>> @@ -111,9 +111,7 @@ void GCOVFile::print(raw_ostream &OS) co
>>>>
>>>> #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
>>>> /// dump - Dump GCOVFile content to dbgs() for debugging purposes.
>>>> -LLVM_DUMP_METHOD void GCOVFile::dump() const {
>>>> - print(dbgs());
>>>> -}
>>>> +LLVM_DUMP_METHOD void GCOVFile::dump() const { print(dbgs()); }
>>>> #endif
>>>>
>>>> /// collectLineCounts - Collect line counts. This must be used after
>>>> @@ -359,9 +357,7 @@ void GCOVFunction::print(raw_ostream &OS
>>>>
>>>> #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
>>>> /// dump - Dump GCOVFunction content to dbgs() for debugging purposes.
>>>> -LLVM_DUMP_METHOD void GCOVFunction::dump() const {
>>>> - print(dbgs());
>>>> -}
>>>> +LLVM_DUMP_METHOD void GCOVFunction::dump() const { print(dbgs()); }
>>>> #endif
>>>>
>>>> /// collectLineCounts - Collect line counts. This must be used after
>>>> @@ -437,12 +433,135 @@ void GCOVBlock::print(raw_ostream &OS) c
>>>>
>>>> #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
>>>> /// dump - Dump GCOVBlock content to dbgs() for debugging purposes.
>>>> -LLVM_DUMP_METHOD void GCOVBlock::dump() const {
>>>> - print(dbgs());
>>>> -}
>>>> +LLVM_DUMP_METHOD void GCOVBlock::dump() const { print(dbgs()); }
>>>> #endif
>>>>
>>>>
>>>> //===----------------------------------------------------------------------===//
>>>> +// Cycles detection
>>>> +//
>>>> +// The algorithm in GCC is based on the algorihtm by Hawick & James:
>>>> +// "Enumerating Circuits and Loops in Graphs with Self-Arcs and
>>>> Multiple-Arcs"
>>>> +// http://complexity.massey.ac.nz/cstn/013/cstn-013.pdf.
>>>> +
>>>> +/// Get the count for the detected cycle.
>>>> +uint64_t GCOVBlock::getCycleCount(const Edges &Path) {
>>>> + uint64_t CycleCount = std::numeric_limits<uint64_t>::max();
>>>> + for (auto E : Path) {
>>>> + CycleCount = std::min(E->CyclesCount, CycleCount);
>>>> + }
>>>> + for (auto E : Path) {
>>>> + E->CyclesCount -= CycleCount;
>>>> + }
>>>> + return CycleCount;
>>>> +}
>>>> +
>>>> +/// Unblock a vertex previously marked as blocked.
>>>> +void GCOVBlock::unblock(const GCOVBlock *U, BlockVector &Blocked,
>>>> + BlockVectorLists &BlockLists) {
>>>> + auto it = find(Blocked, U);
>>>> + if (it == Blocked.end()) {
>>>> + return;
>>>> + }
>>>> +
>>>> + const size_t index = it - Blocked.begin();
>>>> + Blocked.erase(it);
>>>> +
>>>> + const BlockVector ToUnblock(BlockLists[index]);
>>>> + BlockLists.erase(BlockLists.begin() + index);
>>>> + for (auto GB : ToUnblock) {
>>>> + GCOVBlock::unblock(GB, Blocked, BlockLists);
>>>> + }
>>>> +}
>>>> +
>>>> +bool GCOVBlock::lookForCircuit(const GCOVBlock *V, const GCOVBlock
>>>> *Start,
>>>> + Edges &Path, BlockVector &Blocked,
>>>> + BlockVectorLists &BlockLists,
>>>> + const BlockVector &Blocks, uint64_t
>>>> &Count) {
>>>> + Blocked.push_back(V);
>>>> + BlockLists.emplace_back(BlockVector());
>>>> + bool FoundCircuit = false;
>>>> +
>>>> + for (auto E : V->dsts()) {
>>>> + const GCOVBlock *W = &E->Dst;
>>>> + if (W < Start || find(Blocks, W) == Blocks.end()) {
>>>> + continue;
>>>> + }
>>>> +
>>>> + Path.push_back(E);
>>>> +
>>>> + if (W == Start) {
>>>> + // We've a cycle.
>>>> + Count += GCOVBlock::getCycleCount(Path);
>>>> + FoundCircuit = true;
>>>> + } else if (find(Blocked, W) == Blocked.end() && // W is not
>>>> blocked.
>>>> + GCOVBlock::lookForCircuit(W, Start, Path, Blocked,
>>>> BlockLists,
>>>> + Blocks, Count)) {
>>>> + FoundCircuit = true;
>>>> + }
>>>> +
>>>> + Path.pop_back();
>>>> + }
>>>> +
>>>> + if (FoundCircuit) {
>>>> + GCOVBlock::unblock(V, Blocked, BlockLists);
>>>> + } else {
>>>> + for (auto E : V->dsts()) {
>>>> + const GCOVBlock *W = &E->Dst;
>>>> + if (W < Start || find(Blocks, W) == Blocks.end()) {
>>>> + continue;
>>>> + }
>>>> + const size_t index = find(Blocked, W) - Blocked.begin();
>>>> + BlockVector &List = BlockLists[index];
>>>> + if (find(List, V) == List.end()) {
>>>> + List.push_back(V);
>>>> + }
>>>> + }
>>>> + }
>>>> +
>>>> + return FoundCircuit;
>>>> +}
>>>> +
>>>> +/// Get the count for the list of blocks which lie on the same line.
>>>> +void GCOVBlock::getCyclesCount(const BlockVector &Blocks, uint64_t
>>>> &Count) {
>>>> + for (auto Block : Blocks) {
>>>> + Edges Path;
>>>> + BlockVector Blocked;
>>>> + BlockVectorLists BlockLists;
>>>> +
>>>> + GCOVBlock::lookForCircuit(Block, Block, Path, Blocked, BlockLists,
>>>> Blocks,
>>>> + Count);
>>>> + }
>>>> +}
>>>> +
>>>> +/// Get the count for the list of blocks which lie on the same line.
>>>> +uint64_t GCOVBlock::getLineCount(const BlockVector &Blocks) {
>>>> + uint64_t Count = 0;
>>>> +
>>>> + for (auto Block : Blocks) {
>>>> + if (Block->getNumSrcEdges() == 0) {
>>>> + // The block has no predecessors and a non-null counter
>>>> + // (can be the case with entry block in functions).
>>>> + Count += Block->getCount();
>>>> + } else {
>>>> + // Add counts from predecessors that are not on the same line.
>>>> + for (auto E : Block->srcs()) {
>>>> + const GCOVBlock *W = &E->Src;
>>>> + if (find(Blocks, W) == Blocks.end()) {
>>>> + Count += E->Count;
>>>> + }
>>>> + }
>>>> + }
>>>> + for (auto E : Block->dsts()) {
>>>> + E->CyclesCount = E->Count;
>>>> + }
>>>> + }
>>>> +
>>>> + GCOVBlock::getCyclesCount(Blocks, Count);
>>>> +
>>>> + return Count;
>>>> +}
>>>> +
>>>>
>>>> +//===----------------------------------------------------------------------===//
>>>> // FileInfo implementation.
>>>>
>>>> // Safe integer division, returns 0 if numerator is 0.
>>>> @@ -578,8 +697,8 @@ FileInfo::openCoveragePath(StringRef Cov
>>>> return llvm::make_unique<raw_null_ostream>();
>>>>
>>>> std::error_code EC;
>>>> - auto OS = llvm::make_unique<raw_fd_ostream>(CoveragePath, EC,
>>>> - sys::fs::F_Text);
>>>> + auto OS =
>>>> + llvm::make_unique<raw_fd_ostream>(CoveragePath, EC,
>>>> sys::fs::F_Text);
>>>> if (EC) {
>>>> errs() << EC.message() << "\n";
>>>> return llvm::make_unique<raw_null_ostream>();
>>>> @@ -628,17 +747,7 @@ void FileInfo::print(raw_ostream &InfoOS
>>>>
>>>> // Add up the block counts to form line counts.
>>>> DenseMap<const GCOVFunction *, bool> LineExecs;
>>>> - uint64_t LineCount = 0;
>>>> for (const GCOVBlock *Block : Blocks) {
>>>> - if (Options.AllBlocks) {
>>>> - // Only take the highest block count for that line.
>>>> - uint64_t BlockCount = Block->getCount();
>>>> - LineCount = LineCount > BlockCount ? LineCount :
>>>> BlockCount;
>>>> - } else {
>>>> - // Sum up all of the block counts.
>>>> - LineCount += Block->getCount();
>>>> - }
>>>> -
>>>> if (Options.FuncCoverage) {
>>>> // This is a slightly convoluted way to most accurately
>>>> gather line
>>>> // statistics for functions. Basically what is happening
>>>> is that we
>>>> @@ -674,6 +783,7 @@ void FileInfo::print(raw_ostream &InfoOS
>>>> }
>>>> }
>>>>
>>>> + const uint64_t LineCount = GCOVBlock::getLineCount(Blocks);
>>>> if (LineCount == 0)
>>>> CovOS << " #####:";
>>>> else {
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.cpp.gcov (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.cpp.gcov Thu Sep 20
>>>> 09:09:30 2018
>>>> @@ -49,7 +49,7 @@
>>>> 4: 34-block 0
>>>> 12: 34-block 1
>>>> 8: 34-block 2
>>>> - 8: 35: assign(ii, jj);
>>>> + 12: 35: assign(ii, jj);
>>>> 8: 35-block 0
>>>> 4: 35-block 1
>>>> 2: 36:}
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.h.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.h.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.h.gcov (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a.h.gcov Thu Sep 20
>>>> 09:09:30 2018
>>>> @@ -3,7 +3,7 @@
>>>> -: 0:Data:test.gcda
>>>> -: 0:Runs:2
>>>> -: 0:Programs:1
>>>> - 2: 1:struct A {
>>>> + 4: 1:struct A {
>>>> 2: 1-block 0
>>>> 2: 1-block 1
>>>> -: 2: virtual void B();
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.cpp.gcov (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.cpp.gcov Thu Sep
>>>> 20 09:09:30 2018
>>>> @@ -60,7 +60,7 @@ branch 1 taken 33%
>>>> branch 0 taken 67%
>>>> branch 1 taken 33%
>>>> 8: 34-block 2
>>>> - 8: 35: assign(ii, jj);
>>>> + 12: 35: assign(ii, jj);
>>>> 8: 35-block 0
>>>> 4: 35-block 1
>>>> 2: 36:}
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.h.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.h.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.h.gcov (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b.h.gcov Thu Sep 20
>>>> 09:09:30 2018
>>>> @@ -5,7 +5,7 @@
>>>> -: 0:Programs:1
>>>> function _ZN1AC1Ev called 2 returned 100% blocks executed 100%
>>>> function _ZN1AC2Ev called 2 returned 100% blocks executed 100%
>>>> - 2: 1:struct A {
>>>> + 4: 1:struct A {
>>>> 2: 1-block 0
>>>> 2: 1-block 1
>>>> -: 2: virtual void B();
>>>>
>>>> Modified:
>>>> llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.cpp.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.cpp.gcov Thu
>>>> Sep 20 09:09:30 2018
>>>> @@ -70,7 +70,7 @@ branch 1 taken 8
>>>> branch 2 taken 4
>>>> 8: 34-block 2
>>>> unconditional 3 taken 8
>>>> - 8: 35: assign(ii, jj);
>>>> + 12: 35: assign(ii, jj);
>>>> 8: 35-block 0
>>>> unconditional 0 taken 8
>>>> 4: 35-block 1
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.h.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.h.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.h.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-c_-u.h.gcov Thu
>>>> Sep 20 09:09:30 2018
>>>> @@ -5,7 +5,7 @@
>>>> -: 0:Programs:1
>>>> function _ZN1AC1Ev called 2 returned 100% blocks executed 100%
>>>> function _ZN1AC2Ev called 2 returned 100% blocks executed 100%
>>>> - 2: 1:struct A {
>>>> + 4: 1:struct A {
>>>> 2: 1-block 0
>>>> unconditional 0 taken 2
>>>> 2: 1-block 1
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.cpp.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.cpp.gcov Thu
>>>> Sep 20 09:09:30 2018
>>>> @@ -70,7 +70,7 @@ branch 1 taken 67%
>>>> branch 2 taken 33%
>>>> 8: 34-block 2
>>>> unconditional 3 taken 100%
>>>> - 8: 35: assign(ii, jj);
>>>> + 12: 35: assign(ii, jj);
>>>> 8: 35-block 0
>>>> unconditional 0 taken 100%
>>>> 4: 35-block 1
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.h.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.h.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.h.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_-a_-b_-u.h.gcov Thu Sep
>>>> 20 09:09:30 2018
>>>> @@ -5,7 +5,7 @@
>>>> -: 0:Programs:1
>>>> function _ZN1AC1Ev called 2 returned 100% blocks executed 100%
>>>> function _ZN1AC2Ev called 2 returned 100% blocks executed 100%
>>>> - 2: 1:struct A {
>>>> + 4: 1:struct A {
>>>> 2: 1-block 0
>>>> unconditional 0 taken 100%
>>>> 2: 1-block 1
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_missing.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_missing.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_missing.cpp.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_missing.cpp.gcov Thu Sep
>>>> 20 09:09:30 2018
>>>> @@ -35,8 +35,8 @@
>>>> 12: 30:/*EOF*/
>>>> -: 31:/*EOF*/
>>>> -: 32:/*EOF*/
>>>> - 21: 33:/*EOF*/
>>>> - 36: 34:/*EOF*/
>>>> + 9: 33:/*EOF*/
>>>> + 18: 34:/*EOF*/
>>>> 18: 35:/*EOF*/
>>>> 3: 36:/*EOF*/
>>>> -: 37:/*EOF*/
>>>> @@ -53,7 +53,7 @@
>>>> #####: 48:/*EOF*/
>>>> -: 49:/*EOF*/
>>>> -: 50:/*EOF*/
>>>> - 66: 51:/*EOF*/
>>>> + 33: 51:/*EOF*/
>>>> 30: 52:/*EOF*/
>>>> -: 53:/*EOF*/
>>>> 6: 54:/*EOF*/
>>>> @@ -71,7 +71,7 @@
>>>> 30: 66:/*EOF*/
>>>> -: 67:/*EOF*/
>>>> 3: 68:/*EOF*/
>>>> -25769803782: 69:/*EOF*/
>>>> +12884901891: 69:/*EOF*/
>>>> 12884901888: 70:/*EOF*/
>>>> -: 71:/*EOF*/
>>>> 3: 72:/*EOF*/
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_no_options.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_no_options.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_no_options.cpp.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_no_options.cpp.gcov Thu
>>>> Sep 20 09:09:30 2018
>>>> @@ -35,8 +35,8 @@
>>>> 8: 30:}
>>>> -: 31:
>>>> -: 32:void initialize_grid() {
>>>> - 12: 33: for (int ii = 0; ii < 2; ii++)
>>>> - 24: 34: for (int jj = 0; jj < 2; jj++)
>>>> + 6: 33: for (int ii = 0; ii < 2; ii++)
>>>> + 12: 34: for (int jj = 0; jj < 2; jj++)
>>>> 12: 35: assign(ii, jj);
>>>> 2: 36:}
>>>> -: 37:
>>>> @@ -53,7 +53,7 @@
>>>> #####: 48: a += rand();
>>>> -: 49: }
>>>> -: 50:
>>>> - 44: 51: for (int ii = 0; ii < 10; ++ii) {
>>>> + 22: 51: for (int ii = 0; ii < 10; ++ii) {
>>>> 20: 52: switch (rand() % 5) {
>>>> -: 53: case 0:
>>>> 4: 54: a += rand();
>>>> @@ -71,7 +71,7 @@
>>>> 20: 66: }
>>>> -: 67:
>>>> 2: 68: A thing;
>>>> -17179869188: 69: for (uint64_t ii = 0; ii < 4294967296; ++ii)
>>>> +8589934594: 69: for (uint64_t ii = 0; ii < 4294967296; ++ii)
>>>> 8589934592: 70: thing.B();
>>>> -: 71:
>>>> 2: 72: return a + 8 + grid[2][3] + len;
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_objdir.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_objdir.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_objdir.cpp.gcov
>>>> (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_objdir.cpp.gcov Thu Sep
>>>> 20 09:09:30 2018
>>>> @@ -35,8 +35,8 @@
>>>> 8: 30:}
>>>> -: 31:
>>>> -: 32:void initialize_grid() {
>>>> - 12: 33: for (int ii = 0; ii < 2; ii++)
>>>> - 24: 34: for (int jj = 0; jj < 2; jj++)
>>>> + 6: 33: for (int ii = 0; ii < 2; ii++)
>>>> + 12: 34: for (int jj = 0; jj < 2; jj++)
>>>> 12: 35: assign(ii, jj);
>>>> 2: 36:}
>>>> -: 37:
>>>> @@ -53,7 +53,7 @@
>>>> #####: 48: a += rand();
>>>> -: 49: }
>>>> -: 50:
>>>> - 44: 51: for (int ii = 0; ii < 10; ++ii) {
>>>> + 22: 51: for (int ii = 0; ii < 10; ++ii) {
>>>> 20: 52: switch (rand() % 5) {
>>>> -: 53: case 0:
>>>> 4: 54: a += rand();
>>>> @@ -71,7 +71,7 @@
>>>> 20: 66: }
>>>> -: 67:
>>>> 2: 68: A thing;
>>>> -17179869188: 69: for (uint64_t ii = 0; ii < 4294967296; ++ii)
>>>> +8589934594: 69: for (uint64_t ii = 0; ii < 4294967296; ++ii)
>>>> 8589934592: 70: thing.B();
>>>> -: 71:
>>>> 2: 72: return a + 8 + grid[2][3] + len;
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/Inputs/test_paths.cpp.gcov
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/test_paths.cpp.gcov?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/Inputs/test_paths.cpp.gcov (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/Inputs/test_paths.cpp.gcov Thu Sep
>>>> 20 09:09:30 2018
>>>> @@ -35,8 +35,8 @@
>>>> 12: 30:}
>>>> -: 31:
>>>> -: 32:void initialize_grid() {
>>>> - 21: 33: for (int ii = 0; ii < 2; ii++)
>>>> - 36: 34: for (int jj = 0; jj < 2; jj++)
>>>> + 9: 33: for (int ii = 0; ii < 2; ii++)
>>>> + 18: 34: for (int jj = 0; jj < 2; jj++)
>>>> 18: 35: assign(ii, jj);
>>>> 3: 36:}
>>>> -: 37:
>>>> @@ -53,7 +53,7 @@
>>>> #####: 48: a += rand();
>>>> -: 49: }
>>>> -: 50:
>>>> - 66: 51: for (int ii = 0; ii < 10; ++ii) {
>>>> + 33: 51: for (int ii = 0; ii < 10; ++ii) {
>>>> 30: 52: switch (rand() % 5) {
>>>> -: 53: case 0:
>>>> 6: 54: a += rand();
>>>> @@ -71,7 +71,7 @@
>>>> 30: 66: }
>>>> -: 67:
>>>> 3: 68: A thing;
>>>> -25769803782: 69: for (uint64_t ii = 0; ii < 4294967296; ++ii)
>>>> +12884901891: 69: for (uint64_t ii = 0; ii < 4294967296; ++ii)
>>>> 12884901888: 70: thing.B();
>>>> -: 71:
>>>> 3: 72: return a + 8 + grid[2][3] + len;
>>>>
>>>> Modified: llvm/trunk/test/tools/llvm-cov/range_based_for.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/range_based_for.cpp?rev=342657&r1=342656&r2=342657&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/tools/llvm-cov/range_based_for.cpp (original)
>>>> +++ llvm/trunk/test/tools/llvm-cov/range_based_for.cpp Thu Sep 20
>>>> 09:09:30 2018
>>>> @@ -20,7 +20,7 @@
>>>>
>>>> int main(int argc, const char *argv[]) { // GCOV: 1: [[@LINE]]:int
>>>> main(
>>>> int V[] = {1, 2}; // GCOV: 1: [[@LINE]]:
>>>> int V[]
>>>> - for (int &I : V) { // GCOV: 10: [[@LINE]]:
>>>> for (
>>>> + for (int &I : V) { // GCOV: 5: [[@LINE]]:
>>>> for (
>>>> } // GCOV: 2: [[@LINE]]: }
>>>> return 0; // GCOV: 1: [[@LINE]]:
>>>> return
>>>> } // GCOV: -: [[@LINE]]:}
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>>
>>>
>>> _______________________________________________
>>> 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/20180925/59c5a84f/attachment.html>
More information about the llvm-commits
mailing list