1#ifndef FREE_TENSOR_PROPAGATE_DEFS_NEED_GRAD_H
2#define FREE_TENSOR_PROPAGATE_DEFS_NEED_GRAD_H
4#include <unordered_set>
19 const std::unordered_set<std::string> &requires_;
20 const std::unordered_set<std::string> &provides_;
22 std::unordered_set<ID> affectedDefs_;
28 const std::unordered_set<std::string> &provides)
29 : requires_(_requires), provides_(provides) {}
31 const std::unordered_set<ID> &
affectedDefs()
const {
return affectedDefs_; }
33 static std::unordered_set<ID>
35 const std::unordered_set<std::string> &_requires,
36 const std::unordered_set<std::string> &provides);
54 const std::unordered_set<std::string> &requires_;
55 const std::unordered_set<std::string> &provides_;
57 std::unordered_set<ID> affectedDefs_;
63 const std::unordered_set<std::string> &provides)
64 : requires_(_requires), provides_(provides) {}
66 const std::unordered_set<ID> &
affectedDefs()
const {
return affectedDefs_; }
68 static std::unordered_set<ID>
70 const std::unordered_set<std::string> &_requires,
71 const std::unordered_set<std::string> &provides);
85inline std::unordered_set<ID>
87 const std::unordered_set<std::string> &_requires,
88 const std::unordered_set<std::string> &provides) {
Definition: propagate_defs_need_grad.h:51
static std::unordered_set< ID > propagateUntilConverge(const Stmt &op, const std::unordered_set< std::string > &_requires, const std::unordered_set< std::string > &provides)
Definition: propagate_defs_need_grad.cc:118
const std::unordered_set< ID > & affectedDefs() const
Definition: propagate_defs_need_grad.h:66
void visit(const Load &op) override
Definition: propagate_defs_need_grad.cc:85
PropagateProvides(const std::unordered_set< std::string > &_requires, const std::unordered_set< std::string > &provides)
Definition: propagate_defs_need_grad.h:62
void visitExpr(const Expr &e) override
Definition: propagate_defs_need_grad.cc:79
Definition: propagate_defs_need_grad.h:16
PropagateRequires(const std::unordered_set< std::string > &_requires, const std::unordered_set< std::string > &provides)
Definition: propagate_defs_need_grad.h:27
void visitExpr(const Expr &e) override
Definition: propagate_defs_need_grad.cc:6
static std::unordered_set< ID > propagateUntilConverge(const Stmt &op, const std::unordered_set< std::string > &_requires, const std::unordered_set< std::string > &provides)
Definition: propagate_defs_need_grad.cc:44
const std::unordered_set< ID > & affectedDefs() const
Definition: propagate_defs_need_grad.h:31
void visit(const Load &op) override
Definition: propagate_defs_need_grad.cc:12
Definition: symbol_table.h:122
BaseClass::StmtRetType visit(const VarDef &op) override
Definition: symbol_table.h:167
Definition: allocator.h:9
std::unordered_set< ID > propagateDefsNeedGrad(const Stmt &op, const std::unordered_set< std::string > &_requires, const std::unordered_set< std::string > &provides)
Definition: propagate_defs_need_grad.h:86
std::unordered_map< T, std::pair< V1, V2 >, Hash, KeyEqual > intersect(const std::unordered_map< T, V1, Hash, KeyEqual > &lhs, const std::unordered_map< T, V2, Hash, KeyEqual > &rhs)
Definition: container_utils.h:24