diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-18 15:16:52 -0600 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-18 15:16:52 -0600 |
commit | 18644419b50b2b14a24456e0fcdb210f231ee317 (patch) | |
tree | 3d2a57050ae93ee0ceb71df319b1533480a4001d /omegalib/codegen/include/code_gen/CG_outputBuilder.h | |
parent | 2fce43d484e4148ae858f410d51dcd9951d34374 (diff) | |
download | chill-18644419b50b2b14a24456e0fcdb210f231ee317.tar.gz chill-18644419b50b2b14a24456e0fcdb210f231ee317.tar.bz2 chill-18644419b50b2b14a24456e0fcdb210f231ee317.zip |
doc updated for code_gen
Diffstat (limited to 'omegalib/codegen/include/code_gen/CG_outputBuilder.h')
-rw-r--r-- | omegalib/codegen/include/code_gen/CG_outputBuilder.h | 116 |
1 files changed, 50 insertions, 66 deletions
diff --git a/omegalib/codegen/include/code_gen/CG_outputBuilder.h b/omegalib/codegen/include/code_gen/CG_outputBuilder.h index 2203235..19dc440 100644 --- a/omegalib/codegen/include/code_gen/CG_outputBuilder.h +++ b/omegalib/codegen/include/code_gen/CG_outputBuilder.h @@ -29,76 +29,57 @@ namespace omega { +//! abstract base class of comiler IR code builder class CG_outputBuilder { public: CG_outputBuilder() {} virtual ~CG_outputBuilder() {} - //--------------------------------------------------------------------------- - // substitute variables in stmt - //--------------------------------------------------------------------------- + //! substitute variables in stmt virtual CG_outputRepr *CreateSubstitutedStmt(int indent, CG_outputRepr *stmt, const std::vector<std::string> &vars, std::vector<CG_outputRepr *> &subs) const = 0; - //--------------------------------------------------------------------------- - // assignment stmt generation - //--------------------------------------------------------------------------- + //! assignment stmt generation virtual CG_outputRepr *CreateAssignment(int indent, CG_outputRepr *lhs, CG_outputRepr *rhs) const = 0; - //--------------------------------------------------------------------------- - // function invocation generation - //--------------------------------------------------------------------------- + //! function invocation generation virtual CG_outputRepr *CreateInvoke(const std::string &funcName, std::vector<CG_outputRepr *> &argList) const = 0; - //--------------------------------------------------------------------------- - // comment generation - //--------------------------------------------------------------------------- + //! comment generation virtual CG_outputRepr *CreateComment(int indent, const std::string &commentText) const = 0; - //--------------------------------------------------------------------------- - // Attribute generation - //--------------------------------------------------------------------------- + //! Attribute generation virtual CG_outputRepr* CreateAttribute(CG_outputRepr *control, const std::string &commentText) const = 0; - //--------------------------------------------------------------------------- - // Pragma Attribute - // -------------------------------------------------------------------------- + //! Pragma Attribute virtual CG_outputRepr* CreatePragmaAttribute(CG_outputRepr *scopeStmt, int looplevel, const std::string &pragmaText) const = 0; - //--------------------------------------------------------------------------- - // Prefetch Attribute - //--------------------------------------------------------------------------- + //! Prefetch Attribute virtual CG_outputRepr* CreatePrefetchAttribute(CG_outputRepr *scopeStmt, int looplevel, const std::string &arrName, int hint) const = 0; - //--------------------------------------------------------------------------- - // generate if stmt, true/false stmt can be NULL but not the condition - //--------------------------------------------------------------------------- + //! generate if stmt, true/false stmt can be NULL but not the condition virtual CG_outputRepr *CreateIf(int indent, CG_outputRepr *guardCondition, CG_outputRepr *true_stmtList, CG_outputRepr *false_stmtList) const = 0; - //--------------------------------------------------------------------------- - // generate loop inductive variable (loop control structure) - //--------------------------------------------------------------------------- + //! generate loop inductive variable (loop control structure) virtual CG_outputRepr *CreateInductive(CG_outputRepr *index, CG_outputRepr *lower, CG_outputRepr *upper, CG_outputRepr *step) const = 0; - //--------------------------------------------------------------------------- - // generate loop stmt from loop control and loop body, NULL parameter allowed - //--------------------------------------------------------------------------- + //! generate loop stmt from loop control and loop body, NULL parameter allowed virtual CG_outputRepr *CreateLoop(int indent, CG_outputRepr *control, CG_outputRepr *stmtList) const = 0; - //--------------------------------------------------------------------------- - // copy operation, NULL parameter allowed. this function makes pointer - // handling uniform regardless NULL status - //--------------------------------------------------------------------------- + //! copy operation, NULL parameter allowed. + /*! + * this function makes pointer handling uniform regardless NULL status + */ virtual CG_outputRepr *CreateCopy(CG_outputRepr *original) const { if (original == NULL) return NULL; @@ -106,69 +87,72 @@ public: return original->clone(); } - //--------------------------------------------------------------------------- - // basic integer number creation - //--------------------------------------------------------------------------- + //! basic integer number creation virtual CG_outputRepr *CreateInt(int num) const = 0; virtual bool isInteger(CG_outputRepr *op) const = 0; - //--------------------------------------------------------------------------- - // basic identity/variable creation - //--------------------------------------------------------------------------- + //! basic identity/variable creation virtual CG_outputRepr *CreateIdent(const std::string &varName) const = 0; - //--------------------------------------------------------------------------- - // binary arithmetic operations, NULL parameter means 0, - // Note: - // integer division truncation method undefined, only use when lop is known - // to be multiple of rop, otherwise use integer floor instead - //--------------------------------------------------------------------------- + //! Addition operations, NULL parameter means 0, virtual CG_outputRepr *CreatePlus(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; + //! Subtraction operations, NULL parameter means 0, virtual CG_outputRepr *CreateMinus(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; + //! Multiplication operations, NULL parameter means 0, virtual CG_outputRepr *CreateTimes(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; + //! Division operations, NULL parameter means 0, + /*! + * integer division truncation method undefined, only use when lop is known + * to be multiple of rop, otherwise use integer floor instead + */ virtual CG_outputRepr *CreateDivide(CG_outputRepr *lop, CG_outputRepr *rop) const { return CreateIntegerFloor(lop, rop); } - //--------------------------------------------------------------------------- - // integer arithmetic functions, NULL parameter means 0, second parameter - // must be postive (i.e. b > 0 below), otherwise function undefined - // Note: - // ceil(a, b) = -floor(-a, b) or floor(a+b-1, b) or floor(a-1, b)+1 - // mod(a, b) = a-b*floor(a, b) - // where result must lie in range [0,b) - // floor(a, b) = a/b if a >= 0 - // (a-b+1)/b if a < 0 - // where native '/' operator behaves as 5/2 = 2, (-5)/2 = -2 - //--------------------------------------------------------------------------- + //! integer floor functions, NULL parameter means 0 + /*! + * second parameter must be postive (i.e. b > 0 below), otherwise function undefined + * + * floor(a, b) + * * = a/b if a >= 0 + * * = (a-b+1)/b if a < 0 + */ virtual CG_outputRepr *CreateIntegerFloor(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; + //! integer mod functions, NULL parameter means 0 + /*! + * second parameter must be postive (i.e. b > 0 below), otherwise function undefined + * + * mod(a, b) = a-b*floor(a, b) where result must lie in range [0,b) + */ virtual CG_outputRepr *CreateIntegerMod(CG_outputRepr *lop, CG_outputRepr *rop) const { CG_outputRepr *lop2 = CreateCopy(lop); CG_outputRepr *rop2 = CreateCopy(rop); return CreateMinus(lop2, CreateTimes(rop2, CreateIntegerFloor(lop, rop))); } + //! integer ceil functions, NULL parameter means 0 + /*! + * second parameter must be postive (i.e. b > 0 below), otherwise function undefined + * + * ceil(a, b) = -floor(-a, b) or floor(a+b-1, b) or floor(a-1, b)+1 + */ virtual CG_outputRepr *CreateIntegerCeil(CG_outputRepr *lop, CG_outputRepr *rop) const { return CreateMinus(NULL, CreateIntegerFloor(CreateMinus(NULL, lop), rop)); } - //--------------------------------------------------------------------------- - // binary logical operation, NULL parameter means TRUE - //--------------------------------------------------------------------------- + //! binary logical operation, NULL parameter means TRUE virtual CG_outputRepr *CreateAnd(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; - //--------------------------------------------------------------------------- - // binary condition operations - //--------------------------------------------------------------------------- + //! binary conditional Greater than or equal to virtual CG_outputRepr *CreateGE(CG_outputRepr *lop, CG_outputRepr *rop) const { return CreateLE(rop, lop); } + //! binary conditional Less than or equal to virtual CG_outputRepr *CreateLE(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; + //! binary conditional equal to virtual CG_outputRepr *CreateEQ(CG_outputRepr *lop, CG_outputRepr *rop) const = 0; - //--------------------------------------------------------------------------- - // join stmts together, NULL parameter allowed - //--------------------------------------------------------------------------- + //! join stmts together, NULL parameter allowed virtual CG_outputRepr *StmtListAppend(CG_outputRepr *list1, CG_outputRepr *list2) const = 0; }; |