xref: /llvm-project/clang/lib/CodeGen/MCDCState.h (revision 71f8b441ed6a944ceb4530b49e8588dcbb1e0066)
15c8985e7SNAKAMURA Takumi //===---- MCDCState.h - Per-Function MC/DC state ----------------*- C++ -*-===//
25c8985e7SNAKAMURA Takumi //
35c8985e7SNAKAMURA Takumi // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45c8985e7SNAKAMURA Takumi // See https://llvm.org/LICENSE.txt for license information.
55c8985e7SNAKAMURA Takumi // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65c8985e7SNAKAMURA Takumi //
75c8985e7SNAKAMURA Takumi //===----------------------------------------------------------------------===//
85c8985e7SNAKAMURA Takumi //
95c8985e7SNAKAMURA Takumi //  Per-Function MC/DC state for PGO
105c8985e7SNAKAMURA Takumi //
115c8985e7SNAKAMURA Takumi //===----------------------------------------------------------------------===//
125c8985e7SNAKAMURA Takumi 
135c8985e7SNAKAMURA Takumi #ifndef LLVM_CLANG_LIB_CODEGEN_MCDCSTATE_H
145c8985e7SNAKAMURA Takumi #define LLVM_CLANG_LIB_CODEGEN_MCDCSTATE_H
155c8985e7SNAKAMURA Takumi 
165c8985e7SNAKAMURA Takumi #include "llvm/ADT/DenseMap.h"
17a9883739SDmitry Chernenkov #include "llvm/ADT/SmallVector.h"
185c8985e7SNAKAMURA Takumi #include "llvm/ProfileData/Coverage/MCDCTypes.h"
195c8985e7SNAKAMURA Takumi 
205932f3f8SHaojian Wu namespace clang {
215932f3f8SHaojian Wu class Stmt;
225932f3f8SHaojian Wu } // namespace clang
235932f3f8SHaojian Wu 
245c8985e7SNAKAMURA Takumi namespace clang::CodeGen::MCDC {
255c8985e7SNAKAMURA Takumi 
265c8985e7SNAKAMURA Takumi using namespace llvm::coverage::mcdc;
275c8985e7SNAKAMURA Takumi 
285c8985e7SNAKAMURA Takumi /// Per-Function MC/DC state
295c8985e7SNAKAMURA Takumi struct State {
30*71f8b441SNAKAMURA Takumi   unsigned BitmapBits = 0;
311f6a347cSNAKAMURA Takumi 
321f6a347cSNAKAMURA Takumi   struct Decision {
331f6a347cSNAKAMURA Takumi     unsigned BitmapIdx;
34*71f8b441SNAKAMURA Takumi     llvm::SmallVector<std::array<int, 2>> Indices;
351f6a347cSNAKAMURA Takumi   };
361f6a347cSNAKAMURA Takumi 
371f6a347cSNAKAMURA Takumi   llvm::DenseMap<const Stmt *, Decision> DecisionByStmt;
381f6a347cSNAKAMURA Takumi 
391f6a347cSNAKAMURA Takumi   struct Branch {
401f6a347cSNAKAMURA Takumi     ConditionID ID;
41*71f8b441SNAKAMURA Takumi     const Stmt *DecisionStmt;
421f6a347cSNAKAMURA Takumi   };
431f6a347cSNAKAMURA Takumi 
441f6a347cSNAKAMURA Takumi   llvm::DenseMap<const Stmt *, Branch> BranchByStmt;
455c8985e7SNAKAMURA Takumi };
465c8985e7SNAKAMURA Takumi 
475c8985e7SNAKAMURA Takumi } // namespace clang::CodeGen::MCDC
485c8985e7SNAKAMURA Takumi 
495c8985e7SNAKAMURA Takumi #endif // LLVM_CLANG_LIB_CODEGEN_MCDCSTATE_H
50