1#ifndef FREE_TENSOR_REMOVE_WRITES_H
2#define FREE_TENSOR_REMOVE_WRITES_H
4#include <unordered_map>
5#include <unordered_set>
18 std::vector<For> loopStack_;
19 std::vector<If> ifStack_;
20 std::unordered_map<Store, std::tuple<VarDef, Expr, For>>
22 std::unordered_map<std::string, int> defDepth_;
28 const ID &singleDefId)
29 : variantExpr_(variantExpr), singleDefId_(singleDefId) {}
31 const std::unordered_map<Store, std::tuple<VarDef, Expr, For>> &
39 void visit(
const If &op)
override;
45 const std::unordered_set<Stmt> &redundant_;
46 const std::unordered_map<Stmt, Stmt> &replacement_;
50 const std::unordered_map<Stmt, Stmt> &replacement)
51 : redundant_(redundant), replacement_(replacement) {}
54 if (redundant_.count(op)) {
56 }
else if (replacement_.count(op)) {
57 return replacement_.at(op);
Definition: remove_writes.h:15
void visit(const For &op) override
Definition: remove_writes.cc:75
FindLoopInvariantWrites(const LoopVariExprMap &variantExpr, const ID &singleDefId)
Definition: remove_writes.h:27
const std::unordered_map< Store, std::tuple< VarDef, Expr, For > > & results() const
Definition: remove_writes.h:32
virtual Stmt visit(const Any &op)
Definition: mutator.h:39
Definition: remove_writes.h:44
Stmt visit(const Store &op) override
Definition: remove_writes.h:64
RemoveWrites(const std::unordered_set< Stmt > &redundant, const std::unordered_map< Stmt, Stmt > &replacement)
Definition: remove_writes.h:49
Stmt doVisit(const T &op)
Definition: remove_writes.h:53
Stmt visit(const ReduceTo &op) override
Definition: remove_writes.h:65
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
std::unordered_map< StmtOrExprID, std::unordered_map< ID, LoopVariability > > LoopVariExprMap
Definition: find_loop_variance.h:26
Ref< StmtNode > Stmt
Definition: ast.h:152
Stmt makeStmtSeq(Tstmts &&stmts, const Metadata &metadata=nullptr, const ID &id={}, std::source_location loc=std::source_location::current())
Definition: stmt.h:51
Stmt removeWrites(const Stmt &op, const ID &singleDefId={})
Definition: remove_writes.cc:185