P4C
The P4 Compiler
Loading...
Searching...
No Matches
singleArgumentSelect.h
1/*
2 * Copyright 2018 VMware, Inc.
3 * SPDX-FileCopyrightText: 2018 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef MIDEND_SINGLEARGUMENTSELECT_H_
9#define MIDEND_SINGLEARGUMENTSELECT_H_
10
11#include "frontends/p4/typeChecking/typeChecker.h"
12#include "ir/ir.h"
13
14namespace P4 {
15
23class DoSingleArgumentSelect : public Modifier {
24 TypeMap *typeMap;
25 const IR::Type *selectListType;
26
27 public:
28 explicit DoSingleArgumentSelect(TypeMap *typeMap) : typeMap(typeMap), selectListType(nullptr) {
29 setName("DoSingleArgumentSelect");
30 }
31
33 struct Pair {
34 const IR::Expression *expr;
35 const IR::Expression *mask;
36 bool hasMask;
37
38 Pair(const IR::Expression *source, const IR::Type *type);
39 };
40
41 // Validate that the expression contains only subexpressions
42 // of supported types.
43 void checkExpressionType(const IR::Expression *expression);
44
45 bool preorder(IR::SelectCase *selCase) override;
46 bool preorder(IR::SelectExpression *expression) override;
47};
48
49class SingleArgumentSelect : public PassManager {
50 public:
51 explicit SingleArgumentSelect(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
52 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
53 passes.push_back(typeChecking);
54 passes.push_back(new DoSingleArgumentSelect(typeMap));
55 setName("SingleArgumentSelect");
56 }
57};
58
59} // namespace P4
60
61#endif /* MIDEND_SINGLEARGUMENTSELECT_H_ */
Definition singleArgumentSelect.h:23
Definition visitor.h:385
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