FreeTensor
Loading...
Searching...
No Matches
reorder.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_REORDER_H
2#define FREE_TENSOR_REORDER_H
3
4#include <string>
5#include <vector>
6
7#include <mutator.h>
8
9namespace freetensor {
10
12inline std::ostream &operator<<(std::ostream &os, ReorderMode mode) {
13 switch (mode) {
15 return os << "perfect_only";
17 return os << "move_out_imperfect";
19 return os << "move_in_imperfect";
20 default:
21 ASSERT(false);
22 }
23}
24
25class RenameIter : public Mutator {
26 std::string oldName_, newName_;
27
28 public:
29 RenameIter(const std::string &oldName) : oldName_(oldName) {}
30
31 protected:
32 Expr visit(const Var &op) override;
33 Stmt visit(const For &op) override;
34};
35
39class Reorder : public Mutator {
40 For oldOuter_, oldInner_;
41 ReorderMode mode_;
42 bool insideOuter_ = false, insideInner_ = false;
43 bool visitedInner_ = false;
44
45 public:
46 Reorder(const For oldOuter, const For &oldInner, ReorderMode mode)
47 : oldOuter_(oldOuter), oldInner_(oldInner), mode_(mode) {}
48
49 protected:
50 Stmt visit(const For &op) override;
51 Stmt visit(const StmtSeq &op) override;
52};
53
54Stmt reorder(const Stmt &ast, const std::vector<ID> &order, ReorderMode mode);
55
56} // namespace freetensor
57
58#endif // FREE_TENSOR_REORDER_H
Definition: mutator.h:11
Definition: reorder.h:25
RenameIter(const std::string &oldName)
Definition: reorder.h:29
Expr visit(const Var &op) override
Definition: reorder.cc:34
Definition: reorder.h:39
Reorder(const For oldOuter, const For &oldInner, ReorderMode mode)
Definition: reorder.h:46
Stmt visit(const For &op) override
Definition: reorder.cc:59
#define ASSERT(expr)
Definition: except.h:152
Definition: allocator.h:9
Stmt reorder(const Stmt &ast, const std::vector< ID > &order, ReorderMode mode)
Definition: reorder.cc:169
Ref< StmtNode > Stmt
Definition: ast.h:152
ReorderMode
Definition: reorder.h:11
std::ostream & operator<<(std::ostream &os, const Dependence &dep)
Definition: deps.cc:1404