-
Notifications
You must be signed in to change notification settings - Fork 457
/
Copy pathcomplexComparison.h
58 lines (46 loc) · 1.88 KB
/
complexComparison.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
Copyright 2017 VMware, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef MIDEND_COMPLEXCOMPARISON_H_
#define MIDEND_COMPLEXCOMPARISON_H_
#include "frontends/p4/typeChecking/typeChecker.h"
#include "ir/ir.h"
namespace P4 {
/**
* Implements a pass that removes comparisons on complex values
* by converting them to comparisons on all their fields.
*/
class RemoveComplexComparisons : public Transform {
protected:
TypeMap *typeMap;
/// Expands left == right into sub-field comparisons
const IR::Expression *explode(Util::SourceInfo srcInfo, const IR::Type *leftType,
const IR::Expression *left, const IR::Type *rightType,
const IR::Expression *right);
public:
explicit RemoveComplexComparisons(TypeMap *typeMap) : typeMap(typeMap) {
CHECK_NULL(typeMap);
setName("RemoveComplexComparisons");
}
const IR::Node *postorder(IR::Operation_Binary *expression) override;
};
class SimplifyComparisons final : public PassManager {
public:
explicit SimplifyComparisons(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
passes.push_back(typeChecking);
passes.push_back(new RemoveComplexComparisons(typeMap));
setName("SimplifyComparisons");
}
};
} // namespace P4
#endif /* MIDEND_COMPLEXCOMPARISON_H_ */