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

Reply via email to