P4C
The P4 Compiler
Loading...
Searching...
No Matches
removeExits.h
1/*
2 * Copyright 2017 VMware, Inc.
3 * SPDX-FileCopyrightText: 2017 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef MIDEND_REMOVEEXITS_H_
9#define MIDEND_REMOVEEXITS_H_
10
11#include "frontends/common/resolveReferences/resolveReferences.h"
12#include "frontends/p4/removeReturns.h"
13
14namespace P4 {
15
26class DoRemoveExits : public DoRemoveReturns, public ResolutionContext {
27 TypeMap *typeMap;
28 // In this class "Return" (inherited from RemoveReturns) should be read as "Exit"
29 std::set<const IR::Node *> callsExit; // actions, tables
30 void callExit(const IR::Node *node);
31
32 public:
33 explicit DoRemoveExits(TypeMap *typeMap) : DoRemoveReturns("hasExited"_cs), typeMap(typeMap) {
34 visitDagOnce = false;
35 CHECK_NULL(typeMap);
36 setName("DoRemoveExits");
37 }
38
39 const IR::Node *preorder(IR::ExitStatement *action) override;
40 const IR::Node *preorder(IR::P4Table *table) override;
41
42 const IR::Node *preorder(IR::BlockStatement *statement) override;
43 const IR::Node *preorder(IR::IfStatement *statement) override;
44 const IR::Node *preorder(IR::SwitchStatement *statement) override;
45 const IR::Node *preorder(IR::BaseAssignmentStatement *statement) override;
46 const IR::Node *preorder(IR::MethodCallStatement *statement) override;
47
48 const IR::Node *preorder(IR::P4Action *action) override;
49 const IR::Node *preorder(IR::P4Control *control) override;
50};
51
52class RemoveExits : public PassManager {
53 public:
54 explicit RemoveExits(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
55 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
56 passes.push_back(typeChecking);
57 passes.push_back(new DoRemoveExits(typeMap));
58 setName("RemoveExits");
59 }
60};
61
62} // namespace P4
63
64#endif /* MIDEND_REMOVEEXITS_H_ */
Definition removeExits.h:26
Definition node.h:53
Definition typeChecker.h:55
Definition typeMap.h:32
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13