diff options
Diffstat (limited to 'lib/chillcg/include/code_gen/CG_chillBuilder.h')
-rwxr-xr-x | lib/chillcg/include/code_gen/CG_chillBuilder.h | 300 |
1 files changed, 127 insertions, 173 deletions
diff --git a/lib/chillcg/include/code_gen/CG_chillBuilder.h b/lib/chillcg/include/code_gen/CG_chillBuilder.h index 172f198..22f495a 100755 --- a/lib/chillcg/include/code_gen/CG_chillBuilder.h +++ b/lib/chillcg/include/code_gen/CG_chillBuilder.h @@ -5,191 +5,145 @@ #include <code_gen/CG_outputBuilder.h> #include <code_gen/CG_chillRepr.h> #include <string> - - namespace omega { -class CG_chillBuilder : public CG_outputBuilder { -private: - - chillAST_SourceFile *toplevel; - chillAST_FunctionDecl *currentfunction; - - chillAST_SymbolTable *symtab_; // symbol table for FUNC (parameters?) - chillAST_SymbolTable *symtab2_; // symbol table for func BODY - -public: - CG_chillBuilder() ; - CG_chillBuilder(chillAST_SourceFile *top, chillAST_FunctionDecl *func ) ; - ~CG_chillBuilder(); + class CG_chillBuilder : public CG_outputBuilder { + private: + chillAST_SourceFile *toplevel; + chillAST_FunctionDecl *currentfunction; + chillAST_SymbolTable *symtab_; // symbol table for FUNC (parameters?) + chillAST_SymbolTable *symtab2_; // symbol table for func BODY + public: + CG_chillBuilder(); + + CG_chillBuilder(chillAST_SourceFile *top, chillAST_FunctionDecl *func); + + ~CG_chillBuilder(); + + const char *ClassName() { return "chillBuilder"; }; + + //! place holder generation TODO DOC and Usage + CG_outputRepr *CreatePlaceHolder(int indent, + CG_outputRepr *stmt, + Tuple<CG_outputRepr *> &funcList, + Tuple<std::string> &loop_vars) const; + + CG_outputRepr *CreateSubstitutedStmt(int indent, + CG_outputRepr *stmt, + const std::vector<std::string> &vars, + std::vector<CG_outputRepr *> &subs, + bool actuallyPrint = true) const; + + CG_outputRepr *CreateAssignment(int indent, CG_outputRepr *lhs, CG_outputRepr *rhs) const; + + CG_outputRepr *CreatePlusAssignment(int indent, + CG_outputRepr *lhs, + CG_outputRepr *rhs) const; + + CG_outputRepr *CreateInvoke(const std::string &funcName, + std::vector<CG_outputRepr *> &argList) const; + + CG_outputRepr *CreateComment(int indent, const std::string &commentText) const; + + CG_outputRepr *CreateAttribute(CG_outputRepr *control, + const std::string &commentText) const; + + CG_outputRepr *CreatePragmaAttribute(CG_outputRepr *scopeStmt, int looplevel, + const std::string &pragmaText) const; + + CG_outputRepr *CreatePrefetchAttribute(CG_outputRepr *scopeStmt, int looplevel, + const std::string &arrName, int hint) const; + + CG_outputRepr *CreateIf(int indent, + CG_outputRepr *guardCondition, + CG_outputRepr *true_stmtList, + CG_outputRepr *false_stmtList) const; + + CG_outputRepr *CreateInductive(CG_outputRepr *index, + CG_outputRepr *lower, + CG_outputRepr *upper, + CG_outputRepr *step) const; + + CG_outputRepr *CreateLoop(int indent, + CG_outputRepr *control, + CG_outputRepr *stmtList) const; + + CG_outputRepr *CreateInt(int num) const; + + CG_outputRepr *CreateFloat(float num) const; + + CG_outputRepr *CreateDouble(double num) const; + + bool isInteger(CG_outputRepr *op) const; + + CG_outputRepr *CreateIdent(const std::string &idStr) const; + + CG_outputRepr *CreateDotExpression(CG_outputRepr *l, CG_outputRepr *r) const; - const char *ClassName() { return "chillBuilder"; }; - - //--------------------------------------------------------------------------- - // place holder generation not in CG_outputBuilder ?? or CG_roseBuilder - //--------------------------------------------------------------------------- - CG_outputRepr* CreatePlaceHolder(int indent, - CG_outputRepr *stmt, - Tuple<CG_outputRepr*> &funcList, - Tuple<std::string> &loop_vars) const; - - //--------------------------------------------------------------------------- - // substitute variables in stmt - //--------------------------------------------------------------------------- - - - CG_outputRepr *CreateSubstitutedStmt(int indent, - CG_outputRepr *stmt, - const std::vector<std::string> &vars, - std::vector<CG_outputRepr *> &subs, - bool actuallyPrint =true) const; - - - - //--------------------------------------------------------------------------- - // assignment generation - //--------------------------------------------------------------------------- - CG_outputRepr* CreateAssignment(int indent, CG_outputRepr* lhs, CG_outputRepr* rhs) const; - - CG_outputRepr *CreatePlusAssignment(int indent, - CG_outputRepr *lhs, - CG_outputRepr *rhs) const; - - - //--------------------------------------------------------------------------- - // function invocation generation - //--------------------------------------------------------------------------- - CG_outputRepr* CreateInvoke(const std::string &funcName, - std::vector<CG_outputRepr*> &argList, - bool is_array = true) const; - - //--------------------------------------------------------------------------- - // comment generation - //--------------------------------------------------------------------------- - CG_outputRepr* CreateComment(int indent, const std::string &commentText) const; - - //--------------------------------------------------------------------------- - // Attribute generation - //--------------------------------------------------------------------------- - CG_outputRepr* CreateAttribute(CG_outputRepr *control, - const std::string &commentText) const; - - //--------------------------------------------------------------------------- - // Pragma Attribute - //--------------------------------------------------------------------------- - CG_outputRepr* CreatePragmaAttribute(CG_outputRepr *scopeStmt, int looplevel, - const std::string &pragmaText) const; - - //--------------------------------------------------------------------------- - // Prefetch Attribute - //--------------------------------------------------------------------------- - CG_outputRepr* CreatePrefetchAttribute(CG_outputRepr *scopeStmt, int looplevel, - const std::string &arrName, int hint) const; - - //--------------------------------------------------------------------------- - // if stmt gen operations - //--------------------------------------------------------------------------- - CG_outputRepr* CreateIf(int indent, - CG_outputRepr* guardCondition, - CG_outputRepr* true_stmtList, - CG_outputRepr* false_stmtList) const; - - //--------------------------------------------------------------------------- - // inductive variable generation, to be used in CreateLoop as control - //--------------------------------------------------------------------------- - CG_outputRepr* CreateInductive(CG_outputRepr* index, - CG_outputRepr* lower, - CG_outputRepr* upper, - CG_outputRepr* step) const; - - //--------------------------------------------------------------------------- - // loop stmt generation - //--------------------------------------------------------------------------- - CG_outputRepr* CreateLoop(int indent, - CG_outputRepr* control, - CG_outputRepr* stmtList) const; - - //--------------------------------------------------------------------------- - // basic operations - //--------------------------------------------------------------------------- - CG_outputRepr* CreateInt(int num ) const; // create Integer constant? - CG_outputRepr* CreateFloat(float num ) const; // - CG_outputRepr* CreateDouble(double num ) const; // should these all be chillRepr ??? - - - - - bool isInteger(CG_outputRepr *op) const; - CG_outputRepr* CreateIdent(const std::string &idStr) const; // create a new INTEGER identifier - - - CG_outputRepr* CreateDotExpression(CG_outputRepr *l, CG_outputRepr *r) const; - CG_outputRepr* CreateArrayRefExpression(const std::string &_s, - CG_outputRepr *rop) const; - CG_outputRepr* CreateArrayRefExpression(CG_outputRepr *lop, - CG_outputRepr *rop) const; - CG_outputRepr* ObtainInspectorData(const std::string &_s, const std::string &member_name) const; - bool QueryInspectorType(const std::string &varName) const; - CG_outputRepr* CreateNullStatement() const; - - //--------------------------------------------------------------------------- - // binary arithmetic operations - //--------------------------------------------------------------------------- - CG_outputRepr* CreatePlus( CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateMinus( CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateTimes( CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateIntegerDivide(CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateIntegerFloor( CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateIntegerMod( CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateIntegerCeil( CG_outputRepr* lop, CG_outputRepr* rop) const; - - //--------------------------------------------------------------------------- - // binary logical operations - //--------------------------------------------------------------------------- - CG_outputRepr* CreateAnd(CG_outputRepr* lop, CG_outputRepr* rop) const; - - //--------------------------------------------------------------------------- - // binary relational operations - //--------------------------------------------------------------------------- - //CG_outputRepr* CreateGE(CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateLE(CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateEQ(CG_outputRepr* lop, CG_outputRepr* rop) const; - CG_outputRepr* CreateNEQ(CG_outputRepr* lop, CG_outputRepr* rop) const; - - //--------------------------------------------------------------------------- - // stmt list gen operations - //--------------------------------------------------------------------------- - CG_outputRepr* + CG_outputRepr *CreateArrayRefExpression(const std::string &_s, + CG_outputRepr *rop) const; + + CG_outputRepr *CreateArrayRefExpression(CG_outputRepr *lop, + CG_outputRepr *rop) const; + + CG_outputRepr *ObtainInspectorData(const std::string &_s, const std::string &member_name) const; + + bool QueryInspectorType(const std::string &varName) const; + + CG_outputRepr *CreateNullStatement() const; + + CG_outputRepr *CreatePlus(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateMinus(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateTimes(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateIntegerDivide(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateIntegerFloor(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateIntegerMod(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateIntegerCeil(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateAnd(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateLE(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateEQ(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr *CreateNEQ(CG_outputRepr *lop, CG_outputRepr *rop) const; + + CG_outputRepr * CreateStmtList(CG_outputRepr *singleton = NULL) const; - CG_outputRepr* - StmtListInsertLast(CG_outputRepr* list, CG_outputRepr* node) const; - CG_outputRepr* - StmtListAppend(CG_outputRepr* list1, CG_outputRepr* list2) const; - CG_outputRepr *CreateAddressOf(CG_outputRepr *op) const ; - CG_outputRepr *CreateBreakStatement(void) const; - CG_outputRepr *CreateStatementFromExpression(CG_outputRepr *exp) const; + CG_outputRepr * + StmtListInsertLast(CG_outputRepr *list, CG_outputRepr *node) const; + + CG_outputRepr * + StmtListAppend(CG_outputRepr *list1, CG_outputRepr *list2) const; + + CG_outputRepr *CreateAddressOf(CG_outputRepr *op) const; + + CG_outputRepr *CreateBreakStatement(void) const; + + CG_outputRepr *CreateStatementFromExpression(CG_outputRepr *exp) const; + + CG_outputRepr *CreateStruct(const std::string struct_name, + std::vector<std::string> data_members, + std::vector<CG_outputRepr *> data_types); - //--------------------------------------------------------------------------- - // Utility Functions - //--------------------------------------------------------------------------- - //CompoundStmt *StmtV2Compound(StmtList *slist) const // ?? - //{ return new (astContext_)CompoundStmt(*astContext_, &(*slist)[0], (*slist).size(), SourceLocation(), SourceLocation()); } + CG_outputRepr *CreateClassInstance(std::string name, CG_outputRepr *class_def); - //bool substitute(clang::Expr *in, std::string sym, clang::Expr* expr, clang::Expr *parent) const; + CG_outputRepr *lookup_member_data(CG_outputRepr *scope, std::string varName, CG_outputRepr *instance); - CG_outputRepr *CreateStruct(const std::string struct_name, - std::vector<std::string> data_members, - std::vector<CG_outputRepr *> data_types); + CG_outputRepr *CreatePointer(std::string &name) const; - CG_outputRepr *CreateClassInstance(std::string name , CG_outputRepr *class_def); - CG_outputRepr *lookup_member_data(CG_outputRepr* scope, std::string varName, CG_outputRepr *instance); - CG_outputRepr* CreatePointer(std::string &name) const; - CG_outputRepr* ObtainInspectorRange(const std::string &_s, const std::string &_name) const; + CG_outputRepr *ObtainInspectorRange(const std::string &_s, const std::string &_name) const; -}; + }; } // namespace omega |