[llvm] r214740 - Coverage: add HasCodeBefore flag to a mapping region.

Alex Lorenz arphaman at gmail.com
Mon Aug 4 11:00:51 PDT 2014


Author: arphaman
Date: Mon Aug  4 13:00:51 2014
New Revision: 214740

URL: http://llvm.org/viewvc/llvm-project?rev=214740&view=rev
Log:
Coverage: add HasCodeBefore flag to a mapping region.

This flag will be used by the coverage tool to help 
compute the execution counts for each line in a source file.

Differential Revision: http://reviews.llvm.org/D4746

Modified:
    llvm/trunk/include/llvm/ProfileData/CoverageMapping.h
    llvm/trunk/lib/ProfileData/CoverageMappingReader.cpp
    llvm/trunk/lib/ProfileData/CoverageMappingWriter.cpp

Modified: llvm/trunk/include/llvm/ProfileData/CoverageMapping.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/CoverageMapping.h?rev=214740&r1=214739&r2=214740&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ProfileData/CoverageMapping.h (original)
+++ llvm/trunk/include/llvm/ProfileData/CoverageMapping.h Mon Aug  4 13:00:51 2014
@@ -144,17 +144,24 @@ struct CounterMappingRegion {
     SkippedRegion
   };
 
+  static const unsigned EncodingHasCodeBeforeBits = 1;
+
   Counter Count;
   unsigned FileID, ExpandedFileID;
   unsigned LineStart, ColumnStart, LineEnd, ColumnEnd;
   RegionKind Kind;
+  /// \brief A flag that is set to true when there is already code before
+  /// this region on the same line.
+  /// This is useful to accurately compute the execution counts for a line.
+  bool HasCodeBefore;
 
   CounterMappingRegion(Counter Count, unsigned FileID, unsigned LineStart,
                        unsigned ColumnStart, unsigned LineEnd,
-                       unsigned ColumnEnd, RegionKind Kind = CodeRegion)
+                       unsigned ColumnEnd, bool HasCodeBefore = false,
+                       RegionKind Kind = CodeRegion)
       : Count(Count), FileID(FileID), ExpandedFileID(0), LineStart(LineStart),
         ColumnStart(ColumnStart), LineEnd(LineEnd), ColumnEnd(ColumnEnd),
-        Kind(Kind) {}
+        Kind(Kind), HasCodeBefore(HasCodeBefore) {}
 
   bool operator<(const CounterMappingRegion &Other) const {
     if (FileID != Other.FileID)

Modified: llvm/trunk/lib/ProfileData/CoverageMappingReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/CoverageMappingReader.cpp?rev=214740&r1=214739&r2=214740&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/CoverageMappingReader.cpp (original)
+++ llvm/trunk/lib/ProfileData/CoverageMappingReader.cpp Mon Aug  4 13:00:51 2014
@@ -170,13 +170,17 @@ std::error_code RawCoverageMappingReader
     }
 
     // Read the source range.
-    uint64_t LineStartDelta, ColumnStart, NumLines, ColumnEnd;
+    uint64_t LineStartDelta, CodeBeforeColumnStart, NumLines, ColumnEnd;
     if (auto Err =
             readIntMax(LineStartDelta, std::numeric_limits<unsigned>::max()))
       return Err;
-    if (auto Err =
-            readIntMax(ColumnStart, std::numeric_limits<unsigned>::max()))
+    if (auto Err = readULEB128(CodeBeforeColumnStart))
       return Err;
+    bool HasCodeBefore = CodeBeforeColumnStart & 1;
+    uint64_t ColumnStart = CodeBeforeColumnStart >>
+                           CounterMappingRegion::EncodingHasCodeBeforeBits;
+    if (ColumnStart > std::numeric_limits<unsigned>::max())
+      return error(instrprof_error::malformed);
     if (auto Err = readIntMax(NumLines, std::numeric_limits<unsigned>::max()))
       return Err;
     if (auto Err = readIntMax(ColumnEnd, std::numeric_limits<unsigned>::max()))
@@ -194,9 +198,9 @@ std::error_code RawCoverageMappingReader
       ColumnStart = 1;
       ColumnEnd = std::numeric_limits<unsigned>::max();
     }
-    MappingRegions.push_back(
-        CounterMappingRegion(C, InferredFileID, LineStart, ColumnStart,
-                             LineStart + NumLines, ColumnEnd, Kind));
+    MappingRegions.push_back(CounterMappingRegion(
+        C, InferredFileID, LineStart, ColumnStart, LineStart + NumLines,
+        ColumnEnd, HasCodeBefore, Kind));
     MappingRegions.back().ExpandedFileID = ExpandedFileID;
   }
   return success();

Modified: llvm/trunk/lib/ProfileData/CoverageMappingWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/CoverageMappingWriter.cpp?rev=214740&r1=214739&r2=214740&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/CoverageMappingWriter.cpp (original)
+++ llvm/trunk/lib/ProfileData/CoverageMappingWriter.cpp Mon Aug  4 13:00:51 2014
@@ -181,7 +181,11 @@ void CoverageMappingWriter::write(raw_os
     }
     assert(I.LineStart >= PrevLineStart);
     encodeULEB128(I.LineStart - PrevLineStart, OS);
-    encodeULEB128(I.ColumnStart, OS);
+    uint64_t CodeBeforeColumnStart =
+        uint64_t(I.HasCodeBefore) |
+        (uint64_t(I.ColumnStart)
+         << CounterMappingRegion::EncodingHasCodeBeforeBits);
+    encodeULEB128(CodeBeforeColumnStart, OS);
     assert(I.LineEnd >= I.LineStart);
     encodeULEB128(I.LineEnd - I.LineStart, OS);
     encodeULEB128(I.ColumnEnd, OS);





More information about the llvm-commits mailing list