1#ifndef FREE_TENSOR_ANALYZE_VERSION_H
2#define FREE_TENSOR_ANALYZE_VERSION_H
4#include <unordered_map>
5#include <unordered_set>
20 const std::unordered_set<ID> &affectingScopes_;
21 const std::unordered_set<ID> &needVersions_;
22 const std::unordered_set<ID> &fakeStoreIds_;
25 std::unordered_map<Stmt, Expr> scopeLen_;
29 const std::unordered_set<ID> &needVersions,
30 const std::unordered_set<ID> &fakeStoreIds)
31 : def_(
def), affectingScopes_(affectingScopes),
32 needVersions_(needVersions), fakeStoreIds_(fakeStoreIds) {}
34 const std::unordered_map<Stmt, Expr> &
scopeLen()
const {
return scopeLen_; }
43 void visit(
const If &op)
override;
52 const std::unordered_set<ID> &affectingScopes_;
53 const std::unordered_set<ID> &needVersions_;
54 const std::unordered_set<ID> &fakeStoreIds_;
55 const std::unordered_map<Stmt, Expr> &scopeLen_;
57 std::unordered_map<StmtOrExprID, Expr> &versions_;
58 std::unordered_map<std::string, std::pair<std::string, Expr>>
60 std::string tapeName_;
65 const std::unordered_set<ID> &needVersions,
66 const std::unordered_set<ID> &fakeStoreIds,
67 const std::unordered_map<Stmt, Expr> &scopeLen,
69 std::unordered_map<StmtOrExprID, Expr> &versions,
70 std::unordered_map<std::string, std::pair<std::string, Expr>>
72 : def_(def), affectingScopes_(affectingScopes),
73 needVersions_(needVersions), fakeStoreIds_(fakeStoreIds),
74 scopeLen_(scopeLen), totLen_(totLen), versions_(versions),
75 userVersions_(userVersions) {}
77 const std::string &
tapeName()
const {
return tapeName_; }
96 std::unordered_map<std::string, std::pair<std::string, Expr>>
101 std::unordered_map<std::string, std::pair<std::string, Expr>>
103 : userVersions_(userVersions) {}
139std::tuple<std::unordered_map<StmtOrExprID, Expr>, std::unordered_map<ID, Expr>,
140 std::unordered_set<ID>,
141 std::unordered_map<std::string, std::pair<std::string, Expr>>>
144 const std::unordered_map<ID, std::unordered_set<ID>> &needVersions,
145 const std::unordered_map<StmtOrExprID, Derivative::LazyFullDerivative>
147 bool localVersionsOnly);
Definition: analyze_version.h:47
void visit(const Load &op) override
Definition: analyze_version.cc:155
const std::string & tapeName() const
Definition: analyze_version.h:77
AnalyzeVersion(const ID &def, const std::unordered_set< ID > &affectingScopes, const std::unordered_set< ID > &needVersions, const std::unordered_set< ID > &fakeStoreIds, const std::unordered_map< Stmt, Expr > &scopeLen, const Expr &totLen, std::unordered_map< StmtOrExprID, Expr > &versions, std::unordered_map< std::string, std::pair< std::string, Expr > > &userVersions)
Definition: analyze_version.h:64
Definition: comp_transient_bounds.h:50
BaseClass::StmtRetType visit(const For &op) override
Definition: comp_transient_bounds.h:128
Definition: analyze_version.h:15
CountScopeLen(const ID &def, const std::unordered_set< ID > &affectingScopes, const std::unordered_set< ID > &needVersions, const std::unordered_set< ID > &fakeStoreIds)
Definition: analyze_version.h:28
const std::unordered_map< Stmt, Expr > & scopeLen() const
Definition: analyze_version.h:34
void visit(const Store &op) override
Definition: analyze_version.cc:53
Definition: symbol_table.h:122
BaseClass::StmtRetType visit(const VarDef &op) override
Definition: symbol_table.h:167
const VarDef & def(const std::string &name) const override
Definition: symbol_table.h:142
Definition: track_stmt.h:24
Definition: allocator.h:9
std::tuple< std::unordered_map< StmtOrExprID, Expr >, std::unordered_map< ID, Expr >, std::unordered_set< ID >, std::unordered_map< std::string, std::pair< std::string, Expr > > > analyzeVersion(const Stmt &op, const std::unordered_map< ID, std::unordered_set< ID > > &needVersions, const std::unordered_map< StmtOrExprID, Derivative::LazyFullDerivative > &derivatives, bool localVersionsOnly)
Definition: analyze_version.cc:248
Ref< StmtNode > Stmt
Definition: ast.h:152
Expr makeIntConst(int64_t val, std::source_location loc=std::source_location::current())
Definition: expr.h:102