23class DiscoverFunctionsInlining :
public Inspector,
public ResolutionContext {
24 FunctionsInlineList *toInline;
28 DiscoverFunctionsInlining(FunctionsInlineList *toInline,
P4::TypeMap *typeMap)
29 : toInline(toInline), typeMap(typeMap) {
32 setName(
"DiscoverFunctionsInlining");
35 void postorder(
const IR::MethodCallExpression *mce)
override;
42class FunctionsInliner :
public AbstractInliner<FunctionsInlineList, FunctionsInlineWorkList> {
43 std::unique_ptr<MinimalNameGenerator> nameGen;
46 using ReplacementMap = FunctionsInlineWorkList::ReplacementMap;
48 std::vector<ReplacementMap *> replacementStack;
50 std::unordered_map<const IR::MethodCallExpression *, const IR::Expression *>
60 const IR::Statement *inlineBefore(
const IR::Node *calleeNode,
61 const IR::MethodCallExpression *call,
62 const IR::Statement *before);
65 const ReplacementMap *getReplacementMap()
const;
66 void dumpReplacementMap()
const;
70 FunctionsInliner() =
default;
72 void end_apply(
const IR::Node *node)
override;
73 const IR::Node *preorder(IR::Function *function)
override;
74 const IR::Node *preorder(IR::P4Control *control)
override;
75 const IR::Node *preorder(IR::P4Parser *parser)
override;
76 const IR::Node *preorder(IR::P4Action *action)
override;
77 const IR::Node *preorder(IR::MethodCallStatement *statement)
override;
78 const IR::Node *preorder(IR::MethodCallExpression *expr)
override;
79 const IR::Node *preorder(IR::BaseAssignmentStatement *statement)
override;
80 const IR::Node *preorder(IR::IfStatement *statement)
override;
89 CloneVariableDeclarations() {
90 setName(
"CloneVariableDeclarations");
93 const IR::Node *postorder(IR::Declaration_Variable *declaration)
override {
95 auto result =
new IR::Declaration_Variable(declaration->srcInfo, declaration->getName(),
96 declaration->annotations, declaration->type,
97 declaration->initializer);
98 LOG3(
"Cloned " << dbp(result));
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13