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

Reply via email to