Changeset: 4b31e29fee1d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4b31e29fee1d
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/modules/mal/manifold.c
        monetdb5/modules/mal/manifold.h
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_support.c
Branch: Jul2017
Log Message:

Only look at the unsafe property when deciding whether the instruction can be 
elided.


diffs (90 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
@@ -1274,7 +1274,7 @@ size_t MALrunningThreads(void);
 str MALstartDataflow(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str MANIFOLDevaluate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str MANIFOLDremapMultiplex(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
p);
-MALfcn MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci);
+MALfcn MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci, int 
checkprops);
 str MANUALcreateOverview(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 str MATHbinary_ATAN2dbl(dbl *res, const dbl *a, const dbl *b);
 str MATHbinary_ATAN2flt(flt *res, const flt *a, const flt *b);
diff --git a/monetdb5/modules/mal/manifold.c b/monetdb5/modules/mal/manifold.c
--- a/monetdb5/modules/mal/manifold.c
+++ b/monetdb5/modules/mal/manifold.c
@@ -195,7 +195,7 @@ bunins_failed:
  * to use this implementation instead of the MAL loop.
  */
 MALfcn
-MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci){
+MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci, int checkprops){
        int i, k, tpe= 0;
        InstrPtr q=0;
        MalBlkPtr nmb;
@@ -237,7 +237,7 @@ MANIFOLDtypecheck(Client cntxt, MalBlkPt
        // Localize the underlying scalar operator
        typeChecker(cntxt->fdout, cntxt->nspace, nmb, q, TRUE);
        if (nmb->errors || q->fcn == NULL || q->token != CMDcall ||
-               (q->blk && q->blk->unsafeProp) )
+               (checkprops && q->blk && q->blk->unsafeProp) )
                fcn = NULL;
        else {
                fcn = q->fcn;
@@ -266,7 +266,7 @@ MANIFOLDevaluate(Client cntxt, MalBlkPtr
        str msg = MAL_SUCCEED;
        MALfcn fcn;
 
-       fcn= MANIFOLDtypecheck(cntxt,mb,pci);
+       fcn= MANIFOLDtypecheck(cntxt,mb,pci,0);
        if( fcn == NULL)
                throw(MAL, "mal.manifold", "Illegal manifold function call");
 
diff --git a/monetdb5/modules/mal/manifold.h b/monetdb5/modules/mal/manifold.h
--- a/monetdb5/modules/mal/manifold.h
+++ b/monetdb5/modules/mal/manifold.h
@@ -20,7 +20,7 @@
 
 /* #define _DEBUG_MANIFOLD_*/
 
-mal_export MALfcn MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci);
+mal_export MALfcn MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci, 
int checkprops);
 mal_export str MANIFOLDevaluate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str MANIFOLDremapMultiplex(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr p);
 
diff --git a/monetdb5/optimizer/opt_dataflow.c 
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -96,7 +96,7 @@ dataflowBreakpoint(Client cntxt, MalBlkP
        int j;
 
        if (p->token == ENDsymbol || p->barrier || isUnsafeFunction(p) || 
-          (isMultiplex(p) && MANIFOLDtypecheck(cntxt,mb,p) == NULL) ){
+               (isMultiplex(p) && MANIFOLDtypecheck(cntxt,mb,p,0) == NULL) ){
 #ifdef DEBUG_OPT_DATAFLOW
                        fprintf(stderr,"#breakpoint on instruction\n");
 #endif
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
@@ -230,7 +230,7 @@ OPTmultiplexImplementation(Client cntxt,
        for (i = 0; i < limit; i++) {
                p = old[i];
                if (msg == MAL_SUCCEED && isMultiplex(p)) { 
-                       if ( MANIFOLDtypecheck(cntxt,mb,p) != NULL){
+                       if ( MANIFOLDtypecheck(cntxt,mb,p,0) != NULL){
                                setFunctionId(p, manifoldRef);
                                p->typechk = TYPE_UNKNOWN;
                                pushInstruction(mb, p);
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
@@ -453,7 +453,7 @@ mayhaveSideEffects(Client cntxt, MalBlkP
                return TRUE;
        if (getModuleId(p) != malRef || getFunctionId(p) != multiplexRef) 
                return hasSideEffects(mb, p, strict);
-       if (MANIFOLDtypecheck(cntxt,mb,p) == NULL)
+       if (MANIFOLDtypecheck(cntxt,mb,p,1) == NULL)
                return TRUE;
        return FALSE;
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to