FreeTensor
Loading...
Searching...
No Matches
check_loop_order.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_CHECK_LOOP_ORDER_H
2#define FREE_TENSOR_CHECK_LOOP_ORDER_H
3
4#include <string>
5#include <unordered_set>
6#include <vector>
7
8#include <visitor.h>
9
10namespace freetensor {
11
20class CheckLoopOrder : public Visitor {
21 std::vector<ID> dstOrder_;
22 std::vector<For> curOrder_, outerLoops_, outerLoopStack_;
23 std::vector<StmtSeq> stmtSeqStack_, stmtSeqInBetween_;
24 std::unordered_set<std::string> itersDefinedInNest_;
25 bool reqireRangeDefinedOutside_;
26 bool done_ = false;
27
28 public:
29 CheckLoopOrder(const std::vector<ID> &dstOrder,
30 bool reqireRangeDefinedOutside = true)
31 : dstOrder_(dstOrder),
32 reqireRangeDefinedOutside_(reqireRangeDefinedOutside) {}
33
37 const std::vector<For> &order() const;
38
43 const std::vector<StmtSeq> &stmtSeqInBetween() const {
44 return stmtSeqInBetween_;
45 }
46
50 const std::vector<For> &outerLoops() const { return outerLoops_; }
51
52 protected:
53 void visitStmt(const Stmt &stmt) override;
54 void visit(const For &op) override;
55 void visit(const StmtSeq &op) override;
56};
57
58} // namespace freetensor
59
60#endif // FREE_TENSOR_CHECK_LOOP_ORDER_H
Definition: check_loop_order.h:20
void visit(const For &op) override
Definition: check_loop_order.cc:16
const std::vector< For > & outerLoops() const
Definition: check_loop_order.h:50
const std::vector< StmtSeq > & stmtSeqInBetween() const
Definition: check_loop_order.h:43
CheckLoopOrder(const std::vector< ID > &dstOrder, bool reqireRangeDefinedOutside=true)
Definition: check_loop_order.h:29
const std::vector< For > & order() const
Definition: check_loop_order.cc:62
void visitStmt(const Stmt &stmt) override
Definition: check_loop_order.cc:9
Definition: visitor.h:11
Definition: allocator.h:9