[llvm] Introduce mcdc::TVIdxBuilder (LLVM side, NFC) (PR #80676)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 26 03:59:24 PDT 2024
================
@@ -223,9 +223,130 @@ Expected<int64_t> CounterMappingContext::evaluate(const Counter &C) const {
return LastPoppedValue;
}
+mcdc::TVIdxBuilder::TVIdxBuilder(const SmallVectorImpl<ConditionIDs> &NextIDs,
+ int Offset)
+ : Indices(NextIDs.size()) {
+ // Construct Nodes and set up each InCount
+ auto N = NextIDs.size();
+ SmallVector<MCDCNode> Nodes(N);
+ for (unsigned ID = 0; ID < N; ++ID) {
+ for (unsigned C = 0; C < 2; ++C) {
+#ifndef NDEBUG
+ Indices[ID][C] = INT_MIN;
+#endif
+ auto NextID = NextIDs[ID][C];
+ Nodes[ID].NextIDs[C] = NextID;
+ if (NextID >= 0)
+ ++Nodes[NextID].InCount;
+ }
+ }
+
+ // Sort key ordered by <-Width, Ord>
----------------
ZhuUx wrote:
I see, if we did not sort them, we can not reduce size of bitmaps effectively since there might be other conditions with `width>1` getting large index.
I'm trying to remove the sort because I find it breaks some nature if the topological relationship of conditions is abnormal (e.g conditions from pattern matching in rust) and generates troubled index maps. I would investigate it more. Thanks!
https://github.com/llvm/llvm-project/pull/80676
More information about the llvm-commits
mailing list