FreeTensor
Loading...
Searching...
No Matches
match_ast.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_MATCH_AST_H
2#define FREE_TENSOR_MATCH_AST_H
3
4#include <unordered_map>
5#include <unordered_set>
6
7#include <visitor.h>
8
9namespace freetensor {
10
20class MatchVisitor : public Visitor {
21 bool isMatched_ = true;
22 AST instance_;
23
24 std::unordered_map<std::string, std::string> nameMap_;
25 std::unordered_set<std::string> nameMapImage_;
26
27 public:
28 MatchVisitor(const AST &instance) : instance_(instance) {}
29
30 bool isMatched() const { return isMatched_; }
31
32 bool matchName(const std::string &thisName, const std::string &otherName);
33 void clearName(const std::string &thisName);
34
35 protected:
36 void visit(const StmtSeq &op) override;
37 void visit(const VarDef &op) override;
38 void visit(const Alloc &op) override;
39 void visit(const Free &op) override;
40 void visit(const Var &op) override;
41 void visit(const Store &op) override;
42 void visit(const Load &op) override;
43 void visit(const ReduceTo &op) override;
44 void visit(const IntConst &op) override;
45 void visit(const FloatConst &op) override;
46 void visit(const BoolConst &op) override;
47 void visit(const Add &op) override;
48 void visit(const Sub &op) override;
49 void visit(const Mul &op) override;
50 void visit(const RealDiv &op) override;
51 void visit(const FloorDiv &op) override;
52 void visit(const CeilDiv &op) override;
53 void visit(const RoundTowards0Div &op) override;
54 void visit(const Mod &op) override;
55 void visit(const Remainder &op) override;
56 void visit(const Min &op) override;
57 void visit(const Max &op) override;
58 void visit(const LT &op) override;
59 void visit(const LE &op) override;
60 void visit(const GT &op) override;
61 void visit(const GE &op) override;
62 void visit(const EQ &op) override;
63 void visit(const NE &op) override;
64 void visit(const LAnd &op) override;
65 void visit(const LOr &op) override;
66 void visit(const LNot &op) override;
67 void visit(const Sqrt &op) override;
68 void visit(const Exp &op) override;
69 void visit(const Ln &op) override;
70 void visit(const Square &op) override;
71 void visit(const Sigmoid &op) override;
72 void visit(const Sin &op) override;
73 void visit(const Cos &op) override;
74 void visit(const Tan &op) override;
75 void visit(const Tanh &op) override;
76 void visit(const Abs &op) override;
77 void visit(const Floor &op) override;
78 void visit(const Ceil &op) override;
79 void visit(const Unbound &op) override;
80 void visit(const IfExpr &op) override;
81 void visit(const Cast &op) override;
82 void visit(const For &op) override;
83 void visit(const If &op) override;
84 void visit(const Assert &op) override;
85 void visit(const Intrinsic &op) override;
86 void visit(const Eval &op) override;
87 void visit(const MatMul &op) override;
88 void visit(const MarkVersion &op) override;
89 void visit(const LoadAtVersion &op) override;
90};
91
92} // namespace freetensor
93
94#endif // FREE_TENSOR_MATCH_AST_H
Definition: match_ast.h:20
void clearName(const std::string &thisName)
Definition: match_ast.cc:22
MatchVisitor(const AST &instance)
Definition: match_ast.h:28
bool isMatched() const
Definition: match_ast.h:30
bool matchName(const std::string &thisName, const std::string &otherName)
Definition: match_ast.cc:9
void visit(const StmtSeq &op) override
Definition: match_ast.cc:51
Definition: visitor.h:11
Definition: allocator.h:9