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

Reply via email to