diff options
Diffstat (limited to 'src/chillASTs.cc')
-rw-r--r-- | src/chillASTs.cc | 268 |
1 files changed, 47 insertions, 221 deletions
diff --git a/src/chillASTs.cc b/src/chillASTs.cc index 70c37e8..bea2360 100644 --- a/src/chillASTs.cc +++ b/src/chillASTs.cc @@ -9,52 +9,6 @@ using namespace std; -int chillAST_Node::chill_scalar_counter = 0; -int chillAST_Node::chill_array_counter = 1; - - -const char *ChillAST_Node_Names[] = { - "Unknown AST node type", - "SourceFile", - "TypedefDecl", - "VarDecl", - // "ParmVarDecl", not used any more - "FunctionDecl", - "RecordDecl", - "MacroDefinition", - "CompoundStmt", - "ForStmt", - "TernaryOperator", - "BinaryOperator", - "UnaryOperator", - "ArraySubscriptExpr", - "MemberExpr", - "DeclRefExpr", - "IntegerLiteral", - "FloatingLiteral", - "ImplicitCastExpr", // not sure we need this - "ReturnStmt", - "CallExpr", - "DeclStmt", - "ParenExpr", - "CStyleCastExpr", - "CStyleAddressOf", - "IfStmt", - "SizeOf", - "Malloc", - "Free", - "NoOp", -// CUDA specific - "CudaMalloc", - "CudaFree", - "CudaMemcpy", - "CudaKernelCall", - "CudaSyncthreads", - "fake1", - "fake2", - "fake3" -}; - bool streq(const char *a, const char *b) { return !strcmp(a, b); } @@ -625,15 +579,6 @@ void chillAST_MacroDefinition::setBody(chillAST_Node *bod) { bod->setParent(this); // well, ... } -void chillAST_MacroDefinition::insertChild(int i, chillAST_Node *node) { - body->insertChild(i, node); -} - -void chillAST_MacroDefinition::addChild(chillAST_Node *node) { - body->addChild(node); - node->setParent(this); // this, or body?? -} - chillAST_ForStmt::chillAST_ForStmt() { children.push_back(NULL); // init children.push_back(NULL); // cond @@ -646,7 +591,7 @@ chillAST_ForStmt::chillAST_ForStmt() { chillAST_ForStmt::chillAST_ForStmt(chillAST_Node *ini, chillAST_Node *con, chillAST_Node *inc, chillAST_Node *bod) - :chillAST_ForStmt() { + : chillAST_ForStmt() { setInit(ini); setCond(con); setInc(inc); @@ -763,7 +708,8 @@ void chillAST_ForStmt::printControl(int in, FILE *fp) { } chillAST_Node *chillAST_ForStmt::clone() { - chillAST_ForStmt *fs = new chillAST_ForStmt(getInit()->clone(), getCond()->clone(), getInc()->clone(), getBody()->clone()); + chillAST_ForStmt *fs = new chillAST_ForStmt(getInit()->clone(), getCond()->clone(), getInc()->clone(), + getBody()->clone()); fs->isFromSourceFile = isFromSourceFile; if (filename) fs->filename = strdup(filename); fs->setParent(getParent()); @@ -1113,7 +1059,7 @@ chillAST_BinaryOperator::chillAST_BinaryOperator() { } chillAST_BinaryOperator::chillAST_BinaryOperator(chillAST_Node *l, const char *oper, chillAST_Node *r) - :chillAST_BinaryOperator() { + : chillAST_BinaryOperator() { //fprintf(stderr, "chillAST_BinaryOperator::chillAST_BinaryOperator( l %p %s r %p, parent %p) this %p\n", l, oper, r, par, this); CHILL_DEBUG_PRINT("( l %s r )\n", oper); @@ -1259,7 +1205,7 @@ chillAST_TernaryOperator::chillAST_TernaryOperator() { } chillAST_TernaryOperator::chillAST_TernaryOperator(const char *oper, chillAST_Node *c, chillAST_Node *l, - chillAST_Node *r):chillAST_TernaryOperator() { + chillAST_Node *r) : chillAST_TernaryOperator() { if (op) op = strdup(oper); setCond(c); setLHS(l); @@ -2074,7 +2020,8 @@ chillAST_UnaryOperator::chillAST_UnaryOperator() { children.push_back(NULL); } -chillAST_UnaryOperator::chillAST_UnaryOperator(const char *oper, bool pre, chillAST_Node *sub):chillAST_UnaryOperator() { +chillAST_UnaryOperator::chillAST_UnaryOperator(const char *oper, bool pre, chillAST_Node *sub) + : chillAST_UnaryOperator() { op = strdup(oper); prefix = pre; setSubExpr(sub); @@ -2144,7 +2091,7 @@ chillAST_ImplicitCastExpr::chillAST_ImplicitCastExpr() { children.push_back(NULL); } -chillAST_ImplicitCastExpr::chillAST_ImplicitCastExpr(chillAST_Node *sub):chillAST_ImplicitCastExpr() { +chillAST_ImplicitCastExpr::chillAST_ImplicitCastExpr(chillAST_Node *sub) : chillAST_ImplicitCastExpr() { setSubExpr(sub); } @@ -2159,7 +2106,7 @@ chillAST_CStyleCastExpr::chillAST_CStyleCastExpr() { children.push_back(NULL); } -chillAST_CStyleCastExpr::chillAST_CStyleCastExpr(const char *to, chillAST_Node *sub):chillAST_CStyleCastExpr() { +chillAST_CStyleCastExpr::chillAST_CStyleCastExpr(const char *to, chillAST_Node *sub) : chillAST_CStyleCastExpr() { towhat = strdup(to); setSubExpr(sub); } @@ -2175,7 +2122,8 @@ class chillAST_Node *chillAST_CStyleCastExpr::clone() { chillAST_CStyleAddressOf::chillAST_CStyleAddressOf() { children.push_back(NULL); } -chillAST_CStyleAddressOf::chillAST_CStyleAddressOf(chillAST_Node *sub):chillAST_CStyleAddressOf() { + +chillAST_CStyleAddressOf::chillAST_CStyleAddressOf(chillAST_Node *sub) : chillAST_CStyleAddressOf() { setSubExpr(sub); } @@ -2191,7 +2139,7 @@ chillAST_Malloc::chillAST_Malloc() { children.push_back(NULL); } -chillAST_Malloc::chillAST_Malloc(chillAST_Node *numthings):chillAST_Malloc() { +chillAST_Malloc::chillAST_Malloc(chillAST_Node *numthings) : chillAST_Malloc() { setSize(numthings); isFromSourceFile = true; // default filename = NULL; @@ -2210,7 +2158,7 @@ chillAST_CudaMalloc::chillAST_CudaMalloc() { children.push_back(NULL); } -chillAST_CudaMalloc::chillAST_CudaMalloc(chillAST_Node *devmemptr, chillAST_Node *size):chillAST_CudaMalloc() { +chillAST_CudaMalloc::chillAST_CudaMalloc(chillAST_Node *devmemptr, chillAST_Node *size) : chillAST_CudaMalloc() { setDevPtr(devmemptr); setSize(size); }; @@ -2224,71 +2172,45 @@ class chillAST_Node *chillAST_CudaMalloc::clone() { } void chillAST_CudaMalloc::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { - chillAST_Node::gatherArrayRefs(refs,false); + chillAST_Node::gatherArrayRefs(refs, false); } void chillAST_CudaMalloc::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { - chillAST_Node::gatherScalarRefs(refs,false); + chillAST_Node::gatherScalarRefs(refs, false); } -chillAST_CudaFree::chillAST_CudaFree(chillAST_VarDecl *var) { - variable = var; -}; - -class chillAST_Node *chillAST_CudaFree::constantFold() { - return this; +chillAST_CudaFree::chillAST_CudaFree() { + children.push_back(NULL); } +chillAST_CudaFree::chillAST_CudaFree(chillAST_Node *var) : chillAST_CudaFree() { + setParent(var); +}; + class chillAST_Node *chillAST_CudaFree::clone() { - chillAST_CudaFree *CF = new chillAST_CudaFree(variable); + chillAST_CudaFree *CF = new chillAST_CudaFree(getPointer()->clone()); CF->setParent(getParent()); CF->isFromSourceFile = isFromSourceFile; if (filename) CF->filename = strdup(filename); return CF; } -void chillAST_CudaFree::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) {} - -void chillAST_CudaFree::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) {} - -void chillAST_CudaFree::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { - variable->gatherVarDecls(decls); -} - - -void chillAST_CudaFree::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { - variable->gatherScalarVarDecls(decls); +chillAST_CudaMemcpy::chillAST_CudaMemcpy() { + addChild(NULL); + addChild(NULL); + addChild(NULL); } - -void chillAST_CudaFree::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { - variable->gatherArrayVarDecls(decls); -} - - -void chillAST_CudaFree::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { - variable->gatherVarUsage(decls); -} - - -chillAST_CudaMemcpy::chillAST_CudaMemcpy(chillAST_VarDecl *d, chillAST_VarDecl *s, chillAST_Node *siz, char *kind) { - dest = d; - src = s; - //fprintf(stderr, "chillAST_CudaMemcpy::chillAST_CudaMemcpy( dest %s, src %s, ...)\n", d->varname, s->varname ); - size = siz; +chillAST_CudaMemcpy::chillAST_CudaMemcpy(chillAST_Node *d, chillAST_Node *s, chillAST_Node *siz, char *kind) { + setDest(d); + setSrc(s); + setSize(siz); cudaMemcpyKind = kind; }; -class chillAST_Node *chillAST_CudaMemcpy::constantFold() { - dest = (chillAST_VarDecl *) dest->constantFold(); - src = (chillAST_VarDecl *) src->constantFold(); - size = size->constantFold(); - return this; -} - class chillAST_Node *chillAST_CudaMemcpy::clone() { - chillAST_CudaMemcpy *CMCPY = new chillAST_CudaMemcpy((chillAST_VarDecl *) (dest->clone()), - (chillAST_VarDecl *) (src->clone()), size->clone(), + chillAST_CudaMemcpy *CMCPY = new chillAST_CudaMemcpy(getDest()->clone(), + getSrc()->clone(), getSize()->clone(), strdup(cudaMemcpyKind)); CMCPY->setParent(getParent()); CMCPY->isFromSourceFile = isFromSourceFile; @@ -2297,52 +2219,21 @@ class chillAST_Node *chillAST_CudaMemcpy::clone() { } void chillAST_CudaMemcpy::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { - dest->gatherArrayRefs(refs, false); - src->gatherArrayRefs(refs, false); - size->gatherArrayRefs(refs, false); + chillAST_Node::gatherArrayRefs(refs, false); } void chillAST_CudaMemcpy::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { - dest->gatherScalarRefs(refs, false); - src->gatherScalarRefs(refs, false); - size->gatherScalarRefs(refs, false); -} - -void chillAST_CudaMemcpy::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { - dest->gatherVarDecls(decls); - src->gatherVarDecls(decls); - size->gatherVarDecls(decls); -} - - -void chillAST_CudaMemcpy::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { - dest->gatherScalarVarDecls(decls); - src->gatherScalarVarDecls(decls); - size->gatherScalarVarDecls(decls); -} - - -void chillAST_CudaMemcpy::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { - dest->gatherArrayVarDecls(decls); - src->gatherArrayVarDecls(decls); - size->gatherArrayVarDecls(decls); -} - - -void chillAST_CudaMemcpy::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { - dest->gatherVarUsage(decls); - src->gatherVarUsage(decls); - size->gatherVarUsage(decls); + chillAST_Node::gatherScalarRefs(refs, false); } - chillAST_CudaSyncthreads::chillAST_CudaSyncthreads() { } chillAST_ReturnStmt::chillAST_ReturnStmt() { children.push_back(NULL); } -chillAST_ReturnStmt::chillAST_ReturnStmt(chillAST_Node *retval):chillAST_ReturnStmt() { + +chillAST_ReturnStmt::chillAST_ReturnStmt(chillAST_Node *retval) : chillAST_ReturnStmt() { setRetVal(retval); } @@ -2356,87 +2247,21 @@ class chillAST_Node *chillAST_ReturnStmt::clone() { return RS; } -chillAST_CallExpr::chillAST_CallExpr(chillAST_Node *c) { //, int numofargs, chillAST_Node **theargs ) { - - //fprintf(stderr, "chillAST_CallExpr::chillAST_CallExpr callee type %s\n", c->getTypeString()); - callee = c; - //callee->setParent( this ); // ?? - numargs = 0; - grid = block = NULL; -} - - -void chillAST_CallExpr::addArg(chillAST_Node *a) { - args.push_back(a); - a->setParent(this); - numargs += 1; -} - -void chillAST_CallExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherArrayRefs(refs, writtento); - } -} - -void chillAST_CallExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherScalarRefs(refs, writtento); - } -} - - -void chillAST_CallExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherVarDecls(decls); - } +chillAST_CallExpr::chillAST_CallExpr() { + addChild(NULL); } - -void chillAST_CallExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherScalarVarDecls(decls); - } -} - - -void chillAST_CallExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherArrayVarDecls(decls); - } -} - - -void chillAST_CallExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherDeclRefExprs(refs); - } -} - -void chillAST_CallExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { - for (int i = 0; i < args.size(); i++) args[i]->replaceVarDecls(olddecl, newdecl); -} - -void chillAST_CallExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { - for (int i = 0; i < args.size(); i++) { - args[i]->gatherVarUsage(decls); - } -} - - -chillAST_Node *chillAST_CallExpr::constantFold() { - numargs = args.size(); // wrong place for this - for (int i = 0; i < numargs; i++) { - args[i] = args[i]->constantFold(); - } - return this; +chillAST_CallExpr::chillAST_CallExpr(chillAST_Node *c) : chillAST_CallExpr() { + setCallee(c); + grid = block = NULL; } chillAST_Node *chillAST_CallExpr::clone() { //fprintf(stderr, "chillAST_CallExpr::clone()\n"); //print(0, stderr); fprintf(stderr, "\n"); - chillAST_CallExpr *CE = new chillAST_CallExpr(callee->clone()); - for (int i = 0; i < args.size(); i++) CE->addArg(args[i]->clone()); + chillAST_CallExpr *CE = new chillAST_CallExpr(getCallee()->clone()); + for (int i = 1; i < getNumChildren(); i++) CE->addArg(getChild(i)->clone()); CE->isFromSourceFile = isFromSourceFile; if (filename) CE->filename = strdup(filename); return CE; @@ -2964,6 +2789,7 @@ bool chillAST_CompoundStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symta chillAST_ParenExpr::chillAST_ParenExpr() { children.push_back(NULL); } + chillAST_ParenExpr::chillAST_ParenExpr(chillAST_Node *sub) { setSubExpr(sub); } @@ -3082,18 +2908,18 @@ chillAST_IfStmt::chillAST_IfStmt() { children.push_back(NULL); } -chillAST_IfStmt::chillAST_IfStmt(chillAST_Node *c, chillAST_Node *t, chillAST_Node *e):chillAST_IfStmt() { +chillAST_IfStmt::chillAST_IfStmt(chillAST_Node *c, chillAST_Node *t, chillAST_Node *e) : chillAST_IfStmt() { setCond(c); setThen(t); setElse(e); } void chillAST_IfStmt::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { - chillAST_Node::gatherArrayRefs(refs,0); + chillAST_Node::gatherArrayRefs(refs, 0); } void chillAST_IfStmt::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { - chillAST_Node::gatherScalarRefs(refs,0); + chillAST_Node::gatherScalarRefs(refs, 0); } chillAST_Node *chillAST_IfStmt::clone() { |