@@ -51,7 +51,7 @@ const IR::Node* HSIndexTransform::postorder(IR::ArrayIndex* curArrayIndex) {
51
51
return curArrayIndex;
52
52
}
53
53
54
- IR::Node* HSIndexSimplifier ::eliminateArrayIndexes (HSIndexFinder& aiFinder,
54
+ IR::Node* HSIndexContretizer ::eliminateArrayIndexes (HSIndexFinder& aiFinder,
55
55
IR::Statement* statement,
56
56
const IR::Expression* expr) {
57
57
if (aiFinder.arrayIndex == nullptr ) {
@@ -94,7 +94,7 @@ IR::Node* HSIndexSimplifier::eliminateArrayIndexes(HSIndexFinder& aiFinder,
94
94
}
95
95
if (expr != nullptr && locals != nullptr ) {
96
96
// Add case for write out of bound.
97
- cstring typeString = expr->type ->node_type_name ();
97
+ cstring typeString = expr->type ->toString ();
98
98
const IR::PathExpression* pathExpr = nullptr ;
99
99
if (generatedVariables->count (typeString) == 0 ) {
100
100
// Add assigment of undefined header.
@@ -120,7 +120,7 @@ IR::Node* HSIndexSimplifier::eliminateArrayIndexes(HSIndexFinder& aiFinder,
120
120
return new IR::BlockStatement (newComponents);
121
121
}
122
122
123
- IR::Node* HSIndexSimplifier ::preorder (IR::AssignmentStatement* assignmentStatement) {
123
+ IR::Node* HSIndexContretizer ::preorder (IR::AssignmentStatement* assignmentStatement) {
124
124
HSIndexFinder aiFinder (locals, refMap, typeMap, generatedVariables);
125
125
assignmentStatement->left ->apply (aiFinder);
126
126
if (aiFinder.arrayIndex == nullptr ) {
@@ -157,12 +157,13 @@ class IsNonConstantArrayIndex : public KeyIsSimple, public Inspector {
157
157
}
158
158
};
159
159
160
- IR::Node* HSIndexSimplifier ::preorder (IR::P4Control* control) {
160
+ IR::Node* HSIndexContretizer ::preorder (IR::P4Control* control) {
161
161
DoSimplifyKey keySimplifier (refMap, typeMap, new IsNonConstantArrayIndex ());
162
162
const auto * controlKeySimplified = control->apply (keySimplifier)->to <IR::P4Control>();
163
163
auto * newControl = controlKeySimplified->clone ();
164
164
IR::IndexedVector<IR::Declaration> newControlLocals;
165
- HSIndexSimplifier hsSimplifier (refMap, typeMap, &newControlLocals, generatedVariables);
165
+ GeneratedVariablesMap blockGeneratedVariables;
166
+ HSIndexContretizer hsSimplifier (refMap, typeMap, &newControlLocals, &blockGeneratedVariables);
166
167
newControl->body = newControl->body ->apply (hsSimplifier)->to <IR::BlockStatement>();
167
168
for (auto * declaration : controlKeySimplified->controlLocals ) {
168
169
if (declaration->is <IR::P4Action>()) {
@@ -175,19 +176,18 @@ IR::Node* HSIndexSimplifier::preorder(IR::P4Control* control) {
175
176
return newControl;
176
177
}
177
178
178
- IR::Node* HSIndexSimplifier ::preorder (IR::P4Parser* parser) {
179
+ IR::Node* HSIndexContretizer ::preorder (IR::P4Parser* parser) {
179
180
prune ();
180
181
return parser;
181
182
}
182
183
183
- IR::Node* HSIndexSimplifier::preorder (IR::BlockStatement* blockStatement) {
184
- GeneratedVariablesMap blockGeneratedVariables;
185
- HSIndexFinder aiFinder (locals, refMap, typeMap, &blockGeneratedVariables);
184
+ IR::Node* HSIndexContretizer::preorder (IR::BlockStatement* blockStatement) {
185
+ HSIndexFinder aiFinder (locals, refMap, typeMap, generatedVariables);
186
186
blockStatement->apply (aiFinder);
187
187
if (aiFinder.arrayIndex == nullptr ) {
188
188
return blockStatement;
189
189
}
190
- HSIndexSimplifier hsSimplifier (refMap, typeMap, locals, &blockGeneratedVariables );
190
+ HSIndexContretizer hsSimplifier (refMap, typeMap, locals, generatedVariables );
191
191
auto * newBlock = blockStatement->clone ();
192
192
IR::IndexedVector<IR::StatOrDecl> newComponents;
193
193
for (auto & component : blockStatement->components ) {
@@ -204,21 +204,21 @@ IR::Node* HSIndexSimplifier::preorder(IR::BlockStatement* blockStatement) {
204
204
return newBlock;
205
205
}
206
206
207
- IR::Node* HSIndexSimplifier ::preorder (IR::IfStatement* ifStatement) {
207
+ IR::Node* HSIndexContretizer ::preorder (IR::IfStatement* ifStatement) {
208
208
HSIndexFinder aiFinder (locals, refMap, typeMap, generatedVariables);
209
209
ifStatement->condition ->apply (aiFinder);
210
210
return eliminateArrayIndexes (aiFinder, ifStatement, nullptr );
211
211
}
212
212
213
- IR::Node* HSIndexSimplifier ::preorder (IR::MethodCallStatement* methodCallStatement) {
213
+ IR::Node* HSIndexContretizer ::preorder (IR::MethodCallStatement* methodCallStatement) {
214
214
HSIndexFinder aiFinder (locals, refMap, typeMap, generatedVariables);
215
215
methodCallStatement->apply (aiFinder);
216
216
// Here we mean that in/out parameter will be replaced by correspondent assignments.
217
217
// In this case no need to consider assignment to undefined value.
218
218
return eliminateArrayIndexes (aiFinder, methodCallStatement, nullptr );
219
219
}
220
220
221
- IR::Node* HSIndexSimplifier ::preorder (IR::SwitchStatement* switchStatement) {
221
+ IR::Node* HSIndexContretizer ::preorder (IR::SwitchStatement* switchStatement) {
222
222
HSIndexFinder aiFinder (locals, refMap, typeMap, generatedVariables);
223
223
switchStatement->expression ->apply (aiFinder);
224
224
return eliminateArrayIndexes (aiFinder, switchStatement, nullptr );
0 commit comments