21 std::set<const IR::Parameter *> toDereference;
22 std::vector<cstring> saveAction;
25 std::vector<UBPFRegister *> registersLookups;
27 explicit UBPFControlBodyTranslator(
const UBPFControl *control);
33 bool preorder(
const IR::PathExpression *expression)
override;
34 bool preorder(
const IR::MethodCallStatement *s)
override;
35 bool preorder(
const IR::MethodCallExpression *expression)
override;
36 bool preorder(
const IR::BaseAssignmentStatement *a)
override {
return notSupported(a); }
37 bool preorder(
const IR::AssignmentStatement *a)
override;
38 bool preorder(
const IR::BlockStatement *s)
override;
39 bool preorder(
const IR::ExitStatement *)
override;
40 bool preorder(
const IR::ReturnStatement *)
override;
41 bool preorder(
const IR::IfStatement *statement)
override;
42 bool preorder(
const IR::SwitchStatement *statement)
override;
43 bool preorder(
const IR::Operation_Binary *b)
override;
44 bool comparison(
const IR::Operation_Relation *b);
45 bool preorder(
const IR::Member *expression)
override;
47 void emitAssignmentStatement(
const IR::AssignmentStatement *a);
48 bool emitRegisterRead(
const IR::AssignmentStatement *a,
const IR::MethodCallExpression *method);
54 const IR::ControlBlock *controlBlock;
55 const IR::Parameter *headers;
56 const IR::Parameter *parserHeaders;
61 std::set<const IR::Parameter *> toDereference;
62 std::map<cstring, UBPFTable *> tables;
63 std::map<cstring, UBPFRegister *> registers;
65 UBPFControl(
const UBPFProgram *program,
const IR::ControlBlock *block,
66 const IR::Parameter *parserHeaders);
76 auto result = ::P4::get(tables, name);
77 BUG_CHECK(result !=
nullptr,
"No table named %1%", name);
82 auto result = ::P4::get(registers, name);
83 BUG_CHECK(result !=
nullptr,
"No register named %1%", name);
Definition ebpfControl.h:28
Definition ubpfControl.h:18