18 friend class HSIndexTransform;
19 friend class HSIndexContretizer;
21 std::shared_ptr<NameGenerator> nameGen;
23 const IR::ArrayIndex *arrayIndex =
nullptr;
24 const IR::PathExpression *newVariable =
nullptr;
25 GeneratedVariablesMap *generatedVariables;
26 std::set<cstring> storedMember;
27 std::list<IR::Member *> dependedMembers;
31 std::shared_ptr<NameGenerator> nameGen,
TypeMap *typeMap,
32 GeneratedVariablesMap *generatedVariables)
36 generatedVariables(generatedVariables) {}
37 void postorder(
const IR::ArrayIndex *curArrayIndex)
override;
40 void addNewVariable();
71 std::shared_ptr<MinimalNameGenerator> nameGen;
73 GeneratedVariablesMap *generatedVariables;
74 size_t expansion = 0, maxExpansion;
79 explicit HSIndexContretizer(
TypeMap *typeMap,
size_t maxExpansion,
80 std::shared_ptr<MinimalNameGenerator> nameGen =
nullptr,
82 GeneratedVariablesMap *generatedVariables =
nullptr)
86 generatedVariables(generatedVariables),
87 maxExpansion(maxExpansion) {
89 if (generatedVariables ==
nullptr) generatedVariables =
new GeneratedVariablesMap();
90 LOG5(
"HSIndexContretizer(" <<
id <<
") maxExpansion = " << maxExpansion);
93 auto rv = Transform::init_apply(node);
96 nameGen = std::make_shared<MinimalNameGenerator>();
97 node->apply(*nameGen);
103 IR::Node *preorder(IR::IfStatement *ifStatement)
override;
104 IR::Node *preorder(IR::BaseAssignmentStatement *assignmentStatement)
override;
105 IR::Node *preorder(IR::BlockStatement *blockStatement)
override;
106 IR::Node *preorder(IR::MethodCallStatement *methodCallStatement)
override;
107 IR::Node *preorder(IR::P4Control *control)
override;
108 IR::Node *preorder(IR::P4Parser *parser)
override;
109 IR::Node *preorder(IR::SwitchStatement *switchStatement)
override;
113 const IR::Expression *expr);
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24