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. > *** 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. Jakub