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