Changeset: 8e0caeb0995f for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8e0caeb0995f Modified Files: monetdb5/mal/mal_function.c monetdb5/optimizer/Tests/dataflow.mal monetdb5/optimizer/Tests/manifold2.stable.out monetdb5/optimizer/opt_dataflow.c Branch: default Log Message:
Remove internal property 'transparent' Dataflow block transparency is handled in mal_function.c diffs (162 lines): diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c --- a/monetdb5/mal/mal_function.c +++ b/monetdb5/mal/mal_function.c @@ -533,14 +533,14 @@ void printFunction(stream *fd, MalBlkPtr Lifespan setLifespan(MalBlkPtr mb) { - int pc, k, depth=0, prop; + int pc, k, depth=0, dflow= -1; InstrPtr p; int *blk; Lifespan span= newLifespan(mb); + str lang = putName("language",8), dataflow= putName("dataflow",8); if (span == NULL) return NULL; - prop = PropertyIndex("transparent"); blk= (int *) GDKzalloc(sizeof(int)*mb->vtop); if( blk == NULL){ @@ -554,8 +554,16 @@ setLifespan(MalBlkPtr mb) if( p->token == NOOPsymbol) continue; - if( blockStart(p) && varGetProp(mb, getArg(p,0), prop) == NULL) - depth++; + if( blockStart(p)){ + if (getModuleId(p) == lang && getFunctionId(p) == dataflow){ + if( dflow != -1){ + GDKerror("setLifeSpan nested dataflow blocks not allowed" ); + mb->errors++; + } + dflow= depth; + } else + depth++; + } for (k = 0; k < p->argc; k++) { int v = getArg(p,k); @@ -579,13 +587,14 @@ setLifespan(MalBlkPtr mb) */ if( blockExit(p) ){ for (k = 0; k < mb->vtop; k++) - if ( span[k].endLifespan == -1) + if ( span[k].endLifespan == -1 ) span[k].endLifespan = pc; else - if ( span[k].endLifespan == 0 && blk[k]==depth) + if ( span[k].endLifespan == 0 && blk[k]==depth ) span[k].endLifespan = pc; - if (varGetProp(mb, getArg(p,0), prop) == NULL ) - depth--; + if( dflow == depth) + dflow= -1; + else depth--; } } for (k = 0; k < mb->vtop; k++) @@ -706,6 +715,8 @@ void chkDeclarations(stream *out, MalBlk InstrPtr p; short blks[MAXDEPTH], top= 0, blkId=1; int *decl; + str lang = putName("language",8), dataflow= putName("dataflow",8); + int dflow = -1; decl = (int*) GDKzalloc(sizeof(int) * mb->vtop); if ( decl == NULL) { @@ -789,25 +800,33 @@ void chkDeclarations(stream *out, MalBlk setVarUsed(mb, l); } if( p->barrier){ - if ( blockStart(p) && - varGetProp(mb, getArg(p,0), PropertyIndex("transparent")) == NULL){ - if( top <MAXDEPTH-2){ - blks[++top]= ++blkId; -#ifdef DEBUG_MAL_FCN - mnstr_printf(out,"new block %d at top %d\n",blks[top], top); -#endif - } else { + if ( blockStart(p)){ + if( top == MAXDEPTH-2){ showScriptException(out, mb,pc,SYNTAX, "too deeply nested MAL program"); mb->errors++; GDKfree(decl); return; } + blkId++; + if (getModuleId(p) == lang && getFunctionId(p) == dataflow){ + if( dflow != -1){ + GDKerror("setLifeSpan nested dataflow blocks not allowed" ); + mb->errors++; + } + dflow= blkId; + } + blks[++top]= blkId; +#ifdef DEBUG_MAL_FCN + mnstr_printf(out,"new block %d at top %d\n",blks[top], top); +#endif } - if( blockExit(p) && top > 0 && - varGetProp(mb, getArg(p,0), PropertyIndex("transparent")) == NULL){ + if( blockExit(p) && top > 0 ){ #ifdef DEBUG_MAL_FCN mnstr_printf(out,"leave block %d at top %d\n",blks[top], top); #endif + if( dflow == blkId){ + dflow = -1; + } else /* * At the end of the block we should reset the status of all variables * defined within the block. For, the block could have been skipped diff --git a/monetdb5/optimizer/Tests/dataflow.mal b/monetdb5/optimizer/Tests/dataflow.mal --- a/monetdb5/optimizer/Tests/dataflow.mal +++ b/monetdb5/optimizer/Tests/dataflow.mal @@ -25,6 +25,7 @@ c:= aggr.count(z); io.print(c); io.print("done"); end tst; +optimizer.dataflow("user","tst"); optimizer.garbageCollector("user","tst"); mdb.List("user","tst"); tst(); diff --git a/monetdb5/optimizer/Tests/manifold2.stable.out b/monetdb5/optimizer/Tests/manifold2.stable.out --- a/monetdb5/optimizer/Tests/manifold2.stable.out +++ b/monetdb5/optimizer/Tests/manifold2.stable.out @@ -33,10 +33,10 @@ function user.main():void; mdb.List("user","tst"); end user.main; function user.tst(b:bat[:oid,:dbl],b2:bat[:oid,:dbl]):void; #[0] 0 <- 1 2 -barrier X_9:bit{transparent} := language.dataflow(); #[1] MALstartDataflow 9 +barrier X_9:bit := language.dataflow(); #[1] MALstartDataflow 9 c:wrd := aggr.count(b:bat[:oid,:dbl]); #[2] ALGcount_bat 3 <- 1 c2:wrd := aggr.count(b2:bat[:oid,:dbl]); #[3] ALGcount_bat 4 <- 2 -exit X_9:bit{transparent}; #[4] 9 +exit X_9:bit; #[4] 9 X_12:bat[:oid,:dbl] := bat.new(nil:oid,nil:dbl); #[5] CMDBATnew 12 <- 13 14 barrier (X_16:oid,X_17:dbl) := iterator.new(b:bat[:oid,:dbl]); #[6] ITRbunIterator 16 17 <- 1 X_19:dbl := algebra.fetch(b2:bat[:oid,:dbl],X_16:oid); #[7] ALGfetchoid 19 <- 2 16 @@ -61,10 +61,10 @@ end user.tst; #[19] _19 = :dbl #[21] _21 = :dbl function user.tst(b:bat[:oid,:dbl],b2:bat[:oid,:dbl]):void; #[0] 0 <- 1 2 -barrier X_9:bit{transparent} := language.dataflow(); #[1] MALstartDataflow 9 +barrier X_9:bit := language.dataflow(); #[1] MALstartDataflow 9 c:wrd := aggr.count(b:bat[:oid,:dbl]); #[2] ALGcount_bat 3 <- 1 c2:wrd := aggr.count(b2:bat[:oid,:dbl]); #[3] ALGcount_bat 4 <- 2 -exit X_9:bit{transparent}; #[4] 9 +exit X_9:bit; #[4] 9 X_12:bat[:oid,:dbl] := bat.new(nil:oid,nil:dbl); #[5] CMDBATnew 12 <- 13 14 barrier (X_16:oid,X_17:dbl) := iterator.new(b:bat[:oid,:dbl]); #[6] ITRbunIterator 16 17 <- 1 X_19:dbl := algebra.fetch(b2:bat[:oid,:dbl],X_16:oid); #[7] ALGfetchoid 19 <- 2 16 diff --git a/monetdb5/optimizer/opt_dataflow.c b/monetdb5/optimizer/opt_dataflow.c --- a/monetdb5/optimizer/opt_dataflow.c +++ b/monetdb5/optimizer/opt_dataflow.c @@ -283,7 +283,6 @@ OPTdataflowImplementation(Client cntxt, q= newFcnCall(mb,languageRef,dataflowRef);\ q->barrier= BARRIERsymbol;\ getArg(q,0)= flowblock;\ - varSetProperty(mb, getArg(q,0), "transparent",0,0); } //copyblock for( j=start ; j<i; j++) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list