|
|
| 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 |
| |
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;}