17#ifndef FRONTENDS_P4_FUNCTIONSINLINING_H_
18#define FRONTENDS_P4_FUNCTIONSINLINING_H_
20#include "commonInlining.h"
21#include "frontends/p4/cloner.h"
22#include "frontends/p4/typeChecking/typeChecker.h"
23#include "frontends/p4/unusedDeclarations.h"
28typedef SimpleCallInfo<IR::Node, IR::Statement> FunctionCallInfo;
29typedef SimpleInlineWorkList<IR::Node, IR::Statement, FunctionCallInfo> FunctionsInlineWorkList;
30typedef SimpleInlineList<IR::Node, FunctionCallInfo, FunctionsInlineWorkList> FunctionsInlineList;
40 : toInline(toInline), refMap(refMap), typeMap(typeMap) {
44 setName(
"DiscoverFunctionsInlining");
46 void postorder(
const IR::MethodCallExpression *mce)
override;
56 typedef std::map<const IR::Statement *, const IR::Node *> ReplacementMap;
58 std::vector<ReplacementMap *> replacementStack;
64 const IR::Expression *cloneBody(
const IR::IndexedVector<IR::StatOrDecl> &src,
65 IR::IndexedVector<IR::StatOrDecl> &dest);
67 const IR::Node *inlineBefore(
const IR::Node *calleeNode,
const IR::MethodCallExpression *call,
68 const IR::Statement *before);
70 const IR::Node *postCaller(
const IR::Node *caller);
71 const ReplacementMap *getReplacementMap()
const;
72 void dumpReplacementMap()
const;
76 Visitor::profile_t init_apply(
const IR::Node *node)
override;
77 void end_apply(
const IR::Node *node)
override;
78 const IR::Node *preorder(IR::Function *function)
override;
79 const IR::Node *preorder(IR::P4Control *control)
override;
80 const IR::Node *preorder(IR::P4Parser *parser)
override;
81 const IR::Node *preorder(IR::P4Action *action)
override;
82 const IR::Node *preorder(IR::MethodCallStatement *statement)
override;
83 const IR::Node *preorder(IR::AssignmentStatement *statement)
override;
93 setName(
"CloneVariableDeclarations");
96 const IR::Node *postorder(IR::Declaration_Variable *declaration)
override {
98 auto result =
new IR::Declaration_Variable(declaration->srcInfo, declaration->getName(),
99 declaration->annotations, declaration->type,
100 declaration->initializer);
101 LOG3(
"Cloned " << dbp(result));
111 passes.push_back(
new PassRepeated(
117 setName(
"InlineFunctions");
Definition commonInlining.h:137
Definition functionsInlining.h:90
Definition functionsInlining.h:32
Definition functionsInlining.h:53
Definition commonInlining.h:158
Definition functionsInlining.h:106
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
void setIsV1(bool isv1)
Set boolean indicating whether map is for a P4_14 program to isV1.
Definition referenceMap.h:105
bool isV1() const
Definition referenceMap.h:115
Iterates RemoveUnusedDeclarations until convergence.
Definition unusedDeclarations.h:146
Definition unusedDeclarations.h:28
Definition typeChecker.h:60
Definition applyOptionsPragmas.cpp:24