P4C
The P4 Compiler
Loading...
Searching...
No Matches
collect_coverable_nodes.h
1/*
2 * SPDX-FileCopyrightText: 2023 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_COLLECT_COVERABLE_NODES_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_COLLECT_COVERABLE_NODES_H_
9
10#include <set>
11
12#include "ir/ir.h"
13#include "ir/visitor.h"
14#include "midend/coverage.h"
15
16#include "backends/p4tools/modules/testgen/lib/execution_state.h"
17
18namespace P4::P4Tools::P4Testgen {
19
21using NodeCache = std::map<const IR::Node *, P4::Coverage::CoverageSet>;
22
28class CoverableNodesScanner : public Inspector {
30 P4::Coverage::CoverageSet coverableNodes;
31
33 std::reference_wrapper<const ExecutionState> state;
34
36 std::set<int> seenParserIds;
37
39 P4::Coverage::CoverageOptions coverageOptions;
40
42 bool preorder(const IR::ParserState *parserState) override;
43 bool preorder(const IR::BaseAssignmentStatement *stmt) override;
44 bool preorder(const IR::MethodCallStatement *stmt) override;
45 bool preorder(const IR::ExitStatement *stmt) override;
46 bool preorder(const IR::MethodCallExpression *call) override;
47
49 bool preorder(const IR::P4Action *act) override;
50
51 public:
52 explicit CoverableNodesScanner(const ExecutionState &state);
53
57
60};
61
62} // namespace P4::P4Tools::P4Testgen
63
64#endif /*BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_COLLECT_COVERABLE_NODES_H_*/
Definition node.h:53
void updateNodeCoverage(const IR::Node *node, P4::Coverage::CoverageSet &nodes)
Definition collect_coverable_nodes.cpp:143
const P4::Coverage::CoverageSet & getCoverableNodes()
Definition collect_coverable_nodes.cpp:139
Represents state of execution after having reached a program point.
Definition execution_state.h:40
std::set< const IR::Node *, SourceIdCmp > CoverageSet
Definition coverage.h:47
Specifies general options and which IR nodes to track with this particular visitor.
Definition coverage.h:31