P4C
The P4 Compiler
Loading...
Searching...
No Matches
P4::EBPF::CodeGenInspector Class Reference

#include <codeGen.h>

Inheritance diagram for P4::EBPF::CodeGenInspector:
[legend]

Public Member Functions

 CodeGenInspector (P4::ReferenceMap *refMap, P4::TypeMap *typeMap)
 precedence of current IR::Operation
 
bool comparison (const IR::Operation_Relation *comp)
 
void copyPointerVariables (CodeGenInspector *other)
 
void copySubstitutions (CodeGenInspector *other)
 
void emitAndConvertByteOrder (const IR::Expression *expr, cstring byte_order)
 
void emitAssignStatement (const IR::Type *ltype, const IR::Expression *lexpr, cstring lpath, const IR::Expression *rexpr)
 
void emitTCAssignmentEndianessConversion (const IR::Expression *lexpr, const IR::Expression *rexpr)
 
void emitTCBinaryOperation (const IR::Operation_Binary *b, bool isScalar)
 
bool isPointerVariable (cstring name)
 
bool notSupported (const IR::Expression *expression)
 
bool preorder (const IR::ArrayIndex *a) override
 
bool preorder (const IR::AssignmentStatement *s) override
 
bool preorder (const IR::BlockStatement *s) override
 
bool preorder (const IR::BoolLiteral *b) override
 
bool preorder (const IR::Cast *c) override
 
bool preorder (const IR::Constant *expression) override
 
bool preorder (const IR::Declaration_Variable *decl) override
 
bool preorder (const IR::EmptyStatement *s) override
 
bool preorder (const IR::Equ *e) override
 
bool preorder (const IR::ExitStatement *s) override
 This is correct only after inlining.
 
bool preorder (const IR::Expression *expression) override
 
bool preorder (const IR::IfStatement *s) override
 
bool preorder (const IR::ListExpression *expression) override
 
bool preorder (const IR::Mask *expression) override
 
bool preorder (const IR::Member *e) override
 
bool preorder (const IR::MethodCallExpression *expression) override
 
bool preorder (const IR::MethodCallStatement *s) override
 
bool preorder (const IR::Mux *a) override
 
bool preorder (const IR::Neq *e) override
 
bool preorder (const IR::Operation_Binary *b) override
 
bool preorder (const IR::Operation_Unary *u) override
 
bool preorder (const IR::Path *path) override
 
bool preorder (const IR::PathExpression *expression) override
 
bool preorder (const IR::Range *expression) override
 
bool preorder (const IR::ReturnStatement *s) override
 
bool preorder (const IR::Slice *expression) override
 
bool preorder (const IR::StringLiteral *expression) override
 
bool preorder (const IR::StructExpression *expr) override
 
bool preorder (const IR::Type_Enum *type) override
 
bool preorder (const IR::Type_Typedef *type) override
 
void setBuilder (CodeBuilder *builder)
 
void substitute (const IR::Parameter *p, const IR::Parameter *with)
 
void useAsPointerVariable (cstring name)
 
void widthCheck (const IR::Node *node) const
 
- Public Member Functions inherited from P4::Inspector
const IR::Nodeapply_visitor (const IR::Node *, const char *name=0) override
 
profile_t init_apply (const IR::Node *root) override
 
virtual void loop_revisit (const IR::Node *)
 
virtual void postorder (const IR::Node *)
 
virtual bool preorder (const IR::Node *)
 
virtual void revisit (const IR::Node *)
 
void revisit_visited ()
 
bool visit_in_progress (const IR::Node *n) const
 
void visitAgain () const override
 
void visitOnce () const override
 
- Public Member Functions inherited from P4::Visitor
virtual bool check_global (cstring)
 
virtual void clear_globals ()
 
virtual Visitorclone () const
 
virtual ControlFlowVisitorcontrolFlowVisitor ()
 
virtual void end_apply ()
 
virtual void end_apply (const IR::Node *root)
 
virtual void erase_global (cstring)
 
template<class T >
const T * findContext () const
 
template<class T >
const T * findContext (const Context *&c) const
 
template<class T >
const T * findOrigCtxt () const
 
template<class T >
const T * findOrigCtxt (const Context *&c) const
 
virtual Visitorflow_clone ()
 
virtual void flow_merge (Visitor &)
 
virtual bool flow_merge_closure (Visitor &)
 
virtual void flow_merge_global_from (cstring)
 
virtual void flow_merge_global_to (cstring)
 
const ContextgetChildContext () const
 
int getChildrenVisited () const
 
const ContextgetContext () const
 
int getContextDepth () const
 
const IR::NodegetCurrentNode () const
 
template<class T >
const T * getCurrentNode () const
 
const IR::NodegetOriginal () const
 
template<class T >
const T * getOriginal () const
 
template<class T >
const T * getParent () const
 
virtual bool has_flow_joins () const
 
profile_t init_apply (const IR::Node *root, const Context *parent_context)
 
bool isInContext (const IR::Node *n) const
 
virtual const char * name () const
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name=0)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name=0)
 
void print_context () const
 
const VisitorsetCalledBy (const Visitor *visitor)
 
void setName (const char *name)
 
void visit (const IR::Node &n, const char *name, int cidx)
 
void visit (const IR::Node &n, const char *name=0)
 
void visit (const IR::Node *&n, const char *name, int cidx)
 
void visit (const IR::Node *&n, const char *name=0)
 
void visit (const IR::Node *const &n, const char *name, int cidx)
 
void visit (const IR::Node *const &n, const char *name=0)
 
void visit (IR::Node &n, const char *name, int cidx)
 
void visit (IR::Node &n, const char *name=0)
 
void visit (IR::Node *&, const char *=0, int=0)
 
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_pointer_v<T>>, class... Args>
void warn (const int kind, const char *format, const T &node, Args &&...args)
 The const ref variant of the above.
 
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args>
void warn (const int kind, const char *format, const T *node, Args &&...args)
 
bool warning_enabled (int warning_kind) const
 

Public Attributes

int expressionPrecedence
 
- Public Attributes inherited from P4::Visitor
const Visitorcalled_by = nullptr
 
cstring internalName
 
SplitFlowVisit_base *& split_link
 
SplitFlowVisit_basesplit_link_mem = nullptr
 

Protected Attributes

std::set< cstringasPointerVariables
 
CodeBuilderbuilder
 
int commentDescriptionDepth = 0
 
P4::ReferenceMaprefMap
 
std::map< const IR::Parameter *, const IR::Parameter * > substitution
 
P4::TypeMaptypeMap
 
- Protected Attributes inherited from P4::Visitor
bool dontForwardChildrenBeforePreorder = false
 
bool joinFlows = false
 
bool visitDagOnce = true
 

Additional Inherited Members

- Public Types inherited from P4::Visitor
typedef Visitor_Context Context
 
- Static Public Member Functions inherited from P4::Visitor
static cstring demangle (const char *)
 
static bool warning_enabled (const Visitor *visitor, int warning_kind)
 
- Protected Member Functions inherited from P4::Visitor
virtual void init_join_flows (const IR::Node *)
 
virtual bool join_flows (const IR::Node *)
 
virtual void post_join_flows (const IR::Node *, const IR::Node *)
 
void visit_children (const IR::Node *, std::function< void()> fn)
 

Detailed Description

Visitor for generating C for EBPF. This visitor is invoked on various subtrees.

Member Data Documentation

◆ asPointerVariables

std::set<cstring> P4::EBPF::CodeGenInspector::asPointerVariables
protected

asPointerVariables stores the list of string expressions that should be emitted as pointer variables.

◆ commentDescriptionDepth

int P4::EBPF::CodeGenInspector::commentDescriptionDepth = 0
protected

Since CodeGenInspector also generates C comments, this variable keeps track of the current comment depth.