Changeset: 803337e49450 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=803337e49450
Modified Files:
gdk/gdk_heap.c
monetdb5/mal/mal_interpreter.c
monetdb5/modules/mal/tablet.c
monetdb5/optimizer/opt_evaluate.c
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/rel_bin.c
sql/storage/bat/bat_storage.c
Branch: default
Log Message:
Merge with Feb2013 branch.
diffs (truncated from 305 to 300 lines):
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -468,7 +468,8 @@ HEAPextend(Heap *h, size_t size)
}
*h = bak;
}
- GDKerror("HEAPextend: failed to extend to " SZFMT " for %s%s\n", size,
nme, ext ? ext : "");
+ GDKerror("HEAPextend: failed to extend to " SZFMT " for %s%s%s\n",
+ size, nme, ext ? "." : "", ext ? ext : "");
return -1;
}
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
@@ -348,9 +348,9 @@ prepareMALstack(MalBlkPtr mb, int size)
assert(size >= mb->vsize);
stk = newGlobalStack(size);
- memset((char *)stk, 0, stackSize(size));
+ //memset((char *)stk, 0, stackSize(size)); already set
+ //stk->stksize = size;
stk->stktop = mb->vtop;
- stk->stksize = size;
stk->blk = mb;
initStack(0);
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -1102,6 +1102,7 @@ SQLworker_column(READERtask *task, int c
} else
BUNins(task->as->complaints, NULL, err,
TRUE);
MT_lock_unset(&mal_copyLock, "tablet insert
value");
+ break;
}
}
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
@@ -26,24 +26,25 @@ OPTallConstant(Client cntxt, MalBlkPtr m
int i;
(void)cntxt;
- if (p->argc == p->retc)
+ if ( !( p->token == ASSIGNsymbol ||
+ getModuleId(p) == calcRef ||
+ getModuleId(p) == strRef ||
+ getModuleId(p) == mmathRef ))
return FALSE;
+
for (i = p->retc; i < p->argc; i++)
if (isVarConstant(mb, getArg(p, i)) == FALSE)
return FALSE;
for (i = 0; i < p->retc; i++)
if (isaBatType(getArgType(mb, p, i)))
return FALSE;
- return(getModuleId(p) == calcRef ||
- getModuleId(p) == strRef ||
- getModuleId(p) == mmathRef ||
- p->token == ASSIGNsymbol);
+ return p->argc != p->retc;
}
static int
OPTremoveUnusedBlocks(Client cntxt, MalBlkPtr mb)
{
- /* catch constant bounded blocks */
+ /* catch and remove constant bounded blocks */
int i, j = 0, action = 0, block = 0, skip = 0;
InstrPtr p;
@@ -85,17 +86,6 @@ OPTremoveUnusedBlocks(Client cntxt, MalB
return action;
}
-static int
-assignedOnce(MalBlkPtr mb, Lifespan span, int varid)
-{
- int i, cnt = 0;
- for (i = getBeginLifespan(span, varid); i <= getLastUpdate(span,
varid); i++)
- cnt += getArg(getInstrPtr(mb, i), 0) == varid;
- if (getInstrPtr(mb, getLastUpdate(span, varid))->barrier == EXITsymbol)
- cnt--;
- return cnt == 1;
-}
-
int
OPTevaluateImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
@@ -104,8 +94,8 @@ OPTevaluateImplementation(Client cntxt,
MalStkPtr env = NULL;
int profiler;
str msg;
- int debugstate = cntxt->itrace, actions = 0;
- Lifespan span;
+ int debugstate = cntxt->itrace, actions = 0, constantblock = 0;
+ int *assigned, use;
cntxt->itrace = 0;
(void)stk;
@@ -117,32 +107,39 @@ OPTevaluateImplementation(Client cntxt,
(void)cntxt;
OPTDEBUGevaluate mnstr_printf(cntxt->fdout, "Constant expression
optimizer started\n");
- span = setLifespan(mb);
- if (span == NULL)
- return 0;
-
- env = prepareMALstack(mb, 2 * mb->vsize);
- env->keepAlive = TRUE;
- alias = (int*)GDKzalloc(mb->vsize * sizeof(int) * 2); /* we introduce
more */
- if (alias == NULL)
+ assigned = (int*) GDKzalloc(sizeof(int) * mb->vtop);
+ if (assigned == NULL)
return 0;
limit = mb->stop;
for (i = 1; i < limit; i++) {
p = getInstrPtr(mb, i);
+ for ( k =0; k < p->retc; k++)
+ assigned[getArg(p,k)]++;
+ }
+
+ alias = (int*)GDKzalloc(mb->vsize * sizeof(int) * 2); /* we introduce
more */
+ if (alias == NULL)
+ return 0;
+
+ for (i = 1; i < limit; i++) {
+ p = getInstrPtr(mb, i);
+ use = assigned[getArg(p,0)] == 1;
for (k = p->retc; k < p->argc; k++)
if (alias[getArg(p, k)])
getArg(p, k) = alias[getArg(p, k)];
OPTDEBUGevaluate printInstruction(cntxt->fdout, mb, 0, p,
LIST_MAL_ALL);
/* be aware that you only assign once to a variable */
- if (p->retc == 1 && OPTallConstant(cntxt, mb, p) &&
!isUnsafeFunction(p)) {
- if (assignedOnce(mb, span, getArg(p, 0)) == FALSE)
- continue;
- actions++;
+ if (use && p->retc == 1 && OPTallConstant(cntxt, mb, p) &&
!isUnsafeFunction(p)) {
+ constantblock += p->barrier > 0;
barrier = p->barrier;
p->barrier = 0;
profiler = malProfileMode; /* we don't trace it */
malProfileMode = 0;
+ if ( env == NULL) {
+ env = prepareMALstack(mb, 2 * mb->vsize );
+ env->keepAlive = TRUE;
+ }
msg = reenterMAL(cntxt, mb, i, i + 1, env);
malProfileMode= profiler;
p->barrier = barrier;
@@ -154,6 +151,7 @@ OPTevaluateImplementation(Client cntxt,
int nvar;
ValRecord cst;
+ actions++;
cst.vtype = 0;
VALcopy(&cst, &env->stk[getArg(p, 0)]);
/* You may not overwrite constants. They may
be used by
@@ -183,10 +181,12 @@ OPTevaluateImplementation(Client cntxt,
}
}
}
- actions += OPTremoveUnusedBlocks(cntxt, mb);
- GDKfree(span);
+ if ( constantblock)
+ actions += OPTremoveUnusedBlocks(cntxt, mb);
+ GDKfree(assigned);
GDKfree(alias);
- freeStack(env);
+ if ( env)
+ freeStack(env);
cntxt->itrace = debugstate;
return actions;
}
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -64,9 +64,9 @@ struct PIPELINES {
{"default_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.pushselect();"
@@ -94,9 +94,9 @@ struct PIPELINES {
{"no_mitosis_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.pushselect();"
@@ -122,9 +122,9 @@ struct PIPELINES {
{"sequential_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.pushselect();"
@@ -144,9 +144,9 @@ struct PIPELINES {
{"nov2009_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.mergetable();"
@@ -171,9 +171,9 @@ struct PIPELINES {
{"replication_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.mergetable();"
@@ -194,9 +194,9 @@ struct PIPELINES {
{"recycler_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.deadcode();"
@@ -217,9 +217,9 @@ struct PIPELINES {
{"octopus_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.mitosis();"
@@ -244,9 +244,9 @@ struct PIPELINES {
{"centipede",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.centipede();"
@@ -269,10 +269,10 @@ struct PIPELINES {
{"dictionary_pipe",
"optimizer.inline();"
"optimizer.remap();"
+ "optimizer.costModel();"
"optimizer.dictionary();"
+ "optimizer.coercions();"
"optimizer.evaluate();"
- "optimizer.costModel();"
- "optimizer.coercions();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.mergetable();"
@@ -292,9 +292,9 @@ struct PIPELINES {
{"compression_pipe",
"optimizer.inline();"
"optimizer.remap();"
- "optimizer.evaluate();"
"optimizer.costModel();"
"optimizer.coercions();"
+ "optimizer.evaluate();"
"optimizer.emptySet();"
"optimizer.aliases();"
"optimizer.mergetable();"
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1341,6 +1341,7 @@ tr_update_delta( sql_trans *tr, sql_delt
obat->ibid = temp_copy(ci->batCacheid, FALSE);
bat_destroy(ci);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list