Changeset: 764eee365b0e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=764eee365b0e
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/optimizer/opt_evaluate.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_multiplex.h
        monetdb5/optimizer/opt_remap.c
        monetdb5/optimizer/opt_support.c
Branch: default
Log Message:

workaround rand unsafe problem (ie special case in opt_evaluate)
bailout of multiplex will do an extra simple optimize call, such
that functions with inline property set get the multiplex call
rewriten.


diffs (92 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
@@ -1519,7 +1519,7 @@ int OPTmergetableImplementation(Client c
 int OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
 int OPTmitosisPlanOverdue(Client cntxt, str fname);
 int OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-str OPTmultiplexSimple(Client cntxt);
+str OPTmultiplexSimple(Client cntxt, MalBlkPtr mb);
 str OPTorcam(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
 int OPTorcamImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
p);
 int OPTprofilerImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
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
@@ -16,10 +16,12 @@ OPTallConstant(Client cntxt, MalBlkPtr m
        int i;
        (void)cntxt;
 
-       if ( !( p->token == ASSIGNsymbol ||
-                       getModuleId(p) == calcRef ||
+       if ( !(p->token == ASSIGNsymbol ||
+                  getModuleId(p) == calcRef ||
                   getModuleId(p) == strRef ||
-                  getModuleId(p) == mmathRef ))
+                  getModuleId(p) == mmathRef))
+               return FALSE;
+       if (getModuleId(p) == mmathRef && strcmp(getFunctionId(p), "rand") == 0)
                return FALSE;
 
        for (i = p->retc; i < p->argc; i++)
diff --git a/monetdb5/optimizer/opt_multiplex.c 
b/monetdb5/optimizer/opt_multiplex.c
--- a/monetdb5/optimizer/opt_multiplex.c
+++ b/monetdb5/optimizer/opt_multiplex.c
@@ -184,9 +184,9 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
  * and interpretation overhead.
  */
 str
-OPTmultiplexSimple(Client cntxt)
+OPTmultiplexSimple(Client cntxt, MalBlkPtr mb)
 {
-       MalBlkPtr mb= cntxt->curprg->def;
+       //MalBlkPtr mb= cntxt->curprg->def;
        int i, doit=0;
        InstrPtr p;
        if(mb)
diff --git a/monetdb5/optimizer/opt_multiplex.h 
b/monetdb5/optimizer/opt_multiplex.h
--- a/monetdb5/optimizer/opt_multiplex.h
+++ b/monetdb5/optimizer/opt_multiplex.h
@@ -14,7 +14,7 @@
 #include "opt_support.h"
 
 opt_export int OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, 
MalStkPtr stk, InstrPtr pci);
-opt_export str OPTmultiplexSimple(Client cntxt);
+opt_export str OPTmultiplexSimple(Client cntxt, MalBlkPtr mb);
 
 #define OPTDEBUGmultiplex  if ( optDebug & ((lng)1 <<DEBUG_OPT_MULTIPLEX) )
 
diff --git a/monetdb5/optimizer/opt_remap.c b/monetdb5/optimizer/opt_remap.c
--- a/monetdb5/optimizer/opt_remap.c
+++ b/monetdb5/optimizer/opt_remap.c
@@ -15,6 +15,7 @@
 #include "monetdb_config.h"
 #include "opt_remap.h"
 #include "opt_macro.h"
+#include "opt_multiplex.h"
 
 static int
 OPTremapDirect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, Module 
scope){
@@ -264,6 +265,10 @@ terminateMX:
                }
                freeMalBlk(mq);
                GDKfree(upgrade);
+
+               /* ugh ugh, fallback to non inline, but optimized code */
+               OPTmultiplexSimple(cntxt, s->def);
+               s->def->inlineProp = 0;
                return 0;
        }
        /*
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -292,7 +292,7 @@ MALoptimizer(Client c)
                return MAL_SUCCEED;
        msg= optimizeMALBlock(c, c->curprg->def);
        if( msg == MAL_SUCCEED)
-               OPTmultiplexSimple(c);
+               OPTmultiplexSimple(c, c->curprg->def);
        return msg;
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to