P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpf/lower.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 BACKENDS_EBPF_LOWER_H_
9#define BACKENDS_EBPF_LOWER_H_
10
11#include "frontends/common/resolveReferences/resolveReferences.h"
12#include "frontends/p4/typeChecking/typeChecker.h"
13#include "ir/ir.h"
14
15namespace P4::EBPF {
16
18class LowerExpressions : public Transform {
19 P4::TypeMap *typeMap;
20 std::optional<int> maxShiftWidth;
21 const IR::Expression *shift(const IR::Operation_Binary *expression) const;
22
23 public:
24 explicit LowerExpressions(P4::TypeMap *typeMap, std::optional<int> maxShiftWidth)
25 : typeMap(typeMap) {
26 CHECK_NULL(typeMap);
27 this->maxShiftWidth = maxShiftWidth;
28 setName("LowerExpressions");
29 }
30
31 const IR::Node *postorder(IR::Shl *expression) override { return shift(expression); }
32 const IR::Node *postorder(IR::Shr *expression) override { return shift(expression); }
33 const IR::Node *postorder(IR::Expression *expression) override;
34 const IR::Node *postorder(IR::Slice *expression) override;
35 const IR::Node *postorder(IR::Concat *expression) override;
36 const IR::Node *postorder(IR::Cast *expression) override;
37};
38
39class Lower : public PassManager {
40 public:
41 Lower(P4::ReferenceMap *refMap, P4::TypeMap *typeMap, std::optional<int> maxShiftWidth) {
42 setName("Lower");
43 passes.push_back(new P4::TypeChecking(refMap, typeMap));
44 passes.push_back(new LowerExpressions(typeMap, maxShiftWidth));
45 }
46};
47
48} // namespace P4::EBPF
49
50#endif /* BACKENDS_EBPF_LOWER_H_ */
This pass rewrites expressions which are not supported natively on EBPF.
Definition ebpf/lower.h:18
Definition node.h:53
Class used to encode maps from paths to declarations.
Definition referenceMap.h:67
Definition typeChecker.h:55
Definition typeMap.h:32
Definition codeGen.cpp:25