P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
P4::ComputeWriteSet Class Reference
Inheritance diagram for P4::ComputeWriteSet:

Public Member Functions

 ComputeWriteSet (AllDefinitions *allDefinitions)
 
bool preorder (const IR::ArrayIndex *expression) override
 
bool preorder (const IR::AssignmentStatement *statement) override
 
bool preorder (const IR::BlockStatement *statement) override
 
bool preorder (const IR::DefaultExpression *expression) override
 
bool preorder (const IR::EmptyStatement *statement) override
 
bool preorder (const IR::ExitStatement *statement) override
 
bool preorder (const IR::Expression *expression) override
 For expressions we maintain the write-set in the writes std::map.
 
bool preorder (const IR::Function *function) override
 
bool preorder (const IR::HeaderStackExpression *expression) override
 
bool preorder (const IR::IfStatement *statement) override
 
bool preorder (const IR::InvalidHeader *expression) override
 
bool preorder (const IR::InvalidHeaderUnion *expression) override
 
bool preorder (const IR::ListExpression *expression) override
 
bool preorder (const IR::Literal *expression) override
 
bool preorder (const IR::Member *expression) override
 
bool preorder (const IR::MethodCallExpression *expression) override
 
bool preorder (const IR::MethodCallStatement *statement) override
 
bool preorder (const IR::Mux *expression) override
 
bool preorder (const IR::Operation_Binary *expression) override
 
bool preorder (const IR::Operation_Unary *expression) override
 
bool preorder (const IR::P4Action *action) override
 
bool preorder (const IR::P4Control *control) override
 
bool preorder (const IR::P4ListExpression *expression) override
 
bool preorder (const IR::P4Parser *parser) override
 
bool preorder (const IR::P4Table *table) override
 
bool preorder (const IR::PathExpression *expression) override
 
bool preorder (const IR::ReturnStatement *statement) override
 
bool preorder (const IR::SelectExpression *expression) override
 
bool preorder (const IR::Slice *expression) override
 
bool preorder (const IR::StructExpression *expression) override
 
bool preorder (const IR::SwitchStatement *statement) override
 
bool preorder (const IR::TypeNameExpression *expression) override
 
const LocationSetwrittenLocations (const IR::Expression *expression)
 
- Public Member Functions inherited from IHasDbPrint
void print () const
 

Protected Member Functions

 ComputeWriteSet (const ComputeWriteSet *source, ProgramPoint context, Definitions *definitions)
 
void dbprint (std::ostream &out) const override
 
void end_apply () override
 
void enterScope (const IR::ParameterList *parameters, const IR::IndexedVector< IR::Declaration > *locals, ProgramPoint startPoint, bool clear=true)
 
void exitScope (const IR::ParameterList *parameters, const IR::IndexedVector< IR::Declaration > *locals)
 
void expressionWrites (const IR::Expression *expression, const LocationSet *loc)
 
DefinitionsgetDefinitionsAfter (const IR::ParserState *state)
 
ProgramPoint getProgramPoint (const IR::Node *node=nullptr) const
 
const LocationSetgetWrites (const IR::Expression *expression) const
 
profile_t init_apply (const IR::Node *root) override
 
bool setDefinitions (Definitions *defs, const IR::Node *who=nullptr, bool overwrite=false)
 
void visitVirtualMethods (const IR::IndexedVector< IR::Declaration > &locals)
 Statements and other control structures.
 

Protected Attributes

AllDefinitionsallDefinitions
 
ProgramPoint callingContext
 Definitions after exit statements.
 
DefinitionscurrentDefinitions
 Result computed by this pass.
 
DefinitionsexitDefinitions
 Definitions after return statements.
 
bool lhs
 if true we are processing an expression on the lhs of an assignment
 
AllocTrace memuse
 True if we are analyzing a virtual method.
 
alloc_trace_cb_t nested_trace
 
DefinitionsreturnedDefinitions
 Before statement currently processed.
 
const StorageMapstorageMap
 
bool virtualMethod
 
hvec_map< const IR::Expression *, const LocationSet * > writes
 For each expression the location set it writes.
 

Static Protected Attributes

static int nest_count = 0
 

Detailed Description

Computes the write set for each expression and statement.

This pass is run for each parser and control separately. It controls precisely the visit order — to simulate a simbolic execution of the program.

Precondition
Must be executed after variable initializers have been removed.

Constructor & Destructor Documentation

◆ ComputeWriteSet()

P4::ComputeWriteSet::ComputeWriteSet ( const ComputeWriteSet * source,
ProgramPoint context,
Definitions * definitions )
inlineprotected

Creates new visitor, but with same underlying data structures. Needed to visit some program fragments repeatedly.

Member Function Documentation

◆ dbprint()

void P4::ComputeWriteSet::dbprint ( std::ostream & out) const
inlineoverrideprotectedvirtual

Implements IHasDbPrint.