Changeset: daa3f34a8f92 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/daa3f34a8f92
Modified Files:
        monetdb5/mal/mal_pipelines.c
        monetdb5/mal/mal_stack.c
Branch: default
Log Message:

small mal stack optimizations


diffs (113 lines):

diff --git a/monetdb5/mal/mal_pipelines.c b/monetdb5/mal/mal_pipelines.c
--- a/monetdb5/mal/mal_pipelines.c
+++ b/monetdb5/mal/mal_pipelines.c
@@ -125,7 +125,7 @@ mal_pipelines_reset(void)
 }
 
 static MalStkPtr
-stack_copy(allocator *ma, MalStkPtr stk, int start)
+stack_copy(allocator *ma, MalStkPtr stk, int start, int stop)
 {
        MalStkPtr n = newGlobalStack(ma, stk->stktop);
        ValPtr lhs, rhs;
@@ -140,27 +140,24 @@ stack_copy(allocator *ma, MalStkPtr stk,
                if (isVarConstant(stk->blk, i) > 0) {
                        if (!isVarDisabled(stk->blk, i)) {
                                rhs = &getVarConstant(stk->blk, i);
-                               if(VALcopy(ma, lhs, rhs) == NULL)
-                                       break;
-                               if (rhs->bat && rhs->val.bval) {
-                                       assert(rhs->val.bval == bat_nil);
-                                       BBPretain(rhs->val.bval);
-                               }
+                               *lhs = *rhs;
+                               lhs->allocated = false;
                        }
                } else {
                        rhs = &stk->stk[i];
-                       if (/*getVarScope(stk->blk, i) < stk->calldepth ||*/ 
((getVarDeclared(stk->blk, i) <= start && getVarEolife(stk->blk, i) > start)) 
|| !rhs->vtype) {
+                       if (getVarEolife(stk->blk, i) < start || 
getVarDeclared(stk->blk, i) > stop)
+                               continue;
+                       if (getVarDeclared(stk->blk, i) <= start) {
                                if(VALcopy(ma, lhs, rhs) == NULL)
                                        break;
                        } else if (rhs->bat) {
                                lhs->bat = rhs->bat;
                                lhs->vtype = rhs->vtype;
-                               lhs->len = 0;
                                lhs->val.bval = bat_nil;
                        } else {
                                VALinit(ma, lhs, rhs->vtype, 
ATOMnilptr(rhs->vtype));
                        }
-                       if (lhs->bat && lhs->val.bval)
+                       if (lhs->bat && lhs->val.bval && lhs->val.bval != 
bat_nil)
                                BBPretain(lhs->val.bval);
                }
        }
@@ -203,7 +200,7 @@ PIPELINEworker(void *T)
 
                        allocator *ma = MT_thread_getallocator();
                        allocator_state ma_state = ma_open(ma);
-                       MalStkPtr stk = stack_copy(ma, s->stk, s->start);
+                       MalStkPtr stk = stack_copy(ma, s->stk, s->start, 
s->stop);
 
                        MT_thread_set_qry_ctx(&s->cntxt->qryctx);
 
diff --git a/monetdb5/mal/mal_stack.c b/monetdb5/mal/mal_stack.c
--- a/monetdb5/mal/mal_stack.c
+++ b/monetdb5/mal/mal_stack.c
@@ -54,26 +54,11 @@ newGlobalStack(allocator *ma, int size)
 {
        MalStkPtr s;
 
-       s = (MalStkPtr) ma? ma_alloc(ma, stackSize(size)) : 
GDKmalloc(stackSize(size));
+       s = (MalStkPtr) ma? ma_zalloc(ma, stackSize(size)) : 
GDKzalloc(stackSize(size));
        if (!s)
                return NULL;
        s->allocated = !ma;
        s->stksize = size;
-       s->stktop = s->stkbot = s->stkdepth = s->calldepth = 0;
-       s->keepAlive = s->keepTmps = 0;
-       s->admit = s->wrapup = NULL;
-
-       s->status = 0;
-       s->pcup = 0;
-       s->tag = 0;
-       s->memory = 0;
-       s->up = NULL;
-       s->blk = NULL;
-       for(int i = 0; i < size; i++) {
-               s->stk[i].vtype = 0;
-               s->stk[i].bat = false;
-               s->stk[i].allocated = false;
-       }
        return s;
 }
 
@@ -107,15 +92,12 @@ reallocGlobalStack(allocator *ma, MalStk
 void
 clearStack(MalStkPtr s)
 {
-       ValPtr v;
-       int i;
-
        if (!s)
                return;
 
-       i = s->stktop;
-       for (v = s->stk; i > 0; i--, v++) {
-               if (v->bat) {
+       int i = s->stktop;
+       for (ValPtr v = s->stk; i > 0; i--, v++) {
+               if (v->bat && v->val.bval != bat_nil) {
                        BBPrelease(v->val.bval);
                        v->bat = false;
                } else if (v->allocated && ATOMextern(v->vtype)) {
@@ -131,6 +113,7 @@ clearStack(MalStkPtr s)
                v->allocated = false;
                v->vtype = 0;
        }
+       s->stktop = 0;
        s->stkbot = 0;
 }
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to