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

Public Member Functions

 HSIndexContretizer (ReferenceMap *refMap, TypeMap *typeMap, IR::IndexedVector< IR::Declaration > *locals=nullptr, GeneratedVariablesMap *generatedVariables=nullptr)
 
IR::Node * preorder (IR::AssignmentStatement *assignmentStatement) override
 
IR::Node * preorder (IR::BlockStatement *blockStatement) override
 
IR::Node * preorder (IR::IfStatement *ifStatement) override
 
IR::Node * preorder (IR::MethodCallStatement *methodCallStatement) override
 
IR::Node * preorder (IR::P4Control *control) override
 
IR::Node * preorder (IR::P4Parser *parser) override
 
IR::Node * preorder (IR::SwitchStatement *switchStatement) override
 

Protected Member Functions

IR::Node * eliminateArrayIndexes (HSIndexFinder &aiFinder, IR::Statement *statement, const IR::Expression *expr)
 

Detailed Description

This class eliminates all non-concrete indexes of the header stacks in the controls. It generates new variables for all expressions in the header stacks indexes and checks their values for substitution of concrete values. Each new variable is unique in a scope. Restriction : in/out parameters should be replaced by correspondent assignments. Let header h_index { bit<32> index;} header h_stack { bit<32> a;} struct headers { h_stack[2] h; h_index i;} headers hdr; Then the assignment hdr.h[hdr.i] = 1 will be translated into bit<32> hdivr0; hdivr0 = hdr.i; if (hdivr0 == 0) { hdr.h[0] = 1;} else if (hdivr0 == 1){hdr.h[1] = 1;}