FreeTensor
Loading...
Searching...
No Matches
code_gen_cpu.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_CODE_GEN_CPU_H
2#define FREE_TENSOR_CODE_GEN_CPU_H
3
4#include <unordered_set>
5
8#include <func.h>
9
10namespace freetensor {
11
12class CodeGenCPU : public CodeGenC<CodeGenStream> {
14
15 bool inParallel_ = false;
16 int64_t sharedStackTop_ = 0, sharedStackSize_ = 0;
17 int64_t threadStackTop_ = 0, threadStackSize_ = 0;
18 std::unordered_set<For> collapsed_;
19 std::unordered_set<VarDef> usedAsReduction_;
20
21 public:
22 CodeGenCPU(const std::vector<FuncParam> &params,
23 const std::vector<FuncRet> &returns)
24 : CodeGenC(params, returns) {}
25
26 // Stack sizes in bytes
27 int64_t sharedStackSize() const { return sharedStackSize_; }
28 int64_t threadStackSize() const { return threadStackSize_; }
29
30 protected:
31 void genAlloc(const Ref<Tensor> &tensor, const std::string &rawPtr,
32 const std::string &shapePtr,
33 const std::string &dimPtr) override;
34
36 void genScalar(const VarDef &def,
37 const std::vector<Expr> &indices) override;
38
39 using BaseClass::visit;
40 void visit(const VarDef &op) override;
41 void visit(const ReduceTo &op) override;
42 void visit(const For &op) override;
43 void visit(const MatMul &op) override;
44};
45
51NativeCode codeGenCPU(const Func &func, const Ref<Target> &target);
52
53} // namespace freetensor
54
55#endif // FREE_TENSOR_CODE_GEN_CPU_H
Definition: code_gen_cpu.h:12
int64_t sharedStackSize() const
Definition: code_gen_cpu.h:27
void visit(const VarDef &op) override
Definition: code_gen_cpu.cc:62
void genAlloc(const Ref< Tensor > &tensor, const std::string &rawPtr, const std::string &shapePtr, const std::string &dimPtr) override
Definition: code_gen_cpu.cc:27
CodeGenCPU(const std::vector< FuncParam > &params, const std::vector< FuncRet > &returns)
Definition: code_gen_cpu.h:22
void genScalar(const VarDef &def, const std::vector< Expr > &indices) override
Definition: code_gen_cpu.cc:48
int64_t threadStackSize() const
Definition: code_gen_cpu.h:28
Definition: code_gen_c.h:14
virtual void visit(const StmtSeq &op) override
Definition: code_gen_c.h:131
virtual void genScalar(const VarDef &def, const std::vector< Expr > &indices)
Definition: code_gen_c.h:107
Definition: ref.h:24
const VarDef & def(const std::string &name) const override
Definition: symbol_table.h:142
Definition: allocator.h:9
PBSet params(T &&set)
Definition: presburger.h:1065
NativeCode codeGenCPU(const Func &func, const Ref< Target > &target)
Definition: code_gen_cpu.cc:406
Ref< FuncNode > Func
Definition: func.h:64