FreeTensor
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
freetensor::CodeGenC< Stream > Class Template Referenceabstract

#include <code_gen_c.h>

Inheritance diagram for freetensor::CodeGenC< Stream >:
Inheritance graph
[legend]
Collaboration diagram for freetensor::CodeGenC< Stream >:
Collaboration graph
[legend]

Public Member Functions

 CodeGenC (const std::vector< FuncParam > &params, const std::vector< FuncRet > &returns)
 
virtual std::string gen (const DataType &dtype)
 
- Public Member Functions inherited from freetensor::CodeGen< Stream >
void beginBlock ()
 
void endBlock ()
 
std::string toString (const std::function< std::string(const Stream &)> &action)
 
- Public Member Functions inherited from freetensor::SymbolTable< Visitor >
 SymbolTable (T &&...args)
 
const std::unordered_set< std::string > & names () const override
 
const std::unordered_map< std::string, VarDef > & defs () const override
 
const std::unordered_map< std::string, For > & loops () const override
 
bool hasDef (const std::string &name) const override
 
const VarDefdef (const std::string &name) const override
 
Ref< Bufferbuffer (const std::string &name) const override
 
bool hasLoop (const std::string &name) const override
 
const Forloop (const std::string &name) const override
 
void pushDef (const VarDef &op) override
 
void popDef (const VarDef &op) override
 
void pushFor (const For &op) override
 
void popFor (const For &op) override
 
const SymbolTableDatasymbolTableSnapshot () const
 
- Public Member Functions inherited from freetensor::Visitor
virtual ~Visitor ()
 
virtual void operator() (const AST &op) final
 
virtual const std::unordered_set< std::string > & names () const =0
 
virtual const std::unordered_map< std::string, VarDef > & defs () const =0
 
virtual const std::unordered_map< std::string, For > & loops () const =0
 
virtual bool hasDef (const std::string &name) const =0
 
virtual const VarDefdef (const std::string &name) const =0
 
virtual Ref< Bufferbuffer (const std::string &name) const =0
 
virtual bool hasLoop (const std::string &name) const =0
 
virtual const Forloop (const std::string &name) const =0
 
virtual void pushDef (const VarDef &op)=0
 
virtual void popDef (const VarDef &op)=0
 
virtual void pushFor (const For &op)=0
 
virtual void popFor (const For &op)=0
 

Protected Member Functions

virtual void genAlloc (const Ref< Tensor > &tensor, const std::string &rawPtr, const std::string &shapePtr, const std::string &dimPtr)=0
 
virtual std::function< std::ostream &(std::ostream &)> genMdPtrType (const VarDef &def, bool isConst=false)
 
virtual void genMdPtrDef (const VarDef &def, const std::function< void()> &genRawPtr, bool isConst=false)
 
void genMdPtrDef (const VarDef &def, const std::string &rawPtr, bool isConst=false)
 
virtual void genScalar (const VarDef &def, const std::vector< Expr > &indices)
 
template<class T >
void genScalar (const T &op)
 
virtual void visit (const StmtSeq &op) override
 
virtual void visit (const VarDef &op) override
 
virtual void visit (const Var &op) override
 
virtual void visit (const Store &op) override
 
virtual void visit (const Alloc &op) override
 
virtual void visit (const Free &op) override
 
virtual void visit (const Load &op) override
 
virtual void visit (const ReduceTo &op) override
 
virtual void visit (const IntConst &op) override
 
virtual void visit (const FloatConst &op) override
 
virtual void visit (const BoolConst &op) override
 
virtual void visit (const Add &op) override
 
virtual void visit (const Sub &op) override
 
virtual void visit (const Mul &op) override
 
virtual void visit (const RealDiv &op) override
 
virtual void visit (const FloorDiv &op) override
 
virtual void visit (const CeilDiv &op) override
 
virtual void visit (const RoundTowards0Div &op) override
 
virtual void visit (const Mod &op) override
 
virtual void visit (const Remainder &op) override
 
virtual void visit (const Min &op) override
 
virtual void visit (const Max &op) override
 
virtual void visit (const LT &op) override
 
virtual void visit (const LE &op) override
 
virtual void visit (const GT &op) override
 
virtual void visit (const GE &op) override
 
