------- Comment #6 from rguenth at gcc dot gnu dot org 2007-01-05 16:30 ------- It seems to be IVOPTs rewriting introduces the trees. Testcase:
extern void op( int, int); void foo(int f0, int f1, int e0, int e1) { for (int i1 = f1; i1 <= e1; ++i1) for (int i0 = f0; i0 <= e0; ++i0) op(i0, i1); } results in (./cc1plus -O2): void foo(int, int, int, int) (f0, f1, e0, e1) { int i0; int i1; <bb 2>: if (f1 <= e1) goto <L26>; else goto <L5>; <L26>:; i1 = f1; goto <bb 5> (<L2>); <L25>:; i0 = f0; <L1>:; op (i0, i1); i0 = i0 + 1; if (e0 >= i0) goto <L1>; else goto <L3>; <L3>:; i1 = i1 + 1; if (i1 != (int) ((unsigned int) f1 + 2 + (unsigned int) ~f1 + (unsigned int) e1)) goto <L2>; else goto <L5>; <L2>:; if (f0 <= e0) goto <L25>; else goto <L3>; <L5>:; return; } -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rakdver at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30322