FreeTensor
Loading...
Searching...
No Matches
inlined_invoke.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_INLINED_INVOKE_H
2#define FREE_TENSOR_INLINED_INVOKE_H
3
4#include <unordered_map>
5#include <unordered_set>
6
9#include <func.h>
10#include <mutator.h>
11
12namespace freetensor {
13
14class StripReturns : public Mutator {
15 const std::vector<FuncRet> &returns_;
16
17 // From outer to inner. Each item is a pair of (position of the return
18 // value, Buffer of the return value)
19 std::vector<std::pair<int, Ref<Buffer>>> bufToReturn_;
20
21 public:
22 StripReturns(const std::vector<FuncRet> &returns) : returns_(returns) {}
23
24 const auto &bufToReturn() const { return bufToReturn_; }
25
26 protected:
27 Stmt visit(const VarDef &op) override;
28};
29
30class InlinedInvoke : public SymbolTable<Mutator> {
32
33 Metadata callSiteMetadata_;
34 const std::unordered_map<std::string, Ref<FrontendVar>> &kvs_;
35 const std::unordered_map<std::string, std::string> &renameRets_;
36 const std::unordered_set<std::string> &conflictNames_;
37
38 public:
40 const Metadata &callSiteMetadata,
41 const std::unordered_map<std::string, Ref<FrontendVar>> &kvs,
42 const std::unordered_map<std::string, std::string> &renameRets,
43 const std::unordered_set<std::string> &conflictNames)
44 : callSiteMetadata_(callSiteMetadata), kvs_(kvs),
45 renameRets_(renameRets), conflictNames_(conflictNames) {
46 ASSERT(callSiteMetadata_.isValid());
47 }
48
49 protected:
50 using BaseClass::visit;
51 Stmt visitStmt(const Stmt &op) override;
52 Expr visit(const Load &op) override;
53 Stmt visit(const Store &op) override;
54 Stmt visit(const ReduceTo &op) override;
55 Stmt visit(const VarDef &op) override;
56 Stmt visit(const For &op) override;
57};
58
71std::pair<Func, std::vector<std::pair<int, Ref<Buffer>>>>
72stripReturns(const Func &func);
73
91Stmt inlinedInvoke(const Metadata &callSiteMetadata, const Func &func,
92 const std::vector<Ref<FrontendVar>> &args,
93 const std::unordered_map<std::string, Ref<FrontendVar>> &kvs,
94 const std::vector<std::string> &retNames,
95 const std::unordered_set<std::string> &conflictNames,
96 bool forceAllowClosures = false);
97
98} // namespace freetensor
99
100#endif // FREE_TENSOR_INLINED_INVOKE_H
Definition: inlined_invoke.h:30
Stmt visitStmt(const Stmt &op) override
Definition: inlined_invoke.cc:24
Expr visit(const Load &op) override
Definition: inlined_invoke.cc:30
InlinedInvoke(const Metadata &callSiteMetadata, const std::unordered_map< std::string, Ref< FrontendVar > > &kvs, const std::unordered_map< std::string, std::string > &renameRets, const std::unordered_set< std::string > &conflictNames)
Definition: inlined_invoke.h:39
Definition: mutator.h:11
bool isValid() const
Definition: ref.h:89
Definition: inlined_invoke.h:14
const auto & bufToReturn() const
Definition: inlined_invoke.h:24
StripReturns(const std::vector< FuncRet > &returns)
Definition: inlined_invoke.h:22
Stmt visit(const VarDef &op) override
Definition: inlined_invoke.cc:12
Definition: symbol_table.h:122
BaseClass::StmtRetType visit(const VarDef &op) override
Definition: symbol_table.h:167
#define ASSERT(expr)
Definition: except.h:152
Definition: allocator.h:9
Ref< MetadataContent > Metadata
Definition: metadata.h:39
std::pair< Func, std::vector< std::pair< int, Ref< Buffer > > > > stripReturns(const Func &func)
Definition: inlined_invoke.cc:134
Ref< StmtNode > Stmt
Definition: ast.h:152
Ref< FuncNode > Func
Definition: func.h:64
Stmt inlinedInvoke(const Metadata &callSiteMetadata, const Func &func, const std::vector< Ref< FrontendVar > > &args, const std::unordered_map< std::string, Ref< FrontendVar > > &kvs, const std::vector< std::string > &retNames, const std::unordered_set< std::string > &conflictNames, bool forceAllowClosures=false)
Definition: inlined_invoke.cc:141