P4C
The P4 Compiler
Loading...
Searching...
No Matches
eliminateInvalidHeaders.h
1/*
2 * Copyright 2022 VMware, Inc.
3 * SPDX-FileCopyrightText: 2022 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef MIDEND_ELIMINATEINVALIDHEADERS_H_
9#define MIDEND_ELIMINATEINVALIDHEADERS_H_
10
11#include "frontends/p4/typeChecking/typeChecker.h"
12#include "ir/ir.h"
13
14namespace P4 {
15
22class DoEliminateInvalidHeaders final : public Transform {
25 std::vector<const IR::Declaration_Variable *> variables;
26
27 public:
28 DoEliminateInvalidHeaders() { setName("DoEliminateInvalidHeaders"); }
29
30 Visitor::profile_t init_apply(const IR::Node *node) override {
31 auto rv = Transform::init_apply(node);
32 node->apply(nameGen);
33
34 return rv;
35 }
36
37 const IR::Node *postorder(IR::InvalidHeader *expression) override;
38 const IR::Node *postorder(IR::InvalidHeaderUnion *expression) override;
39 const IR::Node *postorder(IR::P4Control *control) override;
40 const IR::Node *postorder(IR::ParserState *parser) override;
41 const IR::Node *postorder(IR::P4Action *action) override;
42};
43
44class EliminateInvalidHeaders final : public PassManager {
45 public:
46 EliminateInvalidHeaders(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
47 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
48 passes.push_back(typeChecking);
49 passes.push_back(new DoEliminateInvalidHeaders());
50 setName("EliminateInvalidHeaders");
51 }
52};
53
54} // namespace P4
55
56#endif /* MIDEND_ELIMINATEINVALIDHEADERS_H_ */
Definition eliminateInvalidHeaders.h:22
Definition indexed_vector.h:31
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