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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list