FreeTensor
Loading...
Searching...
No Matches
make_heap_alloc.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_MAKE_HEAP_ALLOC_H
2#define FREE_TENSOR_MAKE_HEAP_ALLOC_H
3
4#include <unordered_set>
5
6#include <func.h>
7#include <mutator.h>
8#include <pass/const_fold.h>
9
10namespace freetensor {
11
12class InsertAlloc : public Mutator {
13 std::string var_;
14 bool inserted_ = false, delayed_ = false;
15
16 public:
17 InsertAlloc(const std::string &var) : var_(var) {}
18
19 bool delayed() const { return delayed_; }
20
21 protected:
22 Stmt visit(const StmtSeq &op) override;
23 Stmt visit(const For &op) override { return op; }
24 Stmt visit(const If &op) override { return op; }
25};
26
27class InsertFree : public Mutator {
28 std::string var_;
29 bool inserted_ = false, madeEarly_ = false;
30
31 public:
32 InsertFree(const std::string &var) : var_(var) {}
33
34 bool madeEarly() const { return madeEarly_; }
35
36 protected:
37 Stmt visit(const StmtSeq &op) override;
38 Stmt visit(const For &op) override { return op; }
39 Stmt visit(const If &op) override { return op; }
40};
41
42class MakeHeapAlloc : public ConstFold {
43 // Inherit ConstFold for determine dynamic sizes
44 typedef ConstFold BaseClass;
45
46 bool inKernel_ = false;
47
48 private:
49 bool inKernel() const { return inKernel_; }
50 bool isDynamicSized(const VarDef &op) const;
51
52 protected:
53 using BaseClass::visit;
54 Stmt visit(const VarDef &op) override;
55 Stmt visit(const For &op) override;
56 Stmt visit(const MatMul &op) override { return op; }
57};
58
77Stmt makeHeapAlloc(const Stmt &op);
78
80
81} // namespace freetensor
82
83#endif // FREE_TENSOR_MAKE_HEAP_ALLOC_H
Definition: const_fold.h:17
Expr visit(const Add &op) override
Definition: make_heap_alloc.h:12
bool delayed() const
Definition: make_heap_alloc.h:19
Stmt visit(const If &op) override
Definition: make_heap_alloc.h:24
Stmt visit(const StmtSeq &op) override
Definition: make_heap_alloc.cc:6
Stmt visit(const For &op) override
Definition: make_heap_alloc.h:23
InsertAlloc(const std::string &var)
Definition: make_heap_alloc.h:17
Definition: make_heap_alloc.h:27
Stmt visit(const StmtSeq &op) override
Definition: make_heap_alloc.cc:23
InsertFree(const std::string &var)
Definition: make_heap_alloc.h:32
Stmt visit(const For &op) override
Definition: make_heap_alloc.h:38
bool madeEarly() const
Definition: make_heap_alloc.h:34
Stmt visit(const If &op) override
Definition: make_heap_alloc.h:39
Definition: make_heap_alloc.h:42
Stmt visit(const MatMul &op) override
Definition: make_heap_alloc.h:56
Stmt visit(const VarDef &op) override
Definition: make_heap_alloc.cc:49
Definition: mutator.h:11
#define DEFINE_PASS_FOR_FUNC(pass)
Definition: func.h:88
Definition: allocator.h:9
Stmt makeHeapAlloc(const Stmt &op)
Definition: make_heap_alloc.cc:127
Ref< StmtNode > Stmt
Definition: ast.h:152