1#ifndef FREE_TENSOR_FIND_LOOP_VARIANCE_H
2#define FREE_TENSOR_FIND_LOOP_VARIANCE_H
4#include <unordered_map>
19typedef std::unordered_map<std::string, std::unordered_map<ID, LoopVariability>>
21typedef std::unordered_map<
ID ,
22 std::unordered_map<ID, LoopVariability>>
25 std::unordered_map<ID, LoopVariability>>
35 std::vector<ID> loopStack_;
60 const std::string &var_;
61 std::vector<StmtOrExprID> &condStack_;
66 MarkStores(
const std::string &var, std::vector<StmtOrExprID> &condStack,
68 : var_(var), condStack_(condStack), varInfo_(varInfo),
75 void meetTo(
const Expr &from,
const std::string &to);
76 void meetTo(
const StmtOrExprID &from,
const std::string &to);
78 template <
class T>
void visitMemWrite(
const T &op) {
80 if (op->var_ == var_) {
81 meetTo(op->expr_, op->var_);
82 for (
auto &&index : op->indices_) {
83 meetTo(index, op->var_);
85 for (
auto &&cond : condStack_) {
86 meetTo(cond, op->var_);
93 void visit(
const If &op)
override;
94 void visit(
const Store &op)
override { visitMemWrite(op); }
112 std::vector<ID> loopStack_;
113 std::vector<StmtOrExprID> condStack_;
128 void copyInfo(
const Expr &from,
const Expr &to);
130 void meetTo(
const Expr &from,
const Expr &to);
132 void visitConst(
const Const &op);
138 void visit(
const If &op)
override;
Definition: find_loop_variance.h:109
void visitExpr(const Expr &op) override
Definition: find_loop_variance.cc:153
const LoopVariExprMap & exprInfo() const
Definition: find_loop_variance.h:121
int unknownCnt() const
Definition: find_loop_variance.cc:82
FindLoopVariance(const Stmt &root)
Definition: find_loop_variance.h:119
const LoopVariUniqVarMap & varInfo() const
Definition: find_loop_variance.h:122
void visit(const For &op) override
Definition: find_loop_variance.cc:104
Definition: find_loop_variance.h:31
void visit(const For &op) override
Definition: find_loop_variance.cc:47
void visitExpr(const Expr &expr) override
Definition: find_loop_variance.cc:40
InitExprVari(LoopVariExprMap &exprInfo)
Definition: find_loop_variance.h:38
Definition: find_loop_variance.h:57
void visit(const For &op) override
Definition: find_loop_variance.cc:61
MarkStores(const std::string &var, std::vector< StmtOrExprID > &condStack, LoopVariTransVarMap &varInfo, const LoopVariExprMap &exprInfo)
Definition: find_loop_variance.h:66
void visit(const ReduceTo &op) override
Definition: find_loop_variance.h:95
void visit(const Store &op) override
Definition: find_loop_variance.h:94
std::string var_
Definition: stmt.h:231
bool isValid() const
Definition: ref.h:89
Ref< StmtNode > parentStmt() const
Definition: ast.cc:103
Definition: symbol_table.h:122
Definition: track_stmt.h:24
std::string name_
Definition: stmt.h:85
virtual void visit(const Any &op)
Definition: visitor.h:36
Definition: allocator.h:9
bool isVariant(const LoopVariExprMap &exprInfo, const StmtOrExprID &expr, const ID &loop)
Definition: find_loop_variance.cc:225
std::unordered_map< ID, std::unordered_map< ID, LoopVariability > > LoopVariUniqVarMap
Definition: find_loop_variance.h:23
Ref< VarDefNode > VarDef
Definition: stmt.h:107
std::unordered_map< StmtOrExprID, std::unordered_map< ID, LoopVariability > > LoopVariExprMap
Definition: find_loop_variance.h:26
std::unordered_map< std::string, std::unordered_map< ID, LoopVariability > > LoopVariTransVarMap
Definition: find_loop_variance.h:20
Ref< IfNode > If
Definition: stmt.h:352
Ref< ForNode > For
Definition: stmt.h:308
LoopVariability
Definition: find_loop_variance.h:13
Ref< StmtNode > Stmt
Definition: ast.h:152
std::pair< LoopVariExprMap, LoopVariUniqVarMap > findLoopVariance(const Stmt &op)
Definition: find_loop_variance.cc:241