Changeset: 0910ef68b0d7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0910ef68b0d7
Modified Files:
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_factory.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_interpreter.h
monetdb5/mal/mal_recycle.c
monetdb5/optimizer/opt_dataflow.c
monetdb5/optimizer/opt_evaluate.c
monetdb5/scheduler/run_pipeline.c
sql/backends/monet5/datacell/petrinet.c
sql/backends/monet5/datacell/receptor.c
sql/backends/monet5/sql_emptyset.c
Branch: default
Log Message:
Reduce number of arguments.
Code cleanup action.
diffs (201 lines):
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -927,7 +927,7 @@ runDFLOWworker(void *t)
* blocking counter should be decremented upon finishing it.
*/
static void
-DFLOWinit(DataFlow flow, Client cntxt, MalBlkPtr mb, MalStkPtr stk, int size)
+DFLOWinitBlk(DataFlow flow, Client cntxt, MalBlkPtr mb, MalStkPtr stk, int
size)
{
int pc, i, j, k, l, n, etop = 0;
int *assign;
@@ -1227,7 +1227,7 @@ str runMALdataflow(Client cntxt, MalBlkP
size = DFLOWgraphSize(mb, startpc, stoppc);
flow->nodes = (int*)GDKzalloc(sizeof(int) * size);
flow->edges = (int*)GDKzalloc(sizeof(int) * size);
- DFLOWinit(flow, cntxt, mb, stk, size);
+ DFLOWinitBlk(flow, cntxt, mb, stk, size);
ret = DFLOWscheduler(flow);
diff --git a/monetdb5/mal/mal_factory.c b/monetdb5/mal/mal_factory.c
--- a/monetdb5/mal/mal_factory.c
+++ b/monetdb5/mal/mal_factory.c
@@ -383,7 +383,7 @@ runFactory(Client cntxt, MalBlkPtr mb, M
} else {
if( cmd && cntxt->timer == 0)
mdbStep(cntxt,mb,pl->stk,pl->pc);
- msg = reenterMAL(cntxt, mb, pl->pc, -1, pl->stk, 0, 0);
+ msg = reenterMAL(cntxt, mb, pl->pc, -1, pl->stk);
}
/* propagate change in debugging status */
if (cmd && pl->stk && pl->stk->cmd != cmd && cmd != 'x')
@@ -458,7 +458,7 @@ callFactory(Client cntxt, MalBlkPtr mb,
}
if( flag && cntxt->timer == 0)
mdbStep(cntxt,mb,pl->stk,pl->pc);
- ret= reenterMAL(cntxt, mb, pl->pc, -1, pl->stk, 0, 0);
+ ret= reenterMAL(cntxt, mb, pl->pc, -1, pl->stk);
/* garbage collect the string arguments, these positions
will simply be overwritten the next time.
for (i = psig->retc; i < psig->argc; i++)
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -445,8 +445,7 @@ str runMAL(Client cntxt, MalBlkPtr mb, M
* answer to direct their actions. Or, a dataflow scheduler could step in
* to enforce a completely different execution order.
*/
-str reenterMAL(Client cntxt, MalBlkPtr mb, int startpc, int stoppc,
- MalStkPtr stk, MalStkPtr env, InstrPtr pcicaller)
+str reenterMAL(Client cntxt, MalBlkPtr mb, int startpc, int stoppc, MalStkPtr
stk)
{
str ret;
int keepAlive;
@@ -454,14 +453,11 @@ str reenterMAL(Client cntxt, MalBlkPtr m
if (stk == NULL)
throw(MAL, "mal.interpreter", MAL_STACK_FAIL);
keepAlive = stk->keepAlive;
- if (env && stk && stk->cmd != 'f') stk->cmd = env->cmd;
-
- ret = runMALsequence(cntxt, mb, startpc, stoppc, stk, env, pcicaller);
+ ret = runMALsequence(cntxt, mb, startpc, stoppc, stk, 0, 0);
/* pass the new debug mode to the caller */
- if (env && stk->cmd != 'f') env->cmd = stk->cmd;
if (keepAlive == 0 && garbageControl(getInstrPtr(mb, 0)))
- garbageCollector(cntxt, mb, stk, env != stk);
+ garbageCollector(cntxt, mb, stk, stk != 0);
return ret;
}
diff --git a/monetdb5/mal/mal_interpreter.h b/monetdb5/mal/mal_interpreter.h
--- a/monetdb5/mal/mal_interpreter.h
+++ b/monetdb5/mal/mal_interpreter.h
@@ -40,7 +40,7 @@ mal_export void showErrors(Client cntxt)
mal_export MalStkPtr prepareMALstack(MalBlkPtr mb, int size);
mal_export str runMAL(Client c, MalBlkPtr mb, MalBlkPtr mbcaller, MalStkPtr
env);
mal_export str runMALsequence(Client cntxt, MalBlkPtr mb, int startpc, int
stoppc, MalStkPtr stk, MalStkPtr env, InstrPtr pcicaller);
-mal_export str reenterMAL(Client cntxt, MalBlkPtr mb, int startpc, int stoppc,
MalStkPtr stk, MalStkPtr env, InstrPtr pcicaller);
+mal_export str reenterMAL(Client cntxt, MalBlkPtr mb, int startpc, int stoppc,
MalStkPtr stk);
mal_export str callMAL(Client cntxt, MalBlkPtr mb, MalStkPtr *glb, ValPtr
argv[], char debug);
mal_export void garbageElement(Client cntxt, ValPtr v);
mal_export void garbageCollector(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
int flag);
diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -2220,7 +2220,7 @@ RECYCLEreuse(Client cntxt, MalBlkPtr mb,
s->keepAlive = TRUE;
k = p->recycle;
p->recycle = NO_RECYCLING; /* No recycling for instructions with
subsumption */
- (void) reenterMAL(cntxt,mb,i,i+1,s,0,0);
+ (void) reenterMAL(cntxt,mb,i,i+1,s);
/* restore the situation */
/* ticks = GDKusec() - ticks; */
p->recycle= k;
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
@@ -92,6 +92,23 @@ dflowAssignTest(Lifespan span, InstrPtr
return 0;
}
+/* a limited set of MAL instructions may appear in the dataflow block*/
+static int
+dflowInstruction(InstrPtr p) {
+ switch(p->token){
+ case ASSIGNsymbol:
+ case PATcall:
+ case CMDcall:
+ case FACcall:
+ case FCNcall:
+ case NOOPsymbol:
+ case REMsymbol:
+ return ! ( hasSideEffects(p,FALSE) || isUnsafeFunction(p)
||
+ blockCntrl(p) || (getModuleId(p) !=
sqlRef && isUpdateInstruction(p)));
+ }
+ return 0;
+}
+
int
OPTdataflowImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
p)
{
@@ -140,7 +157,7 @@ OPTdataflowImplementation(Client cntxt,
if (p->token == ENDsymbol)
break;
- if (hasSideEffects(p,FALSE) || isUnsafeFunction(p) ||
blockCntrl(p) || (!dumbcopy && blockExit(p)) || (getModuleId(p) != sqlRef &&
isUpdateInstruction(p)) || dflowAssignTest(span,p,i) ){
+ if (!dflowInstruction(p) || (!dumbcopy && blockExit(p)) ||
dflowAssignTest(span,p,i) ){
/* close old flow block */
if (flowblock){
int sf = simpleFlow(old,start,i);
diff --git a/monetdb5/optimizer/opt_evaluate.c
b/monetdb5/optimizer/opt_evaluate.c
--- a/monetdb5/optimizer/opt_evaluate.c
+++ b/monetdb5/optimizer/opt_evaluate.c
@@ -143,7 +143,7 @@ OPTevaluateImplementation(Client cntxt,
p->barrier = 0;
profiler = malProfileMode; /* we don't trace it */
malProfileMode = 0;
- msg = reenterMAL(cntxt, mb, i, i + 1, env, 0, 0);
+ msg = reenterMAL(cntxt, mb, i, i + 1, env);
malProfileMode= profiler;
p->barrier = barrier;
OPTDEBUGevaluate {
diff --git a/monetdb5/scheduler/run_pipeline.c
b/monetdb5/scheduler/run_pipeline.c
--- a/monetdb5/scheduler/run_pipeline.c
+++ b/monetdb5/scheduler/run_pipeline.c
@@ -278,7 +278,7 @@ RUNsqlbind(Client cntxt, MalBlkPtr mb, M
for (i = 0; i < mb->stop; i++) {
p = getInstrPtr(mb, i);
if (p->fcn == f) {
- if ((msg = reenterMAL(cntxt, mb, i, i + 1, stk, 0, 0)))
+ if ((msg = reenterMAL(cntxt, mb, i, i + 1, stk)))
break;
/* fetch the BAT properties and turn off this
instruction */
p->token = NOOPsymbol;
diff --git a/sql/backends/monet5/datacell/petrinet.c
b/sql/backends/monet5/datacell/petrinet.c
--- a/sql/backends/monet5/datacell/petrinet.c
+++ b/sql/backends/monet5/datacell/petrinet.c
@@ -592,7 +592,7 @@ reinit:
(void)
MTIMEcurrent_timestamp(&baskets[idx].seen);
t = GDKusec();
pnet[i].cycles++;
- msg = reenterMAL(cntxt, mb, pnet[i].pc,
pnet[i].pc + 1, glb, 0, 0);
+ msg = reenterMAL(cntxt, mb, pnet[i].pc,
pnet[i].pc + 1, glb);
pnet[i].time += GDKusec() - t + analysis; /*
keep around in microseconds */
if (msg != MAL_SUCCEED && !strstr(msg, "too
early")) {
char buf[BUFSIZ];
@@ -604,7 +604,7 @@ reinit:
pnet[i].enabled = -1;
/* abort current transaction */
if ( abortpc )
- msg = reenterMAL(cntxt, mb,
abortpc, abortpc + 1, glb, 0, 0);
+ msg = reenterMAL(cntxt, mb,
abortpc, abortpc + 1, glb);
} else {
(void)
MTIMEcurrent_timestamp(&pnet[i].seen);
for (j = 0; j < pnet[i].srctop; j++) {
diff --git a/sql/backends/monet5/datacell/receptor.c
b/sql/backends/monet5/datacell/receptor.c
--- a/sql/backends/monet5/datacell/receptor.c
+++ b/sql/backends/monet5/datacell/receptor.c
@@ -635,7 +635,7 @@ RCgeneratorInternal(Receptor rc)
case BSKTERROR:
return;
case BSKTRUNNING:
- reenterMAL(cntxt, mb, pc, pc + 1, glb, 0, 0);
+ reenterMAL(cntxt, mb, pc, pc + 1, glb);
}
}
diff --git a/sql/backends/monet5/sql_emptyset.c
b/sql/backends/monet5/sql_emptyset.c
--- a/sql/backends/monet5/sql_emptyset.c
+++ b/sql/backends/monet5/sql_emptyset.c
@@ -316,7 +316,7 @@ SQLemptyset(Client cntxt, MalBlkPtr mb,
actions, mb->errors,start+1);
printFunction(cntxt->fdout, mb,0, LIST_MAL_STMT |
LIST_MAPI);
#endif
- msg= reenterMAL(cntxt,mb,start+1,0,stk,0,0);
+ msg= reenterMAL(cntxt,mb,start+1,0,stk);
}
#ifdef DEBUG_SQL_EMPTYSET
else mnstr_printf(cntxt->fdout,"#optimizer fails:%s\n",msg);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list