Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8394/compiler/mil
Modified Files:
mil.c milgen.brg milprint.c
Log Message:
* Add mil functions hmark, tmark and leftfetchjoin for the algebra backend.
* With the help of hmark and leftfetchjoin now the fn:name works as it should,
thus test benchmark/XPathMark/A11.xq should produce the right output from
now on.
Index: milprint.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milprint.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- milprint.c 11 Jan 2008 10:47:10 -0000 1.59
+++ milprint.c 17 Jan 2008 14:10:54 -0000 1.60
@@ -228,11 +228,14 @@
, [m_fetch] = "fetch"
, [m_project] = "project"
, [m_mark] = "mark"
+ , [m_hmark] = "hmark"
+ , [m_tmark] = "tmark"
, [m_mark_grp] = "mark_grp"
, [m_access] = "access"
, [m_cross] = "cross"
, [m_join] = "join"
, [m_leftjoin] = "leftjoin"
+ , [m_leftfetchjoin]= "leftfetchjoin"
, [m_thetajoin] = "thetajoin"
, [m_unq2_tjoin] = "htordered_unique_thetajoin"
, [m_unq1_tjoin] = "ll_htordered_unique_thetajoin"
@@ -749,6 +752,10 @@
case m_project:
/* expression : expression '.mark (' expression ')' */
case m_mark:
+ /* expression : expression '.hmark (' expression ')' */
+ case m_hmark:
+ /* expression : expression '.tmark (' expression ')' */
+ case m_tmark:
/* expression : expression '.mark_grp (' expression ')' */
case m_mark_grp:
/* expression : expression '.cross (' expression ')' */
@@ -757,6 +764,8 @@
case m_join:
/* expression : expression '.leftjoin (' expression ')' */
case m_leftjoin:
+ /* expression : expression '.leftfetchjoin (' expression ')' */
+ case m_leftfetchjoin:
/* expression : expression '.CTrefine (' expression ')' */
case m_ctrefine:
/* expression : expression '.CTrefine_rev (' expression ')' */
Index: mil.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/mil.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- mil.c 15 Jan 2008 15:52:58 -0000 1.46
+++ mil.c 17 Jan 2008 14:10:53 -0000 1.47
@@ -591,6 +591,25 @@
}
/**
+ * Monet hmark() function.
+ */
+PFmil_t *
+PFmil_hmark (const PFmil_t *bat, const PFmil_t *value)
+{
+ return wire2 (m_hmark, bat, value);
+}
+
+/**
+ * Monet tmark() function.
+ */
+PFmil_t *
+PFmil_tmark (const PFmil_t *bat, const PFmil_t *value)
+{
+ return wire2 (m_tmark, bat, value);
+}
+
+
+/**
* Monet mark_grp() function.
*/
PFmil_t *
@@ -649,6 +668,16 @@
}
/**
+ * Monet join operator
+ */
+PFmil_t *
+PFmil_leftfetchjoin (const PFmil_t *a, const PFmil_t *b)
+{
+ return wire2 (m_leftfetchjoin, a, b);
+}
+
+
+/**
* Monet thetajoin() operator
*/
PFmil_t *
Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -d -r1.97 -r1.98
--- milgen.brg 15 Jan 2008 15:52:58 -0000 1.97
+++ milgen.brg 17 Jan 2008 14:10:53 -0000 1.98
@@ -4062,9 +4062,13 @@
PFalg_att_t att;
PFmil_t *name = NULL;
PFmil_t *frag = NULL;
+ PFmil_t *args = NULL;
PFmil_ident_t node_qn = PF_MIL_VAR_UNUSED;
PFmil_ident_t node_cont = PF_MIL_VAR_UNUSED;
mvar_t *prefix = new_var(1);
+ mvar_t *prefix_bool = new_var(1);
+ mvar_t *true_oid = new_var(1);
+ mvar_t *false_oid = new_var(1);
att = p->sem.fun_1to1.refs.atts[0];
@@ -4086,10 +4090,7 @@
assert(!"should never reach here"); break;
}
- /* get all prefix and add : to the ones that are not "" */
- /* FIXME: not sure if this mil code (the first execute
- command) actually works correctly, therefore
- it must be tested and changed if necessery. */
+ /* get all prefix */
execute (
assgn (var (prefix->name),
mposjoin ( mposjoin (name,
@@ -4101,11 +4102,37 @@
fetch (var (PF_MIL_VAR_WS),
var (node_cont))),
fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_QN_PREFIX)))),
- madd (uselect (meq (var (prefix->name),
- lit_str("")),
- lit_bit(false)),
- lit_str(":")));
+ var
(PF_MIL_VAR_QN_PREFIX)))));
+
+ /* add ":" only to prefix that are not "" */
+
+ execute (
+ assgn (var (prefix_bool->name),
+ meq (var (prefix->name),
+ lit_str(""))),
+ assgn (var (true_oid->name),
+ hmark (uselect (var (prefix_bool->name),
+ lit_bit(true)),
+ lit_oid(0))),
+ assgn (var (false_oid->name),
+ hmark (uselect (var (prefix_bool->name),
+ lit_bit(false)),
+ lit_oid(0))),
+ assgn (var (prefix->name),
+ madd (leftfetchjoin (var (false_oid->name),
+ var (prefix->name)),
+ lit_str(":"))));
+
+ args = arg ( arg (var (true_oid->name), var
(false_oid->name)),
+ arg (lit_str(""), var (prefix->name)));
+ execute (
+ assgn (var (prefix->name),
+ fetch (merged_union (args),
+ lit_int(1))));
+
+ unpin(prefix_bool, 1);
+ unpin(true_oid, 1);
+ unpin(false_oid, 1);
execute (
assgn (var (res->name),
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins