P4C
The P4 Compiler
Loading...
Searching...
No Matches
P4::TC::ConvertToBackendIR Class Reference

#include <backend.h>

Inheritance diagram for P4::TC::ConvertToBackendIR:
[legend]

Classes

struct  ExternBlock
 
struct  ExternInstance
 

Public Types

enum  CounterType { PACKETS , BYTES , PACKETS_AND_BYTES }
 
- Public Types inherited from P4::Visitor
typedef Visitor_Context Context
 

Public Member Functions

 ConvertToBackendIR (const IR::ToplevelBlock *tlb, IR::TCPipeline *pipe, P4::ReferenceMap *refMap, P4::TypeMap *typeMap, TCOptions &options)
 
void addExternTypeInstance (const IR::Declaration_Instance *decl, IR::TCExternInstance *tcExternInstance, cstring eName)
 
bool checkParameterDirection (const IR::TCAction *tcAction)
 
cstring externalName (const IR::IDeclaration *declaration) const
 
const IR::Expression * ExtractExpFromCast (const IR::Expression *exp)
 
unsigned int findMappedKernelMeta (const IR::Member *mem)
 
unsigned GetAccessNumericValue (std::string_view access)
 
unsigned getActionId (cstring actionName) const
 
std::pair< cstring, cstring > * GetAnnotatedAccessPath (const IR::Annotation *anno)
 
cstring getControlPathKeyAnnotation (const IR::StructField *field)
 
cstring getExternId (cstring externName) const
 
unsigned getExternInstanceId (cstring externName, cstring instanceName) const
 
cstring getPipelineName ()
 
unsigned getTableId (cstring tableName) const
 
unsigned getTableKeysize (unsigned tableId) const
 
unsigned getTcType (const IR::StringLiteral *sl)
 
cstring HandleTableAccessPermission (const IR::P4Table *t)
 
safe_vector< const IR::TCKey * > HandleTypeNameStructField (const IR::StructField *field, const IR::Type_Extern *extn, const IR::Declaration_Instance *decl, int &kId, cstring annoName)
 
bool hasExecuteMethod (const IR::Type_Extern *extn)
 
bool isDuplicateAction (const IR::P4Action *action)
 
bool isDuplicateOrNoAction (const IR::P4Action *action)
 
bool isPnaMainInputMeta (const IR::Member *mem)
 
bool isPnaMainOutputMeta (const IR::Member *mem)
 
bool isPnaParserMeta (const IR::Member *mem)
 
void postorder (const IR::Declaration_Instance *d) override
 
void postorder (const IR::P4Action *a) override
 
void postorder (const IR::P4Program *p) override
 
void postorder (const IR::P4Table *t) override
 
void postorder (const IR::Type_Struct *ts) override
 
bool preorder (const IR::P4Program *p) override
 
safe_vector< const IR::TCKey * > processCounterControlPathKeys (const IR::Type_Struct *extern_control_path, const IR::Type_Extern *extn, const IR::Declaration_Instance *decl)
 
safe_vector< const IR::TCKey * > processExternConstructor (const IR::Type_Extern *extn, const IR::Declaration_Instance *decl, struct ExternInstance *instance)
 
safe_vector< const IR::TCKey * > processExternControlPath (const IR::Type_Extern *extn, const IR::Declaration_Instance *decl, cstring eName)
 
cstring processExternPermission (const IR::Type_Extern *ext)
 
void setPipelineName ()
 
CounterType toCounterType (const int type)
 
void updateAddOnMissTable (const IR::P4Table *t)
 
void updateConstEntries (const IR::P4Table *t, IR::TCTable *tdef)
 
void updateDefaultHitAction (const IR::P4Table *t, IR::TCTable *tdef)
 
void updateDefaultMissAction (const IR::P4Table *t, IR::TCTable *tdef)
 
void updateMatchType (const IR::P4Table *t, IR::TCTable *tabledef)
 
void updatePnaDirectCounter (const IR::P4Table *t, IR::TCTable *tabledef, unsigned tentries)
 
void updatePnaDirectMeter (const IR::P4Table *t, IR::TCTable *tabledef, unsigned tentries)
 
void updateTimerProfiles (IR::TCTable *tabledef)
 
- 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

unsigned int actionCount = 0
 
ordered_map< unsigned, cstringactionIDList
 
ordered_map< cstring, const IR::P4Action * > actions
 
safe_vector< const IR::P4Table * > add_on_miss_tables
 
ordered_map< cstring, const IR::Type_Struct * > ControlStructPerExtern
 
unsigned int externCount = 0
 
ordered_map< cstring, struct ExternBlock * > externsInfo
 
unsigned int labelCount = 0
 
cstring mainParserName = nullptr
 
unsigned int metadataCount = 0
 
TCOptionsoptions
 
cstring pipelineName = nullptr
 
P4::ReferenceMaprefMap
 
unsigned int tableCount = 0
 
ordered_map< unsigned, cstringtableIDList
 
ordered_map< unsigned, unsigned > tableKeysizeList
 
ordered_map< cstring, std::pair< cstring, cstring > * > tablePermissions
 
IR::TCPipeline * tcPipeline
 
const IR::ToplevelBlock * tlb
 
P4::TypeMaptypeMap
 
- Public Attributes inherited from P4::Visitor
const Visitorcalled_by = nullptr
 
cstring internalName
 
SplitFlowVisit_base *& split_link
 
SplitFlowVisit_basesplit_link_mem = nullptr
 

Additional Inherited Members

- 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)
 
- Protected Attributes inherited from P4::Visitor
bool dontForwardChildrenBeforePreorder = false
 
bool joinFlows = false
 
bool visitDagOnce = true
 

Detailed Description

Backend code generation from midend IR


Class Documentation

◆ P4::TC::ConvertToBackendIR::ExternBlock

struct P4::TC::ConvertToBackendIR::ExternBlock
Class Members
cstring control_name
safe_vector< struct ExternInstance * > eInstance
cstring externId
unsigned no_of_instances
cstring permissions

◆ P4::TC::ConvertToBackendIR::ExternInstance

struct P4::TC::ConvertToBackendIR::ExternInstance
Class Members
unsigned instance_id
cstring instance_name
bool is_num_elements
int num_elements

Member Function Documentation

◆ isPnaParserMeta()

bool P4::TC::ConvertToBackendIR::isPnaParserMeta ( const IR::Member * mem)

This function is used for checking whether given member is PNA Parser metadata