17#ifndef MIDEND_REMOVECOMPLEXEXPRESSIONS_H_ 
   18#define MIDEND_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;
 
   55        : refMap(refMap), typeMap(typeMap), policy(policy) {
 
   58        setName(
"RemoveComplexExpressions");
 
   61    const IR::PathExpression *createTemporary(
const IR::Expression *expression);
 
   62    const IR::Expression *simplifyExpression(
const IR::Expression *expression, 
bool force);
 
   69    const IR::Node *simpleStatement(IR::Statement *statement);
 
   71    const IR::Node *postorder(IR::SelectExpression *expression) 
override;
 
   72    const IR::Node *preorder(IR::ParserState *state)
 override {
 
   76    const IR::Node *postorder(IR::ParserState *state)
 override {
 
   77        state->components.append(assignments);
 
   80    const IR::Node *postorder(IR::MethodCallExpression *expression) 
override;
 
   81    const IR::Node *preorder(IR::P4Parser *parser)
 override {
 
   85    const IR::Node *postorder(IR::P4Parser *parser)
 override {
 
   86        if (newDecls.size() != 0) {
 
   88            newDecls.append(parser->parserLocals);
 
   89            parser->parserLocals = newDecls;
 
   93    const IR::Node *preorder(IR::P4Control *control) 
override;
 
   94    const IR::Node *postorder(IR::P4Control *control)
 override {
 
   95        if (newDecls.size() != 0) {
 
   97            newDecls.append(control->controlLocals);
 
   98            control->controlLocals = newDecls;
 
  102    const IR::Node *postorder(IR::Statement *statement) 
override;
 
  103    const IR::Node *postorder(IR::MethodCallStatement *statement) 
override;
 
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
 
Definition backends/common/removeComplexExpressions.h:39
 
Definition backends/common/removeComplexExpressions.h:28
 
virtual bool convert(const IR::P4Control *control) const =0
 
Definition applyOptionsPragmas.cpp:24