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

Public Member Functions

 DoRemoveExits (ReferenceMap *refMap, TypeMap *typeMap)
 
const IR::Node * preorder (IR::AssignmentStatement *statement) override
 
const IR::Node * preorder (IR::BlockStatement *statement) override
 
const IR::Node * preorder (IR::ExitStatement *action) override
 
const IR::Node * preorder (IR::IfStatement *statement) override
 
const IR::Node * preorder (IR::MethodCallStatement *statement) override
 
const IR::Node * preorder (IR::P4Action *action) override
 
const IR::Node * preorder (IR::P4Control *control) override
 
const IR::Node * preorder (IR::P4Table *table) override
 
const IR::Node * preorder (IR::SwitchStatement *statement) override
 
- Public Member Functions inherited from P4::DoRemoveReturns
 DoRemoveReturns (P4::ReferenceMap *refMap, cstring varName="hasReturned", cstring retValName="retval")
 
const IR::Node * preorder (IR::BlockStatement *statement) override
 
const IR::Node * preorder (IR::ExitStatement *statement) override
 
const IR::Node * preorder (IR::Function *function) override
 
const IR::Node * preorder (IR::IfStatement *statement) override
 
const IR::Node * preorder (IR::P4Action *action) override
 
const IR::Node * preorder (IR::P4Control *control) override
 
const IR::Node * preorder (IR::P4Parser *parser) override
 
const IR::Node * preorder (IR::ReturnStatement *statement) override
 
const IR::Node * preorder (IR::SwitchStatement *statement) override
 

Additional Inherited Members

- Protected Member Functions inherited from P4::DoRemoveReturns
TernaryBool hasReturned ()
 
void pop ()
 
void push ()
 
void set (TernaryBool r)
 
- Protected Attributes inherited from P4::DoRemoveReturns
P4::ReferenceMaprefMap
 
IR::ID returnedValue
 
IR::ID returnVar
 
cstring retValName
 
std::vector< TernaryBool > stack
 
cstring variableName
 

Detailed Description

This visitor removes "exit" calls. It is significantly more involved than return removal, since an exit in an action causes the calling control to terminate. This pass assumes that each statement in a control block can exit only once – so it should be run after a pass that enforces this, e.g., SideEffectOrdering. (E.g., it does not handle: if (t1.apply().hit && t2.apply().hit) { ... } It also assumes that there are no global actions and that action calls have been inlined.