17#ifndef BACKENDS_COMMON_REMOVECOMPLEXEXPRESSIONS_H_
18#define BACKENDS_COMMON_REMOVECOMPLEXEXPRESSIONS_H_
20#include "frontends/common/resolveReferences/resolveReferences.h"
21#include "frontends/p4/typeMap.h"
30class RemoveComplexExpressionsPolicy {
32 virtual ~RemoveComplexExpressionsPolicy() {}
37 virtual bool convert(
const IR::P4Control *control)
const = 0;
49 IR::IndexedVector<IR::Declaration> newDecls;
50 IR::IndexedVector<IR::StatOrDecl> assignments;
52 const IR::PathExpression *createTemporary(
const IR::Expression *expression);
53 const IR::Expression *simplifyExpression(
const IR::Expression *expression,
bool force);
57 const IR::IndexedVector<IR::NamedExpression> *simplifyExpressions(
58 const IR::IndexedVector<IR::NamedExpression> *vec);
60 const IR::Node *simpleStatement(IR::Statement *statement);
65 : refMap(refMap), typeMap(typeMap), policy(policy) {
68 setName(
"RemoveComplexExpressions");
70 const IR::Node *postorder(IR::SelectExpression *expression)
override;
71 const IR::Node *preorder(IR::ParserState *state)
override {
75 const IR::Node *postorder(IR::ParserState *state)
override {
76 state->components.append(assignments);
79 const IR::Node *postorder(IR::MethodCallExpression *expression)
override;
80 const IR::Node *preorder(IR::P4Parser *parser)
override {
84 const IR::Node *postorder(IR::P4Parser *parser)
override {
85 if (newDecls.size() != 0) {
87 newDecls.append(parser->parserLocals);
88 parser->parserLocals = newDecls;
92 const IR::Node *preorder(IR::P4Control *control)
override;
93 const IR::Node *postorder(IR::P4Control *control)
override {
94 if (newDecls.size() != 0) {
96 newDecls.append(control->controlLocals);
97 control->controlLocals = newDecls;
101 const IR::Node *postorder(IR::Statement *statement)
override;
102 const IR::Node *postorder(IR::MethodCallStatement *statement)
override;
Definition externInstance.h:33
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition removeComplexExpressions.h:45
Definition removeComplexExpressions.h:30
virtual bool convert(const IR::P4Control *control) const =0
Definition applyOptionsPragmas.cpp:24