Changeset: 94ab750cd601 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=94ab750cd601
Modified Files:
monetdb5/modules/mal/mal_weld.c
monetdb5/modules/mal/mal_weld.h
monetdb5/modules/mal/mal_weld.mal
monetdb5/modules/mal/mal_weld.mal.sh
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_weld.c
Branch: mal-weld
Log Message:
weld impl for bat.mirror and batcalc.identity
diffs (144 lines):
diff --git a/monetdb5/modules/mal/mal_weld.c b/monetdb5/modules/mal/mal_weld.c
--- a/monetdb5/modules/mal/mal_weld.c
+++ b/monetdb5/modules/mal/mal_weld.c
@@ -1166,6 +1166,34 @@ WeldBatMergeCand(Client cntxt, MalBlkPtr
}
str
+WeldBatMirror(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ (void) cntxt;
+ (void) mb;
+ int ret = getArg(pci, 0);
/* bat[:oid] */
+ int bid = getArg(pci, 1);
/* bat[:any_1] */
+ weldState *wstate = *getArgReference_ptr(stk, pci, pci->argc - 1); /*
has value */
+
+ char weldStmt[STR_SIZE_INC];
+ sprintf(weldStmt,
+ "let v%d = result("
+ " for(rangeiter(v%dhseqbase, v%dhseqbase + len(v%d), 1L),
appender[i64], |b, i, n|"
+ " merge(b, n)"
+ " )"
+ ");"
+ "let v%dhseqbase = 0L;",
+ ret, bid, bid, bid, ret);
+ appendWeldStmt(wstate, weldStmt);
+ return MAL_SUCCEED;
+}
+
+str
+WeldBatcalcIdentity(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ return WeldBatMirror(cntxt, mb, stk, pci);
+}
+
+str
WeldLanguagePass(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
(void) cntxt;
diff --git a/monetdb5/modules/mal/mal_weld.h b/monetdb5/modules/mal/mal_weld.h
--- a/monetdb5/modules/mal/mal_weld.h
+++ b/monetdb5/modules/mal/mal_weld.h
@@ -45,6 +45,8 @@ mal_export str WeldAggrSubMax(Client cnt
mal_export str WeldAggrSubCount(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mal_export str WeldBatMtimeYear(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mal_export str WeldBatMergeCand(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+mal_export str WeldBatMirror(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+mal_export str WeldBatcalcIdentity(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mal_export str WeldLanguagePass(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
#endif
diff --git a/monetdb5/modules/mal/mal_weld.mal
b/monetdb5/modules/mal/mal_weld.mal
--- a/monetdb5/modules/mal/mal_weld.mal
+++ b/monetdb5/modules/mal/mal_weld.mal
@@ -101,6 +101,14 @@ pattern batmergecand(a:bat[:oid], b:bat[
address WeldBatMergeCand
comment "bat.mergecand";
+pattern batmirror(b:bat[:any_2], wstate:ptr):bat[:oid]
+address WeldBatMirror
+comment "bat.mirror";
+
+pattern batcalcidentity(b:bat[:any_2], wstate:ptr):bat[:oid]
+address WeldBatcalcIdentity
+comment "batcalc.identity";
+
pattern aggrsum(b:bat[:bte], wstate:ptr):bte
address WeldAggrSum
comment "aggr.sum";
diff --git a/monetdb5/modules/mal/mal_weld.mal.sh
b/monetdb5/modules/mal/mal_weld.mal.sh
--- a/monetdb5/modules/mal/mal_weld.mal.sh
+++ b/monetdb5/modules/mal/mal_weld.mal.sh
@@ -111,6 +111,14 @@ pattern batmergecand(a:bat[:oid], b:bat[
address WeldBatMergeCand
comment "bat.mergecand";
+pattern batmirror(b:bat[:any_2], wstate:ptr):bat[:oid]
+address WeldBatMirror
+comment "bat.mirror";
+
+pattern batcalcidentity(b:bat[:any_2], wstate:ptr):bat[:oid]
+address WeldBatcalcIdentity
+comment "batcalc.identity";
+
EOF
for tp in ${numeric[@]}; do
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -325,7 +325,9 @@ str weldBatcalcLeRef;
str weldBatcalcGtRef;
str weldBatcalcGeRef;
str weldBatcalcNeRef;
+str weldBatcalcIdentityRef;
str weldBatMergeCandRef;
+str weldBatMirrorRef;
str weldBatMtimeYearRef;
str weldGetResultRef;
str weldGroupRef;
@@ -646,7 +648,9 @@ void optimizerInit(void)
weldBatcalcGtRef = putName("batcalcgt");
weldBatcalcGeRef = putName("batcalcge");
weldBatcalcNeRef = putName("batcalcne");
+ weldBatcalcIdentityRef = putName("batcalcidentity");
weldBatMergeCandRef = putName("batmergecand");
+ weldBatMirrorRef = putName("batmirror");
weldBatMtimeYearRef = putName("batmtimeyear");
weldGetResultRef = putName("getresult");
weldGroupRef = putName("groupgroup");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -333,7 +333,9 @@ mal_export str weldBatcalcLeRef;
mal_export str weldBatcalcGtRef;
mal_export str weldBatcalcGeRef;
mal_export str weldBatcalcNeRef;
+mal_export str weldBatcalcIdentityRef;
mal_export str weldBatMergeCandRef;
+mal_export str weldBatMirrorRef;
mal_export str weldBatMtimeYearRef;
mal_export str weldGetResultRef;
mal_export str weldGroupRef;
diff --git a/monetdb5/optimizer/opt_weld.c b/monetdb5/optimizer/opt_weld.c
--- a/monetdb5/optimizer/opt_weld.c
+++ b/monetdb5/optimizer/opt_weld.c
@@ -18,7 +18,7 @@
#include "mal_instruction.h"
#include "opt_weld.h"
-#define NUM_WELD_INSTR 28
+#define NUM_WELD_INSTR 30
#define UNMARKED 0
#define TEMP_MARK 1
#define PERM_MARK 2
@@ -65,7 +65,9 @@ static void initWeldInstrs(void) {
addWeldInstr(batcalcRef, gtRef, weldBatcalcGtRef);
/* batcalc.> */
addWeldInstr(batcalcRef, geRef, weldBatcalcGeRef);
/* batcalc.>= */
addWeldInstr(batcalcRef, neRef, weldBatcalcNeRef);
/* batcalc.!= */
+ addWeldInstr(batcalcRef, identityRef, weldBatcalcIdentityRef);
/* batcalc.identity */
addWeldInstr(batRef, mergecandRef, weldBatMergeCandRef);
/* bat.mergecand */
+ addWeldInstr(batRef, mirrorRef, weldBatMirrorRef);
/* bat.mirror */
addWeldInstr(batmtimeRef, yearRef, weldBatMtimeYearRef);
/* batmtime.year */
addWeldInstr(languageRef, passRef, weldLanguagePassRef);
/* language.pass */
addWeldInstr(groupRef, groupRef, weldGroupRef);
/* group.group*/
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list