1#ifndef FREE_TENSOR_FUNC_H
2#define FREE_TENSOR_FUNC_H
6#include <unordered_map>
30std::ostream &
operator<<(std::ostream &os,
const FuncParam &p);
46std::ostream &
operator<<(std::ostream &os,
const FuncRet &r);
58 bool isFunc()
const override {
return true; }
65template <
class Tbody,
class Tparams,
class Treturns,
class Tclosure>
71 f->
returns_ = std::forward<Treturns>(returns);
72 f->
body_ = std::forward<Tbody>(body);
77 const std::vector<FuncRet> &returns, Tbody &&body) {
82 f->
body_ = std::forward<Tbody>(body);
88#define DEFINE_PASS_FOR_FUNC(pass) \
89 template <typename... T> Func pass(const Func &func, T &&...args) { \
90 return makeFunc(func->name_, func->params_, func->returns_, \
91 pass(func->body_, std::forward<T>(args)...)); \
Definition: data_type.h:106
std::vector< FuncParam > params_
Definition: func.h:51
void compHash() override
Definition: func.h:60
std::string name_
Definition: func.h:50
bool isFunc() const override
Definition: func.h:58
std::vector< FuncRet > returns_
Definition: func.h:53
SubTree< StmtNode > body_
Definition: func.h:56
static Ref make()
Definition: ref.h:105
Definition: sub_tree.h:134
#define ASSERT(expr)
Definition: except.h:152
Definition: allocator.h:9
PBSet params(T &&set)
Definition: presburger.h:1065
Expr deepCopy(const Expr &op)
Definition: ast.cc:364
Ref< FuncNode > Func
Definition: func.h:64
std::ostream & operator<<(std::ostream &os, const Dependence &dep)
Definition: deps.cc:1404
Func makeFunc(const std::string &name, Tparams &¶ms, Treturns &&returns, Tbody &&body)
Definition: func.h:66
Definition: sub_tree.h:20
bool isInClosure() const
Accept user input even if there is a closure.
Definition: func.h:23
bool updateClosure_
Data bound to this parameter.
Definition: func.h:21
Ref< Ref< Array > > closure_
Definition: func.h:20
std::string name_
Definition: func.h:19
FuncParam(const std::string &name, const Ref< Ref< Array > > &closure, bool updateClosure)
Definition: func.h:25
FuncRet(const std::string &name, DataType dtype, const Ref< Ref< Array > > &closure, bool returnClosure)
Definition: func.h:40
DataType dtype_
Definition: func.h:34
Ref< Ref< Array > > closure_
Definition: func.h:35
bool returnClosure_
Data bound to this return value.
Definition: func.h:36
bool isInClosure() const
Return even if there is a closure.
Definition: func.h:38
std::string name_
Definition: func.h:33