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