P4C
The P4 Compiler
Loading...
Searching...
No Matches
bmv2/common/lower.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 * Copyright 2013-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef BACKENDS_BMV2_COMMON_LOWER_H_
9#define BACKENDS_BMV2_COMMON_LOWER_H_
10
11#include "frontends/common/resolveReferences/resolveReferences.h"
12#include "frontends/p4/typeMap.h"
13#include "ir/ir.h"
14#include "midend/removeComplexExpressions.h"
15
16namespace P4::BMV2 {
17
19class LowerExpressions : public Transform {
20 P4::TypeMap *typeMap;
22 int maxShiftWidth;
23
24 const IR::Expression *shift(const IR::Operation_Binary *expression) const;
25
26 public:
27 explicit LowerExpressions(P4::TypeMap *typeMap, int maxShiftWidth = 8)
28 : typeMap(typeMap), maxShiftWidth(maxShiftWidth) {
29 CHECK_NULL(typeMap);
30 setName("LowerExpressions");
31 }
32
33 const IR::Node *postorder(IR::Expression *expression) override;
34 const IR::Node *postorder(IR::Shl *expression) override { return shift(expression); }
35 const IR::Node *postorder(IR::Shr *expression) override { return shift(expression); }
36 const IR::Node *postorder(IR::Cast *expression) override;
37 const IR::Node *postorder(IR::Neg *expression) override;
38 const IR::Node *postorder(IR::Slice *expression) override;
39 const IR::Node *postorder(IR::Concat *expression) override;
40 const IR::Node *preorder(IR::P4Table *table) override {
41 prune();
42 return table;
43 } // don't simplify expressions in table
44};
45
46class RemoveComplexExpressions : public P4::RemoveComplexExpressions {
47 public:
48 explicit RemoveComplexExpressions(P4::TypeMap *typeMap,
49 P4::RemoveComplexExpressionsPolicy *policy = nullptr)
50 : P4::RemoveComplexExpressions(typeMap, policy) {}
51
52 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
53};
54
55} // namespace P4::BMV2
56
57#endif /* BACKENDS_BMV2_COMMON_LOWER_H_ */
Definition node.h:53
Definition removeComplexExpressions.h:36
Definition removeComplexExpressions.h:21
Definition typeMap.h:32
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition action.cpp:9