P4C
The P4 Compiler
Loading...
Searching...
No Matches
tableHit.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_TABLEHIT_H_
9#define MIDEND_TABLEHIT_H_
10
11#include "frontends/common/resolveReferences/resolveReferences.h"
12#include "frontends/p4/typeChecking/typeChecker.h"
13#include "ir/ir.h"
14
15namespace P4 {
16
27class DoTableHit : public Transform, public ResolutionContext {
28 TypeMap *typeMap;
29 enum op_t { None, And, Or, Xor };
30
31 const IR::Node *process(IR::BaseAssignmentStatement *statement, op_t op);
32
33 public:
34 const IR::Node *postorder(IR::BaseAssignmentStatement *statement) override {
35 return process(statement, None);
36 }
37 const IR::Node *postorder(IR::OpAssignmentStatement *statement) override { return statement; }
38 const IR::Node *postorder(IR::BAndAssign *statement) override {
39 return process(statement, And);
40 }
41 const IR::Node *postorder(IR::BOrAssign *statement) override { return process(statement, Or); }
42 const IR::Node *postorder(IR::BXorAssign *statement) override {
43 return process(statement, Xor);
44 }
45
46 explicit DoTableHit(TypeMap *typeMap) : typeMap(typeMap) {
47 CHECK_NULL(typeMap);
48 setName("DoTableHit");
49 }
50};
51
52class TableHit : public PassManager {
53 public:
54 explicit TableHit(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
55 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
56 passes.push_back(typeChecking);
57 passes.push_back(new DoTableHit(typeMap));
58 setName("TableHit");
59 }
60};
61
62} // namespace P4
63
64#endif /* MIDEND_TABLEHIT_H_ */
Definition tableHit.h:27
Definition node.h:53
Definition visitor.h:442
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