FreeTensor
Loading...
Searching...
No Matches
find_indexing_loops.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_FIND_INDEXING_LOOPS_H
2#define FREE_TENSOR_FIND_INDEXING_LOOPS_H
3
4#include <unordered_map>
5
7#include <visitor.h>
8
9namespace freetensor {
10
11class FindIndexingLoops : public SymbolTable<Visitor> {
13
14 std::unordered_map<For, std::vector<VarDef>> results_;
15 std::vector<VarDef> inIndicesStack_;
16
17 public:
18 const std::unordered_map<For, std::vector<VarDef>> &results() const {
19 return results_;
20 }
21
22 protected:
23 using BaseClass::visit;
24 void visit(const Load &op) override;
25 void visit(const Store &op) override;
26 void visit(const ReduceTo &op) override;
27 void visit(const Var &op) override;
28};
29
33inline std::unordered_map<For, std::vector<VarDef>>
35 FindIndexingLoops visitor;
36 visitor(op);
37 return visitor.results();
38}
39
40} // namespace freetensor
41
42#endif // FREE_TENSOR_FIND_INDEXING_LOOPS_H
Definition: find_indexing_loops.h:11
void visit(const Load &op) override
Definition: find_indexing_loops.cc:5
const std::unordered_map< For, std::vector< VarDef > > & results() const
Definition: find_indexing_loops.h:18
Definition: ref.h:24
Definition: symbol_table.h:122
BaseClass::StmtRetType visit(const VarDef &op) override
Definition: symbol_table.h:167
Definition: allocator.h:9
std::unordered_map< For, std::vector< VarDef > > findIndexingLoops(const Stmt &op)
Definition: find_indexing_loops.h:34