virtual void visit (const EQ &op) override
 
virtual void visit (const NE &op) override
 
virtual void visit (const LAnd &op) override
 
virtual void visit (const LOr &op) override
 
virtual void visit (const LNot &op) override
 
virtual void visit (const Sqrt &op) override
 
virtual void visit (const Exp &op) override
 
virtual void visit (const Ln &op) override
 
virtual void visit (const Square &op) override
 
virtual void visit (const Sigmoid &op) override
 
virtual void visit (const Sin &op) override
 
virtual void visit (const Cos &op) override
 
virtual void visit (const Tan &op) override
 
virtual void visit (const Tanh &op) override
 
virtual void visit (const Abs &op) override
 
virtual void visit (const Floor &op) override
 
virtual void visit (const Ceil &op) override
 
virtual void visit (const IfExpr &op) override
 
virtual void visit (const Cast &op) override
 
virtual void visit (const For &op) override
 
virtual void visit (const If &op) override
 
virtual void visit (const Assert &op) override
 
virtual void visit (const Intrinsic &op) override
 
virtual void visit (const Eval &op) override
 
- Protected Member Functions inherited from freetensor::CodeGen< Stream >
void makeIndent ()
 
template<class T >
void printList (T &&list)
 
 CodeGen (bool compact=false, int indentSize=2)
 
void markDef (const VarDef &op)
 
void markUse (const std::string &name)
 
void markUndef (const VarDef &op)
 
void markDefIter (const For &op)
 
void markUseIter (const std::string &name)
 
void markUndefIter (const For &op)
 
void pushStream (const std::string &name)
 
void popStream ()
 
std::ostream & os ()
 
int & nIndent ()
 
- Protected Member Functions inherited from freetensor::SymbolTable< Visitor >
BaseClass::StmtRetType visit (const VarDef &op) override
 
BaseClass::StmtRetType visit (const For &op) override
 
- Protected Member Functions inherited from freetensor::Visitor
virtual void visitExpr (const Expr &op)
 
virtual void visitStmt (const Stmt &op)
 
virtual void visit (const Any &op)
 
virtual void visit (const AnyExpr &op)
 
virtual void visit (const Func &op)
 
virtual void visit (const StmtSeq &op)
 
virtual void visit (const VarDef &op)
 
virtual void visit (const Var &op)
 
virtual void visit (const Store &op)
 
virtual void visit (const Alloc &op)
 
virtual void visit (const Free &op)
 
virtual void visit (const Load &op)
 
virtual void visit (const ReduceTo &op)
 
virtual void visit (const IntConst &op)
 
virtual void visit (const FloatConst &op)
 
virtual void visit (const BoolConst &op)
 
virtual void visit (const Add &op)
 
virtual void visit (const Sub &op)
 
virtual void visit (const Mul &op)
 
virtual void visit (const RealDiv &op)
 
virtual void visit (const FloorDiv &op)
 
virtual void visit (const CeilDiv &op)
 
virtual void visit (const RoundTowards0Div &op)
 
virtual void visit (const Mod &op)
 
virtual void visit (const Remainder &op)
 
virtual void visit (const Min &op)
 
virtual void visit (const Max &op)
 
virtual void visit (const LT &op)
 
virtual void visit (const LE &op)
 
virtual void visit (const GT &op)
 
virtual void visit (const GE &op)
 
virtual void visit (const EQ &op)
 
virtual void visit (const NE &op)
 
virtual void visit (const LAnd &op)
 
virtual void visit (const LOr &op)
 
virtual void visit (const LNot &op)
 
virtual void visit (const Sqrt &op)
 
virtual void visit (const Exp &op)
 
virtual void visit (const Ln &op)
 
virtual void visit (const Square &op)
 
virtual void visit (const Sigmoid &op)
 
virtual void visit (const Sin &op)
 
virtual void visit (const Cos &op)
 
virtual void visit (const Tan &op)
 
virtual void visit (const Tanh &op)
 
virtual void visit (const Abs &op)
 
virtual void visit (const Floor &op)
 
virtual void visit (const Ceil &op)
 
virtual void visit (const Unbound &op)
 
virtual void visit (const For &op)
 
virtual void visit (const If &op)
 
virtual void visit (const Assert &op)
 
