FreeTensor
Loading...
Searching...
No Matches
var_split.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_VAR_SPLIT_H
2#define FREE_TENSOR_VAR_SPLIT_H
3
4#include <mutator.h>
5
6namespace freetensor {
7
9
10class VarSplit : public Mutator {
11 ID def_;
12 std::string var_, newVar_;
13 int dim_;
14 bool fixedSize_;
15 int factor_, nparts_;
16 Expr dynFactor_;
17 bool found_ = false;
18
19 public:
20 VarSplit(const ID &def, int dim, bool fixedSize, int factor, int nparts)
21 : def_(def), dim_(dim), fixedSize_(fixedSize), factor_(factor),
22 nparts_(nparts) {}
23
24 bool found() const { return found_; }
25
26 private:
27 template <class T> T splitMemAcc(const T &op) {
28 if (op->var_ == var_) {
29 op->var_ = newVar_;
30 Expr x = op->indices_[dim_];
31 op->indices_[dim_] = makeFloorDiv(x, dynFactor_);
32 op->indices_.insert(op->indices_.begin() + dim_ + 1,
33 makeMod(x, dynFactor_));
34 }
35 return op;
36 }
37
38 protected:
39 Stmt visit(const VarDef &op) override;
40 Stmt visit(const Store &op) override;
41 Stmt visit(const ReduceTo &op) override;
42 Expr visit(const Load &op) override;
43};
44
45Stmt varSplit(const Stmt &ast, const ID &def, int dim, VarSplitMode mode,
46 int factor, int nparts);
47
48} // namespace freetensor
49
50#endif // FREE_TENSOR_VAR_SPLIT_H
Definition: id.h:18
Definition: mutator.h:11
Definition: var_split.h:10
Stmt visit(const VarDef &op) override
Definition: var_split.cc:7
bool found() const
Definition: var_split.h:24
VarSplit(const ID &def, int dim, bool fixedSize, int factor, int nparts)
Definition: var_split.h:20
Definition: allocator.h:9
Ref< VarDefNode > VarDef
Definition: stmt.h:107
Ref< LoadNode > Load
Definition: expr.h:61
Ref< StoreNode > Store
Definition: stmt.h:140
Expr makeFloorDiv(T &&lhs, U &&rhs, std::source_location loc=std::source_location::current())
Definition: expr.h:239
Ref< ReduceToNode > ReduceTo
Definition: stmt.h:248
Expr makeMod(T &&lhs, U &&rhs, std::source_location loc=std::source_location::current())
Definition: expr.h:303
Ref< StmtNode > Stmt
Definition: ast.h:152
VarSplitMode
Definition: var_split.h:8
@ FixedSize
Definition: var_split.h:8
@ RelaxedSize
Definition: var_split.h:8
Stmt varSplit(const Stmt &ast, const ID &def, int dim, VarSplitMode mode, int factor, int nparts)
Definition: var_split.cc:86
Ref< ExprNode > Expr
Definition: ast.h:184