P4C
The P4 Compiler
Loading...
Searching...
No Matches
core/program_info.h
1/*
2 * SPDX-FileCopyrightText: 2022 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_PROGRAM_INFO_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_PROGRAM_INFO_H_
9
10#include <cstddef>
11#include <optional>
12
13#include "backends/p4tools/common/compiler/reachability.h"
14#include "backends/p4tools/common/lib/arch_spec.h"
15#include "ir/ir.h"
16#include "lib/castable.h"
17#include "lib/rtti.h"
18#include "midend/coverage.h"
19
20#include "backends/p4tools/modules/testgen/core/compiler_result.h"
21#include "backends/p4tools/modules/testgen/lib/concolic.h"
22#include "backends/p4tools/modules/testgen/lib/continuation.h"
23
24namespace P4::P4Tools::P4Testgen {
25
27class ProgramInfo : public ICastable {
28 private:
31 std::reference_wrapper<const TestgenCompilerResult> compilerResult;
32
33 protected:
34 explicit ProgramInfo(const TestgenCompilerResult &compilerResult);
35
39
41 std::vector<Continuation::Command> pipelineSequence;
42
44 std::optional<const IR::Expression *> targetConstraints = std::nullopt;
45
48
49 public:
50 ProgramInfo(const ProgramInfo &) = default;
51
52 ProgramInfo(ProgramInfo &&) = default;
53
54 ProgramInfo &operator=(const ProgramInfo &) = default;
55
56 ProgramInfo &operator=(ProgramInfo &&) = default;
57
58 ~ProgramInfo() override = default;
59
63 // The arch map needs to be public to be subclassed.
65 [[nodiscard]] virtual const ArchSpec &getArchSpec() const = 0;
66
68 [[nodiscard]] const std::vector<Continuation::Command> *getPipelineSequence() const;
69
72 [[nodiscard]] std::optional<const IR::Expression *> getTargetConstraints() const;
73
75 [[nodiscard]] virtual const IR::StateVariable &getTargetInputPortVar() const = 0;
76
78 [[nodiscard]] virtual const IR::StateVariable &getTargetOutputPortVar() const = 0;
79
82 [[nodiscard]] virtual const IR::Expression *dropIsActive() const = 0;
83
87 virtual const IR::Expression *createTargetUninitialized(const IR::Type *type,
88 bool forceTaint) const;
89
91 [[nodiscard]] const P4::Coverage::CoverageSet &getCoverableNodes() const;
92
94 [[nodiscard]] const ConcolicMethodImpls *getConcolicMethodImpls() const;
95
96 // @returns the width of the parser error for this specific target.
97 [[nodiscard]] virtual const IR::Type_Bits *getParserErrorType() const = 0;
98
101 [[nodiscard]] cstring getCanonicalBlockName(cstring programBlockName) const;
102
105 [[nodiscard]] virtual const TestgenCompilerResult &getCompilerResult() const;
106
108 [[nodiscard]] const IR::P4Program &getP4Program() const;
109
111 [[nodiscard]] const NodesCallGraph &getCallGraph() const;
112
119 void produceCopyInOutCall(const IR::Parameter *param, size_t paramIdx,
120 const ArchSpec::ArchMember *archMember,
121 std::vector<Continuation::Command> *copyIns,
122 std::vector<Continuation::Command> *copyOuts) const;
123
124 DECLARE_TYPEINFO(ProgramInfo);
125};
126
127} // namespace P4::P4Tools::P4Testgen
128
129#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_PROGRAM_INFO_H_ */
Definition castable.h:27
Specifies a canonical representation of the target pipeline as documented in P4 code.
Definition p4tools/common/lib/arch_spec.h:19
An ArchMember represents a construct in the pipe. It has a name and parameters.
Definition p4tools/common/lib/arch_spec.h:22
Encapsulates a set of concolic method implementations.
Definition lib/concolic.h:39
ordered_map< cstring, cstring > blockMap
Maps the programmable blocks in the P4 program to their canonical counterpart.
Definition core/program_info.h:47
const P4::Coverage::CoverageSet & getCoverableNodes() const
Getter to access coverableNodes.
Definition core/program_info.cpp:39
std::optional< const IR::Expression * > targetConstraints
The constraints imposed by the target.
Definition core/program_info.h:44
virtual const IR::Expression * dropIsActive() const =0
virtual const IR::StateVariable & getTargetOutputPortVar() const =0
std::vector< Continuation::Command > pipelineSequence
The execution sequence of the P4 program.
Definition core/program_info.h:41
virtual const IR::Expression * createTargetUninitialized(const IR::Type *type, bool forceTaint) const
Definition core/program_info.cpp:27
virtual const ArchSpec & getArchSpec() const =0
const NodesCallGraph & getCallGraph() const
Definition core/program_info.cpp:47
void produceCopyInOutCall(const IR::Parameter *param, size_t paramIdx, const ArchSpec::ArchMember *archMember, std::vector< Continuation::Command > *copyIns, std::vector< Continuation::Command > *copyOuts) const
Definition core/program_info.cpp:71
ConcolicMethodImpls concolicMethodImpls
Definition core/program_info.h:38
const std::vector< Continuation::Command > * getPipelineSequence() const
Definition core/program_info.cpp:55
const IR::P4Program & getP4Program() const
Definition core/program_info.cpp:45
cstring getCanonicalBlockName(cstring programBlockName) const
Definition core/program_info.cpp:63
virtual const TestgenCompilerResult & getCompilerResult() const
Definition core/program_info.cpp:43
std::optional< const IR::Expression * > getTargetConstraints() const
Definition core/program_info.cpp:59
virtual const IR::StateVariable & getTargetInputPortVar() const =0
const ConcolicMethodImpls * getConcolicMethodImpls() const
Definition core/program_info.cpp:51
Extends the CompilerResult with the associated P4RuntimeApi.
Definition modules/testgen/core/compiler_result.h:17
Definition cstring.h:85
Definition ordered_map.h:32
std::set< const IR::Node *, SourceIdCmp > CoverageSet
Definition coverage.h:47