FreeTensor
Loading...
Searching...
No Matches
sink_var.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_SINK_VAR_H
2#define FREE_TENSOR_SINK_VAR_H
3
4#include <optional>
5#include <unordered_set>
6#include <vector>
7
9#include <func.h>
10#include <lazy.h>
11#include <mutator.h>
12#include <visitor.h>
13
14namespace freetensor {
15
16class SinkVar : public Mutator {
17 const std::optional<std::unordered_set<ID>> &toSink_;
18 const std::unordered_set<std::pair<ID, ID>> &deps_; // {(vardef, loop)}
19 const std::unordered_set<ID> &analyzedDeps_; // {vardef}
20 std::unordered_set<ID> &needDepAnalysis_; // {vardef}
21 Lazy<LoopVariUniqVarMap> &variantMap_;
22 std::function<bool(const Stmt &)> scopeFilter_;
23 bool isFixPoint_ = true;
24
25 private:
26 bool hasDep(const ID &vardef, const ID &loop);
27
28 public:
29 SinkVar(const std::optional<std::unordered_set<ID>> &toSink,
30 const std::unordered_set<std::pair<ID, ID>> &deps,
31 const std::unordered_set<ID> &analyzedDeps,
32 std::unordered_set<ID> &needDepAnalysis,
33 Lazy<LoopVariUniqVarMap> &variantMap,
34 const std::function<bool(const Stmt &)> &scopeFilter)
35 : toSink_(toSink), deps_(deps), analyzedDeps_(analyzedDeps),
36 needDepAnalysis_(needDepAnalysis), variantMap_(variantMap),
37 scopeFilter_(scopeFilter) {}
38
39 bool isFixPoint() const { return isFixPoint_; }
40
41 protected:
42 Stmt visit(const VarDef &op) override;
43};
44
54Stmt sinkVar(const Stmt &op,
55 const std::optional<std::unordered_set<ID>> &toSink = std::nullopt,
56 const std::function<bool(const Stmt &)> &scopeFilter = nullptr);
57
59
60} // namespace freetensor
61
62#endif // FREE_TENSOR_SINK_VAR_H
Definition: id.h:18
Definition: lazy.h:12
Definition: mutator.h:11
Definition: sink_var.h:16
SinkVar(const std::optional< std::unordered_set< ID > > &toSink, const std::unordered_set< std::pair< ID, ID > > &deps, const std::unordered_set< ID > &analyzedDeps, std::unordered_set< ID > &needDepAnalysis, Lazy< LoopVariUniqVarMap > &variantMap, const std::function< bool(const Stmt &)> &scopeFilter)
Definition: sink_var.h:29
bool isFixPoint() const
Definition: sink_var.h:39
Stmt visit(const VarDef &op) override
Definition: sink_var.cc:20
#define DEFINE_PASS_FOR_FUNC(pass)
Definition: func.h:88
Definition: allocator.h:9
Stmt sinkVar(const Stmt &op, const std::optional< std::unordered_set< ID > > &toSink=std::nullopt, const std::function< bool(const Stmt &)> &scopeFilter=nullptr)
Definition: sink_var.cc:182
Ref< StmtNode > Stmt
Definition: ast.h:152