Changeset: dbbff5f9ce85 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dbbff5f9ce85
Modified Files:
clients/Tests/exports.stable.out
monetdb5/mal/mal_function.c
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_instruction.h
monetdb5/mal/mal_session.c
monetdb5/optimizer/opt_macro.c
monetdb5/optimizer/opt_mitosis.c
Branch: default
Log Message:
Use variables flags for isUsed
Avoid creation of auxiliary structures for simple tests.
diffs (174 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2519,7 +2519,7 @@ int timestamp_tz_fromstr(const char *buf
int timestamp_tz_tostr(str *buf, int *len, const timestamp *val, const tzone
*timezone);
str transRef;
void trimMalVariables(MalBlkPtr mb, MalStkPtr stk);
-void trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb);
+void trimMalVariables_(MalBlkPtr mb, MalStkPtr glb);
void typeChecker(stream *out, Module scope, MalBlkPtr mb, InstrPtr p, int
silent);
int tzone_fromstr(const char *buf, int *len, tzone **d);
tzone tzone_local;
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
@@ -531,6 +531,19 @@ listFunction(stream *fd, MalBlkPtr mb, M
void printFunction(stream *fd, MalBlkPtr mb, MalStkPtr stk, int flg)
{
+ int i,j;
+ InstrPtr p;
+ // Set the used bits properly
+ for(i=0; i< mb->vtop; i++)
+ clrVarUsed(mb,i);
+ for(i=0; i< mb->stop; i++){
+ p= getInstrPtr(mb,i);
+ for(j= p->retc; j<p->argc; j++)
+ setVarUsed(mb, getArg(p,j));
+ if( p->barrier)
+ for(j= 0; j< p->retc; j++)
+ setVarUsed(mb, getArg(p,j));
+ }
listFunction(fd,mb,stk,flg,0,mb->stop);
}
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -901,7 +901,7 @@ freeVariable(MalBlkPtr mb, int varid)
* that do not contribute.
*/
void
-trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb)
+trimMalVariables_(MalBlkPtr mb, MalStkPtr glb)
{
int *vars, cnt = 0, i, j;
int maxid = 0,m;
@@ -913,7 +913,7 @@ trimMalVariables_(MalBlkPtr mb, bit *use
/* build the alias table */
for (i = 0; i < mb->vtop; i++) {
- if (used[i] == 0) {
+ if ( isVarUsed(mb,i) == 0) {
if (glb && isVarConstant(mb, i))
VALclear(&glb->stk[i]);
freeVariable(mb, i);
@@ -967,25 +967,20 @@ trimMalVariables_(MalBlkPtr mb, bit *use
void
trimMalVariables(MalBlkPtr mb, MalStkPtr stk)
{
- bit *used;
int i, j;
InstrPtr q;
- used = (bit *) GDKzalloc(mb->vtop);
- if( used == NULL){
- GDKerror("trimMalVariables" MAL_MALLOC_FAIL);
- return;
- }
-
+ /* reset the use bit */
+ for (i = 0; i < mb->vtop; i++)
+ clrVarUsed(mb,i);
/* build the use table */
for (i = 0; i < mb->stop; i++) {
q = getInstrPtr(mb, i);
for (j = 0; j < q->argc; j++)
- used[getArg(q, j)] = 1;
+ setVarUsed(mb,getArg(q,j));
}
- trimMalVariables_(mb, used, stk);
- GDKfree(used);
+ trimMalVariables_(mb, stk);
}
/* MAL constants
diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h
--- a/monetdb5/mal/mal_instruction.h
+++ b/monetdb5/mal/mal_instruction.h
@@ -136,7 +136,7 @@ mal_export MalBlkPtr copyMalBlk(MalBlkPt
mal_export void addtoMalBlkHistory(MalBlkPtr mb);
mal_export MalBlkPtr getMalBlkHistory(MalBlkPtr mb, int idx);
mal_export void trimMalVariables(MalBlkPtr mb, MalStkPtr stk);
-mal_export void trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb);
+mal_export void trimMalVariables_(MalBlkPtr mb, MalStkPtr glb);
mal_export void moveInstruction(MalBlkPtr mb, int pc, int target);
mal_export void insertInstruction(MalBlkPtr mb, InstrPtr p, int pc);
mal_export void removeInstruction(MalBlkPtr mb, InstrPtr p);
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -375,21 +375,16 @@ void
MSresetVariables(Client cntxt, MalBlkPtr mb, MalStkPtr glb, int start)
{
int i;
- bit *used = GDKzalloc(mb->vtop * sizeof(bit));
- if( used == NULL){
- GDKerror("MSresetVariables" MAL_MALLOC_FAIL);
- return;
- }
for (i = 0; i < start && start < mb->vtop; i++)
- used[i] = 1;
+ setVarUsed(mb,i);
if (mb->errors == 0)
for (i = start; i < mb->vtop; i++) {
- if (used[i] || !isTmpVar(mb,i)){
+ if (isVarUsed(mb,i) || !isTmpVar(mb,i)){
assert(!mb->var[i]->value.vtype ||
isVarConstant(mb, i));
- used[i] = 1;
+ setVarUsed(mb,i);
}
- if (glb && !used[i]) {
+ if (glb && !isVarUsed(mb,i)) {
if (isVarConstant(mb, i))
garbageElement(cntxt, &glb->stk[i]);
/* clean stack entry */
@@ -400,8 +395,7 @@ MSresetVariables(Client cntxt, MalBlkPtr
}
if (mb->errors == 0)
- trimMalVariables_(mb, used, glb);
- GDKfree(used);
+ trimMalVariables_(mb, glb);
}
/*
diff --git a/monetdb5/optimizer/opt_macro.c b/monetdb5/optimizer/opt_macro.c
--- a/monetdb5/optimizer/opt_macro.c
+++ b/monetdb5/optimizer/opt_macro.c
@@ -132,8 +132,6 @@ inlineMALblock(MalBlkPtr mb, int pc, Mal
nv[n] = newVariable(mb, mc->var[n]->id,
strlen(mc->var[n]->id), TYPE_str);
if (isVarUDFtype(mc,n))
setVarUDFtype(mb,nv[n]);
- if (isVarUsed(mc,n))
- setVarUsed(mb,nv[n]);
} else if (isVarTypedef(mc,n)) {
nv[n] = newTypeVariable(mb,getVarType(mc,n));
} else if (isVarConstant(mc,n)) {
@@ -142,8 +140,6 @@ inlineMALblock(MalBlkPtr mb, int pc, Mal
nv[n] = newTmpVariable(mb, getVarType(mc, n));
if (isVarUDFtype(mc,n))
setVarUDFtype(mb,nv[n]);
- if (isVarUsed(mc,n))
- setVarUsed(mb,nv[n]);
}
}
diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c
--- a/monetdb5/optimizer/opt_mitosis.c
+++ b/monetdb5/optimizer/opt_mitosis.c
@@ -234,11 +234,9 @@ OPTmitosisImplementation(Client cntxt, M
qv = getArg(q, 0) = newTmpVariable(mb, qtpe);
setVarUDFtype(mb, qv);
- setVarUsed(mb, qv);
if (upd) {
rv = getArg(q, 1) = newTmpVariable(mb, rtpe);
setVarUDFtype(mb, rv);
- setVarUsed(mb, rv);
}
pushInstruction(mb, q);
matq = pushArgument(mb, matq, qv);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list