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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list