17#ifndef BACKENDS_DPDK_DPDKHELPERS_H_ 
   18#define BACKENDS_DPDK_DPDKHELPERS_H_ 
   21#include "dpdkProgramStructure.h" 
   22#include "frontends/common/constantFolding.h" 
   23#include "frontends/common/resolveReferences/referenceMap.h" 
   24#include "frontends/p4/coreLibrary.h" 
   25#include "frontends/p4/enumInstance.h" 
   26#include "frontends/p4/evaluator/evaluator.h" 
   27#include "frontends/p4/methodInstance.h" 
   28#include "frontends/p4/simplify.h" 
   29#include "frontends/p4/typeMap.h" 
   30#include "frontends/p4/unusedDeclarations.h" 
   32#include "lib/big_int_util.h" 
   34#include "midend/removeComplexExpressions.h" 
   36#define TOSTR_DECLA(NAME) std::ostream &toStr(std::ostream &, IR::NAME *) 
   49const char DirectResourceTableEntryIndex[] = 
"table_entry_index";
 
  121        if (n->
is<IR::LAnd>() || n->
is<IR::LOr>()) {
 
  131        : refMap(refMap), typeMap(typeMap) {}
 
 
  136    void postorder(
const IR::Type_Varbits *type)
 override {
 
  137        LOG3(
"Validating Type_Varbits: " << type);
 
  138        if (type->size % 8 != 0) {
 
  139            ::error(ErrorType::ERR_UNSUPPORTED, 
"%1% varbit width (%2%) not aligned to 8 bits",
 
  140                    type->srcInfo, type->size);
 
 
  150    const IR::P4Parser *parser = 
nullptr;
 
  152    IR::Type_Struct *metadataStruct = 
nullptr;
 
  156    bool checkIfBelongToSameHdrMdStructure(
const IR::Argument *field);
 
  158    cstring getHdrMdStrName(
const IR::Member *mem);
 
  159    bool checkIfConsecutiveHdrMdfields(
const IR::Argument *field);
 
  164        : typemap(typemap), refmap(refmap), structure(structure) {
 
  165        visitDagOnce = 
false;
 
  169        : typemap(typemap), refmap(refmap), structure(structure), metadataStruct(metadataStruct) {
 
  170        visitDagOnce = 
false;
 
  173    void branchingInstructionGeneration(
cstring true_label, 
cstring false_label,
 
  174                                        const IR::Expression *expr);
 
  175    bool preorder(
const IR::AssignmentStatement *a) 
override;
 
  176    bool preorder(
const IR::IfStatement *a) 
override;
 
  177    bool preorder(
const IR::MethodCallStatement *a) 
override;
 
  178    bool preorder(
const IR::SwitchStatement *a) 
override;
 
  180    void add_instr(
const IR::DpdkAsmStatement *s) { instructions.push_back(s); }
 
  182    void process_logical_operation(
const IR::Expression *, 
const IR::Operation_Binary *);
 
  185    void set_parser(
const IR::P4Parser *p) { parser = p; }
 
  186    void set_parent(
const IR::Node *p) { parent = p; }
 
  187    bool handleConstSwitch(
const IR::SwitchStatement *a);
 
 
  192    const std::set<cstring> *process;
 
  195    explicit ProcessControls(
const std::set<cstring> *process) : process(process) {
 
  198    bool convert(
const IR::P4Control *control)
 const {
 
  199        if (process->find(control->name) != process->end()) 
return true;
 
 
 
Definition dpdkHelpers.h:117
 
bool generate(const IR::Expression *, cstring, cstring, bool)
Definition dpdkHelpers.cpp:793
 
Definition dpdkHelpers.h:145
 
void process_relation_operation(const IR::Expression *, const IR::Operation_Relation *)
Definition dpdkHelpers.cpp:31
 
bool preorder(const IR::AssignmentStatement *a) override
Definition dpdkHelpers.cpp:116
 
Only simplify complex expression in ingress/egress.
Definition dpdkHelpers.h:191
 
bool convert(const IR::P4Control *control) const
Definition dpdkHelpers.h:198
 
Definition dpdkHelpers.h:135
 
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
 
Definition backends/common/removeComplexExpressions.h:28
 
Definition dpdk/backend.cpp:36
 
const char PnaMainOutputMetadataOutputPortName[]
Name of the metadata used as output port.
Definition dpdkHelpers.h:48
 
Collect information related to P4 programs targeting dpdk.
Definition dpdkProgramStructure.h:14
 
bool is() const noexcept
Definition rtti.h:216