P4C
The P4 Compiler
Loading...
Searching...
No Matches
eliminateSwitch.h
1/*
2 * Copyright 2020 VMware, Inc.
3 * SPDX-FileCopyrightText: 2020 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef MIDEND_ELIMINATESWITCH_H_
9#define MIDEND_ELIMINATESWITCH_H_
10
11#include "frontends/p4/typeChecking/typeChecker.h"
12#include "ir/ir.h"
13
14namespace P4 {
15
68class DoEliminateSwitch final : public Transform {
70 const TypeMap *typeMap;
71 std::vector<const IR::Declaration *> toInsert;
72
73 public:
74 bool exactNeeded = false;
75
76 explicit DoEliminateSwitch(const TypeMap *typeMap) : typeMap(typeMap) {
77 setName("DoEliminateSwitch");
78 CHECK_NULL(typeMap);
79 }
80
81 Visitor::profile_t init_apply(const IR::Node *node) override {
82 auto rv = Transform::init_apply(node);
83 node->apply(nameGen);
84
85 return rv;
86 }
87
88 const IR::Node *postorder(IR::SwitchStatement *statement) override;
89 const IR::Node *postorder(IR::P4Control *control) override;
90 const IR::Node *postorder(IR::P4Program *program) override;
91};
92
93class EliminateSwitch final : public PassManager {
94 public:
95 EliminateSwitch(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
96 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
97 passes.push_back(typeChecking);
98 passes.push_back(new DoEliminateSwitch(typeMap));
99 passes.push_back(new ClearTypeMap(typeMap));
100 setName("EliminateSwitch");
101 }
102};
103
104} // namespace P4
105
106#endif /* MIDEND_ELIMINATESWITCH_H_ */
Definition typeChecker.h:32
Definition eliminateSwitch.h:68
Definition node.h:53
Definition referenceMap.h:36
Definition visitor.h:442
Definition typeChecker.h:55
Definition typeMap.h:32
Definition visitor.h:78
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13