FreeTensor
Loading...
Searching...
No Matches
remove_dead_var.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_REMOVE_DEAD_VAR_H
2#define FREE_TENSOR_REMOVE_DEAD_VAR_H
3
4#include <unordered_set>
5
7#include <func.h>
8#include <mutator.h>
9
10namespace freetensor {
11
12class RemoveAllWrites : public Mutator {
13 std::string var_;
14
15 public:
16 RemoveAllWrites(const std::string &var) : var_(var) {}
17
18 protected:
19 Stmt visit(const Store &op) override;
20 Stmt visit(const ReduceTo &op) override;
21};
22
23class RemoveDeadVar : public SymbolTable<Mutator> {
25
26 // All reads occured from the current statement to the last statement
27 std::unordered_set<std::string> readsAfterward_;
28
29 // All writes occured in each statemtns
30 std::unordered_map<ID, std::unordered_set<std::string>> writes_;
31
32 std::unordered_set<std::string> writtenToOutput_;
33 std::unordered_map<std::string, int> inLoopCnt_;
34 std::string destination_;
35 bool isFixPoint_ = true;
36
37 public:
38 bool isFixPoint() const { return isFixPoint_; }
39
40 protected:
41 using BaseClass::visit;
42 Stmt visitStmt(const Stmt &s) override;
43 Expr visit(const Load &op) override;
44 Stmt visit(const Store &op) override;
45 Stmt visit(const ReduceTo &op) override;
46 Stmt visit(const VarDef &op) override;
47 Stmt visit(const For &op) override;
48 Stmt visit(const StmtSeq &op) override;
49};
50
51Stmt removeDeadVar(const Stmt &op);
52
54
55} // namespace freetensor
56
57#endif // FREE_TENSOR_REMOVE_DEAD_VAR_H
Definition: mutator.h:11
Definition: remove_dead_var.h:12
RemoveAllWrites(const std::string &var)
Definition: remove_dead_var.h:16
Stmt visit(const Store &op) override
Definition: remove_dead_var.cc:6
Definition: remove_dead_var.h:23
bool isFixPoint() const
Definition: remove_dead_var.h:38
Expr visit(const Load &op) override
Definition: remove_dead_var.cc:40
Stmt visitStmt(const Stmt &s) override
Definition: remove_dead_var.cc:14
Definition: symbol_table.h:122
BaseClass::StmtRetType visit(const VarDef &op) override
Definition: symbol_table.h:167
#define DEFINE_PASS_FOR_FUNC(pass)
Definition: func.h:88
Definition: allocator.h:9
Stmt removeDeadVar(const Stmt &op)
Definition: remove_dead_var.cc:124
Ref< StmtNode > Stmt
Definition: ast.h:152