Changeset: ba45789614bb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba45789614bb
Modified Files:
clients/Tests/exports.stable.out
monetdb5/optimizer/opt_dataflow.c
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_support.c
monetdb5/optimizer/opt_support.h
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
Branch: jit
Log Message:
Merge with default
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
@@ -2350,6 +2350,7 @@ str operatorName(int i);
lng optDebug;
str optimizeMALBlock(Client cntxt, MalBlkPtr mb);
str optimizerCheck(Client cntxt, MalBlkPtr mb, str name, int actions, lng
usec);
+int optimizerIsApplied(MalBlkPtr mb, str name);
str optimizerRef;
str optimizer_prelude(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str pack2Ref;
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
@@ -208,6 +208,8 @@ OPTdataflowImplementation(Client cntxt,
if (GDKnr_threads <= 1)
return 0;
+ if ( optimizerIsApplied(mb,"dataflow"))
+ return 0;
(void) stk;
/* inlined functions will get their dataflow control later */
if ( mb->inlineProp)
diff --git a/monetdb5/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -1444,14 +1444,12 @@ mat_topn(MalBlkPtr mb, InstrPtr p, matli
pushInstruction(mb,r);
q = copyInstruction(p);
- //setFunctionId(q, subsliceRef);
- setFunctionId(q, sliceRef);
+ setFunctionId(q, subsliceRef);
if (ml->v[m].type != mat_tpn || is_slice)
getArg(q,1) = getArg(r,0);
pushInstruction(mb,q);
}
- ml->v[piv].packed = 1;
ml->v[piv].type = mat_slc;
}
}
@@ -1497,6 +1495,8 @@ OPTmergetableImplementation(Client cntxt
char buf[256];
lng usec = GDKusec();
+ if( optimizerIsApplied(mb, "mergetable"))
+ return 0;
old = mb->stmt;
oldtop= mb->stop;
OPTDEBUGmergetable {
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
@@ -204,6 +204,24 @@ OPTsetDebugStr(void *ret, str *nme)
return MAL_SUCCEED;
}
+/* some optimizers can only be applied once.
+ * The optimizer trace at the end of the MAL block
+ * can be used to check for this.
+ */
+int
+optimizerIsApplied(MalBlkPtr mb, str optname)
+{
+ InstrPtr p;
+ int i;
+ for( i = mb->stop; i < mb->ssize; i++){
+ p = getInstrPtr(mb,i);
+ if( p == NULL)
+ return 0;
+ if (getModuleId(p) == optimizerRef && p->token == REMsymbol &&
strcmp(getFunctionId(p),optname) == 0)
+ return 1;
+ }
+ return 0;
+}
/*
* All optimizers should pass the optimizerCheck for defense against
* incomplete and malicious MAL code.
diff --git a/monetdb5/optimizer/opt_support.h b/monetdb5/optimizer/opt_support.h
--- a/monetdb5/optimizer/opt_support.h
+++ b/monetdb5/optimizer/opt_support.h
@@ -75,6 +75,7 @@ mal_export str optimizeMALBlock(Client c
mal_export void showOptimizerStep(str fnme,int i, int flg);
mal_export void showOptimizerHistory(void);
+mal_export int optimizerIsApplied(MalBlkPtr mb, str name);
mal_export int isUnsafeInstruction(InstrPtr q);
mal_export int isUnsafeFunction(InstrPtr q);
mal_export int isInvariant(MalBlkPtr mb, int pcf, int pcl, int varid);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list