virtual void visit (const Assume &op)
 
virtual void visit (const IfExpr &op)
 
virtual void visit (const Cast &op)
 
virtual void visit (const Intrinsic &op)
 
virtual void visit (const Eval &op)
 
virtual void visit (const MatMul &op)
 
virtual void visit (const MarkVersion &op)
 
virtual void visit (const LoadAtVersion &op)
 

Additional Inherited Members

- Public Types inherited from freetensor::Visitor
typedef void ExprRetType
 
typedef void StmtRetType
 
- Protected Attributes inherited from freetensor::CodeGen< Stream >
bool compact_
 
int indentSize_
 
std::vector< Stream > streamStack_
 
std::vector< Stream > poppedStream_
 
std::unordered_map< std::string, std::string > var2Stream_
 

Constructor & Destructor Documentation

◆ CodeGenC()

template<class Stream >
freetensor::CodeGenC< Stream >::CodeGenC ( const std::vector< FuncParam > &  params,
const std::vector< FuncRet > &  returns 
)
inline

Member Function Documentation

◆ gen()

template<class Stream >
std::string freetensor::CodeGenC< Stream >::gen ( const DataType dtype)
virtual

◆ genAlloc()

template<class Stream >
virtual void freetensor::CodeGenC< Stream >::genAlloc ( const Ref< Tensor > &  tensor,
const std::string &  rawPtr,
const std::string &  shapePtr,
const std::string &  dimPtr 
)
protectedpure virtual

Implemented in freetensor::CodeGenCPU.

◆ genMdPtrDef() [1/2]

template<class Stream >
void freetensor::CodeGenC< Stream >::genMdPtrDef ( const VarDef def,
const std::function< void()> &  genRawPtr,
bool  isConst = false 
)
protectedvirtual

◆ genMdPtrDef() [2/2]

template<class Stream >
void freetensor::CodeGenC< Stream >::genMdPtrDef ( const VarDef def,
const std::string &  rawPtr,
bool  isConst = false 
)
inlineprotected

◆ genMdPtrType()

template<class Stream >
std::function< std::ostream &(std::ostream &)> freetensor::CodeGenC< Stream >::genMdPtrType ( const VarDef def,
bool  isConst = false 
)
protectedvirtual

◆ genScalar() [1/2]

template<class Stream >
template<class T >
void freetensor::CodeGenC< Stream >::genScalar ( const T &  op)
inlineprotected

◆ genScalar() [2/2]

template<class Stream >
void freetensor::CodeGenC< Stream >::genScalar ( const VarDef def,
const std::vector< Expr > &  indices 
)
protectedvirtual

Reimplemented in freetensor::CodeGenCPU.

◆ visit() [1/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Abs op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [2/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Add op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [3/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Alloc op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [4/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Assert op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [5/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const BoolConst op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [6/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Cast op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [7/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Ceil op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [8/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const CeilDiv op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [9/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Cos op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [10/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const EQ op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [11/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Eval op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [12/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Exp op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [13/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const FloatConst op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [14/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Floor op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [15/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const FloorDiv op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [16/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const For op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

Reimplemented in freetensor::CodeGenCPU.

◆ visit() [17/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Free op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [18/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const GE op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [19/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const GT op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [20/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const If op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [21/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const IfExpr op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [22/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const IntConst op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [23/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Intrinsic op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [24/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const LAnd op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [25/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const LE op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [26/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Ln op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [27/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const LNot op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [28/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Load op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [29/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const LOr op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [30/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const LT op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [31/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Max op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [32/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Min op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [33/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Mod op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [34/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Mul op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [35/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const NE op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [36/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const RealDiv op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [37/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const ReduceTo op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

Reimplemented in freetensor::CodeGenCPU.

◆ visit() [38/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Remainder op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [39/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const RoundTowards0Div op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [40/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Sigmoid op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [41/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Sin op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [42/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Sqrt op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [43/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Square op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [44/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const StmtSeq op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [45/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Store op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [46/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Sub op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [47/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Tan op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [48/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Tanh op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [49/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const Var op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [50/50]

template<class Stream >
void freetensor::CodeGenC< Stream >::visit ( const VarDef op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

Reimplemented in freetensor::CodeGenCPU.


The documentation for this class was generated from the following files: