Changeset: 62ed11377998 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=62ed11377998
Modified Files:
        monetdb5/optimizer/Tests/cst01.stable.out
        monetdb5/optimizer/opt_evaluate.c
Branch: Feb2013
Log Message:

Better take care of constant expressions
The replacement of the assignment check policy caused
simple barrier block constant expressions not to be evaluated


diffs (71 lines):

diff --git a/monetdb5/optimizer/Tests/cst01.stable.out 
b/monetdb5/optimizer/Tests/cst01.stable.out
--- a/monetdb5/optimizer/Tests/cst01.stable.out
+++ b/monetdb5/optimizer/Tests/cst01.stable.out
@@ -13,19 +13,15 @@ stdout of test 'cst01` in directory 'mon
 # Listening for connection requests on mapi:monetdb://eir.ins.cwi.nl:32348/
 function user.main():void;
 # test constant expressions 
-    X16 := mmath.pi();
-    X17 := calc./(180:dbl,X16);
-    io.print(X17);
+    io.print(57.295779513082323:dbl);
     mdb.List();
 end main;
 [ 57.295779513082323 ]
 function user.main():void;              #  0 main:void := user.main() {G}
 # test constant expressions 
-    X16 := mmath.pi();                  #  2 X16:dbl := MATHpi() 
-    X17 := calc./(180:dbl,X16);         #  3 X17:dbl := 
CMDvarDIVsignal(_14:dbl, X16:dbl) 
-    io.print(X17);                      #  4 _9:void := IOprint_val(X17:dbl) 
-    mdb.List();                         #  5 _12:void := MDBlistDetail() 
-end main;                               #  6  
+    io.print(57.295779513082323:dbl);   #  2 _9:void := IOprint_val(_16:dbl) 
+    mdb.List();                         #  3 _12:void := MDBlistDetail() 
+end main;                               #  4  
 
 # 21:32:15 >  
 # 21:32:15 >  Done.
diff --git a/monetdb5/optimizer/opt_evaluate.c 
b/monetdb5/optimizer/opt_evaluate.c
--- a/monetdb5/optimizer/opt_evaluate.c
+++ b/monetdb5/optimizer/opt_evaluate.c
@@ -38,7 +38,7 @@ OPTallConstant(Client cntxt, MalBlkPtr m
        for (i = 0; i < p->retc; i++)
                if (isaBatType(getArgType(mb, p, i)))
                        return FALSE;
-       return p->argc != p->retc;
+       return TRUE;
 }
 
 static int
@@ -115,6 +115,7 @@ OPTevaluateImplementation(Client cntxt, 
        for (i = 1; i < limit; i++) {
                p = getInstrPtr(mb, i);
                for ( k =0;  k < p->retc; k++)
+               if ( p->retc != p->argc || p->token != ASSIGNsymbol )
                        assigned[getArg(p,k)]++;
        }
 
@@ -124,14 +125,13 @@ OPTevaluateImplementation(Client cntxt, 
 
        for (i = 1; i < limit; i++) {
                p = getInstrPtr(mb, i);
-               use = assigned[getArg(p,0)] == 1;
+               use = assigned[getArg(p,0)] == 1 && !(p->argc == p->retc && 
blockExit(p));
                for (k = p->retc; k < p->argc; k++)
                        if (alias[getArg(p, k)])
                                getArg(p, k) = alias[getArg(p, k)];
                OPTDEBUGevaluate printInstruction(cntxt->fdout, mb, 0, p, 
LIST_MAL_ALL);
                /* be aware that you only assign once to a variable */
                if (use && p->retc == 1 && OPTallConstant(cntxt, mb, p) && 
!isUnsafeFunction(p)) {
-                       constantblock += p->barrier > 0;
                        barrier = p->barrier;
                        p->barrier = 0;
                        profiler = malProfileMode;      /* we don't trace it */
@@ -180,6 +180,7 @@ OPTevaluateImplementation(Client cntxt, 
                                mb->errors = 0;
                        }
                }
+               constantblock += p->barrier > 0 && OPTallConstant(cntxt, mb, p);
        }
        if ( constantblock)
                actions += OPTremoveUnusedBlocks(cntxt, mb);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to