FreeTensor
Loading...
Searching...
No Matches
merge.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_MERGE_H
2#define FREE_TENSOR_MERGE_H
3
4#include <mutator.h>
5
6namespace freetensor {
7
11class MergeFor : public Mutator {
12 Stmt root_;
13
14 For oldOuter_, oldInner_;
15 Expr outerLen_, innerLen_;
16
17 std::string newIter_;
18 ID newId_;
19
20 bool insideOuter_ = false, insideInner_ = false;
21 bool visitedInner_ = false;
22
23 public:
24 MergeFor(const Stmt &root, const For oldOuter, const For &oldInner)
25 : root_(root), oldOuter_(oldOuter), oldInner_(oldInner),
26 outerLen_(oldOuter_->len_), innerLen_(oldInner_->len_),
27 newIter_("m." + oldOuter_->iter_ + "." + oldInner_->iter_) {}
28
29 const std::string &newIter() const { return newIter_; }
30 const ID &newId() const { return newId_; }
31
32 protected:
33 Stmt visit(const For &op) override;
34 Stmt visit(const StmtSeq &op) override;
35 Expr visit(const Var &op) override;
36};
37
38std::pair<Stmt, ID> merge(const Stmt &ast, const ID &loop1, const ID &loop2);
39
40} // namespace freetensor
41
42#endif // FREE_TENSOR_MERGE_H
Definition: id.h:18
Definition: merge.h:11
MergeFor(const Stmt &root, const For oldOuter, const For &oldInner)
Definition: merge.h:24
const ID & newId() const
Definition: merge.h:30
const std::string & newIter() const
Definition: merge.h:29
Stmt visit(const For &op) override
Definition: merge.cc:11
Definition: mutator.h:11
std::vector< IterAxis > iter_
Definition: invert_stmts.cc:56
Definition: allocator.h:9
std::pair< Stmt, ID > merge(const Stmt &ast, const ID &loop1, const ID &loop2)
Definition: merge.cc:114
Ref< StmtNode > Stmt
Definition: ast.h:152