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