[llvm] [coverage] Add option for keeping mappings order (PR #91600)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 28 06:24:58 PDT 2024
https://github.com/Lambdaris updated https://github.com/llvm/llvm-project/pull/91600
>From 502b3626de13249de99c798bbfef45a47b50ee38 Mon Sep 17 00:00:00 2001
From: Lambdaris <lambdaris at outlook.com>
Date: Thu, 9 May 2024 21:35:33 +0800
Subject: [PATCH] [coverage] Allow llvm not to change mappings order
---
.../Coverage/CoverageMappingWriter.h | 6 ++--
.../Coverage/CoverageMappingWriter.cpp | 35 ++++++++++---------
2 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
index 02848deaba9db..00363a25e8806 100644
--- a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
+++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
@@ -42,13 +42,15 @@ class CoverageMappingWriter {
ArrayRef<unsigned> VirtualFileMapping;
ArrayRef<CounterExpression> Expressions;
MutableArrayRef<CounterMappingRegion> MappingRegions;
+ bool KeepMappingOrder;
public:
CoverageMappingWriter(ArrayRef<unsigned> VirtualFileMapping,
ArrayRef<CounterExpression> Expressions,
- MutableArrayRef<CounterMappingRegion> MappingRegions)
+ MutableArrayRef<CounterMappingRegion> MappingRegions,
+ bool KeepMappingOrder = false)
: VirtualFileMapping(VirtualFileMapping), Expressions(Expressions),
- MappingRegions(MappingRegions) {}
+ MappingRegions(MappingRegions), KeepMappingOrder(KeepMappingOrder) {}
/// Write encoded coverage mapping data to the given output stream.
void write(raw_ostream &OS);
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp
index adfd22804356e..974138de35900 100644
--- a/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp
+++ b/llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp
@@ -161,22 +161,25 @@ void CoverageMappingWriter::write(raw_ostream &OS) {
// Sort the regions in an ascending order by the file id and the starting
// location. Sort by region kinds to ensure stable order for tests.
- llvm::stable_sort(MappingRegions, [](const CounterMappingRegion &LHS,
- const CounterMappingRegion &RHS) {
- if (LHS.FileID != RHS.FileID)
- return LHS.FileID < RHS.FileID;
- if (LHS.startLoc() != RHS.startLoc())
- return LHS.startLoc() < RHS.startLoc();
-
- // Put `Decision` before `Expansion`.
- auto getKindKey = [](CounterMappingRegion::RegionKind Kind) {
- return (Kind == CounterMappingRegion::MCDCDecisionRegion
- ? 2 * CounterMappingRegion::ExpansionRegion - 1
- : 2 * Kind);
- };
-
- return getKindKey(LHS.Kind) < getKindKey(RHS.Kind);
- });
+ if (!KeepMappingOrder) {
+ llvm::stable_sort(MappingRegions, [](const CounterMappingRegion &LHS,
+ const CounterMappingRegion &RHS) {
+ if (LHS.FileID != RHS.FileID)
+ return LHS.FileID < RHS.FileID;
+
+ if (LHS.startLoc() != RHS.startLoc())
+ return LHS.startLoc() < RHS.startLoc();
+
+ // Put `Decision` before `Expansion`.
+ auto getKindKey = [](CounterMappingRegion::RegionKind Kind) {
+ return (Kind == CounterMappingRegion::MCDCDecisionRegion
+ ? 2 * CounterMappingRegion::ExpansionRegion - 1
+ : 2 * Kind);
+ };
+
+ return getKindKey(LHS.Kind) < getKindKey(RHS.Kind);
+ });
+ }
// Write out the fileid -> filename mapping.
encodeULEB128(VirtualFileMapping.size(), OS);
More information about the llvm-commits
mailing list