P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
program_info.h
1#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_PROGRAM_INFO_H_
2#define BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_PROGRAM_INFO_H_
3
4#include <cstddef>
5#include <optional>
6#include <vector>
7
8#include "backends/p4tools/common/compiler/reachability.h"
9#include "backends/p4tools/common/lib/arch_spec.h"
10#include "ir/ir.h"
11#include "lib/castable.h"
12#include "lib/rtti.h"
13#include "midend/coverage.h"
14
15#include "backends/p4tools/modules/testgen/core/compiler_target.h"
16#include "backends/p4tools/modules/testgen/lib/concolic.h"
17#include "backends/p4tools/modules/testgen/lib/continuation.h"
18
19namespace P4Tools::P4Testgen {
20
22class ProgramInfo : public ICastable {
23 private:
26 std::reference_wrapper<const TestgenCompilerResult> compilerResult;
27
28 protected:
29 explicit ProgramInfo(const TestgenCompilerResult &compilerResult);
30
34
36 std::vector<Continuation::Command> pipelineSequence;
37
39 std::optional<const IR::Expression *> targetConstraints = std::nullopt;
40
43
44 public:
45 ProgramInfo(const ProgramInfo &) = default;
46
47 ProgramInfo(ProgramInfo &&) = default;
48
49 ProgramInfo &operator=(const ProgramInfo &) = default;
50
51 ProgramInfo &operator=(ProgramInfo &&) = default;
52
53 ~ProgramInfo() override = default;
54
58 // The arch map needs to be public to be subclassed.
60 [[nodiscard]] virtual const ArchSpec &getArchSpec() const = 0;
61
63 [[nodiscard]] const std::vector<Continuation::Command> *getPipelineSequence() const;
64
67 [[nodiscard]] std::optional<const IR::Expression *> getTargetConstraints() const;
68
70 [[nodiscard]] virtual const IR::StateVariable &getTargetInputPortVar() const = 0;
71
73 [[nodiscard]] virtual const IR::StateVariable &getTargetOutputPortVar() const = 0;
74
77 [[nodiscard]] virtual const IR::Expression *dropIsActive() const = 0;
78
82 virtual const IR::Expression *createTargetUninitialized(const IR::Type *type,
83 bool forceTaint) const;
84
86 [[nodiscard]] const P4::Coverage::CoverageSet &getCoverableNodes() const;
87
89 [[nodiscard]] const ConcolicMethodImpls *getConcolicMethodImpls() const;
90
91 // @returns the width of the parser error for this specific target.
92 [[nodiscard]] virtual const IR::Type_Bits *getParserErrorType() const = 0;
93
96 [[nodiscard]] cstring getCanonicalBlockName(cstring programBlockName) const;
97
100 [[nodiscard]] virtual const TestgenCompilerResult &getCompilerResult() const;
101
103 [[nodiscard]] const IR::P4Program &getP4Program() const;
104
106 [[nodiscard]] const NodesCallGraph &getCallGraph() const;
107
114 void produceCopyInOutCall(const IR::Parameter *param, size_t paramIdx,
115 const ArchSpec::ArchMember *archMember,
116 std::vector<Continuation::Command> *copyIns,
117 std::vector<Continuation::Command> *copyOuts) const;
118
119 DECLARE_TYPEINFO(ProgramInfo);
120};
121
122} // namespace P4Tools::P4Testgen
123
124#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_PROGRAM_INFO_H_ */
Definition castable.h:34
Specifies a canonical representation of the target pipeline as documented in P4 code.
Definition arch_spec.h:13
An ArchMember represents a construct in the pipe. It has a name and parameters.
Definition arch_spec.h:16
Definition reachability.h:27
Encapsulates a set of concolic method implementations.
Definition concolic.h:33
Stores target-specific information about a P4 program.
Definition program_info.h:22
const NodesCallGraph & getCallGraph() const
Definition program_info.cpp:43
const ConcolicMethodImpls * getConcolicMethodImpls() const
Definition program_info.cpp:47
const std::vector< Continuation::Command > * getPipelineSequence() const
Definition program_info.cpp:51
virtual const ArchSpec & getArchSpec() const =0
virtual const IR::Expression * dropIsActive() const =0
std::vector< Continuation::Command > pipelineSequence
The execution sequence of the P4 program.
Definition program_info.h:36
std::optional< const IR::Expression * > getTargetConstraints() const
Definition program_info.cpp:55
virtual const IR::StateVariable & getTargetInputPortVar() const =0
cstring getCanonicalBlockName(cstring programBlockName) const
Definition program_info.cpp:59
const P4::Coverage::CoverageSet & getCoverableNodes() const
Getter to access coverableNodes.
Definition program_info.cpp:35
std::optional< const IR::Expression * > targetConstraints
The constraints imposed by the target.
Definition program_info.h:39
ConcolicMethodImpls concolicMethodImpls
Definition program_info.h:33
const IR::P4Program & getP4Program() const
Definition program_info.cpp:41
virtual const IR::Expression * createTargetUninitialized(const IR::Type *type, bool forceTaint) const
Definition program_info.cpp:23
virtual const IR::StateVariable & getTargetOutputPortVar() const =0
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 program_info.cpp:67
ordered_map< cstring, cstring > blockMap
Maps the programmable blocks in the P4 program to their canonical counterpart.
Definition program_info.h:42
virtual const TestgenCompilerResult & getCompilerResult() const
Definition program_info.cpp:39
Extends the CompilerResult with the associated P4RuntimeApi.
Definition compiler_target.h:11
Definition cstring.h:72
Definition ordered_map.h:30
std::set< const IR::Node *, SourceIdCmp > CoverageSet
Definition coverage.h:39