On Fri, 11 Jan 2013, Jakub Jelinek wrote: > On Fri, Jan 11, 2013 at 12:06:04PM +0100, Richard Biener wrote: > > > > VRP no longer (since 4.1.2 at least) can optimize vrp06.c in one go > > because we happen to chose a symbolic range when > > Just FYI, GCC never optimized that apparently, at least in r100000 > (vrp06.c has been added in r100478) vrp didn't fold any of the 3 foldings > looked for by the testcase, and in r102000 it folded just the first 2 and > not the third (and from that point onwards), don't have anything in between > though.
The SLE10 gcc 4.1 based compiler folds the last test to i_1 != i_16 which then cfgcleanup figures out as false. So it worked in some sense (that is, there is a regression). > > *** gcc/testsuite/gcc.dg/tree-ssa/vrp06.c (revision 195103) > > --- gcc/testsuite/gcc.dg/tree-ssa/vrp06.c (working copy) > > *************** foo (int i, int j, int a) > > *** 27,31 **** > > > > /* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9\]+.*0 to > > 0" 1 "vrp1" } } */ > > /* { dg-final { scan-tree-dump-times "Folding predicate j_\[0-9\]+.*0 to > > 1" 1 "vrp1" } } */ > > ! /* { dg-final { scan-tree-dump-times "Folding predicate > > i_\[0-9]+.*j_\[0-9\]+.* to 0" 1 "vrp1" { xfail *-*-* } } } */ > > /* { dg-final { cleanup-tree-dump "vrp1" } } */ > > --- 27,31 ---- > > > > /* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9\]+.*0 to > > 0" 1 "vrp1" } } */ > > /* { dg-final { scan-tree-dump-times "Folding predicate j_\[0-9\]+.*0 to > > 1" 1 "vrp1" } } */ > > ! /* { dg-final { scan-tree-dump-times "Folding predicate > > i_\[0-9]+.*j_\[0-9\]+.* to 0" 1 "vrp1" } } */ > > /* { dg-final { cleanup-tree-dump "vrp1" } } */ > > If you are changing the testcase again, please replace all .* with \[^\n\r\]* > , > so that it doesn't match 0 to 0 etc. from different lines. Ok. Richard.