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 LocationSet * writtenLocations (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)
 
Definitions * getDefinitionsAfter (const IR::ParserState *state)
 
ProgramPoint getProgramPoint (const IR::Node *node=nullptr) const
 
const LocationSet * getWrites (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

AllDefinitions * allDefinitions
 
ProgramPoint callingContext
 Definitions after exit statements.
 
Definitions * currentDefinitions
 Result computed by this pass.
 
Definitions * exitDefinitions
 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
 
Definitions * returnedDefinitions
 Before statement currently processed.
 
const StorageMap * storageMap
 
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.