P4C
The P4 Compiler
Loading...
Searching...
No Matches
complexComparison.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_COMPLEXCOMPARISON_H_
9#define MIDEND_COMPLEXCOMPARISON_H_
10
11#include "frontends/p4/typeChecking/typeChecker.h"
12#include "ir/ir.h"
13
14namespace P4 {
15
20class RemoveComplexComparisons : public Transform {
21 protected:
22 TypeMap *typeMap;
23
25 const IR::Expression *explode(Util::SourceInfo srcInfo, const IR::Type *leftType,
26 const IR::Expression *left, const IR::Type *rightType,
27 const IR::Expression *right);
28
29 public:
30 explicit RemoveComplexComparisons(TypeMap *typeMap) : typeMap(typeMap) {
31 CHECK_NULL(typeMap);
32 setName("RemoveComplexComparisons");
33 }
34 const IR::Node *postorder(IR::Operation_Binary *expression) override;
35};
36
37class SimplifyComparisons final : public PassManager {
38 public:
39 explicit SimplifyComparisons(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
40 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
41 passes.push_back(typeChecking);
42 passes.push_back(new RemoveComplexComparisons(typeMap));
43 setName("SimplifyComparisons");
44 }
45};
46
47} // namespace P4
48
49#endif /* MIDEND_COMPLEXCOMPARISON_H_ */
Definition node.h:53
Definition complexComparison.h:20
const IR::Expression * explode(Util::SourceInfo srcInfo, const IR::Type *leftType, const IR::Expression *left, const IR::Type *rightType, const IR::Expression *right)
Expands left == right into sub-field comparisons.
Definition complexComparison.cpp:10
Definition visitor.h:442
Definition typeChecker.h:55
Definition typeMap.h:32
Definition source_file.h:132
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13