------- Comment #1 from steven at gcc dot gnu dot org 2010-01-30 16:37 ------- The loop is deemed necessary because the loop block (bb 6) is control dependent on itself (?!):
(gdb) mark_control_dependent_edges_necessary (bb=0x7ffff7f264e0, el=0x142c5d0) at ../../trunk/gcc/tree-ssa-dce.c:388 388 EXECUTE_IF_CONTROL_DEPENDENT (bi, bb->index, edge_number) (gdb) 391 basic_block cd_bb = INDEX_EDGE_PRED_BB (el, edge_number); (gdb) 393 if (TEST_BIT (last_stmt_necessary, cd_bb->index)) (gdb) p debug_bb(cd_bb) ;; basic block 6, loop depth 1, count 0 ;; prev block 3, next block 5 ;; pred: 4 [100.0%] (fallthru) 3 (fallthru,dfs_back,exec) ;; succ: 3 (true,exec) 5 (false,exec) <bb 6>: # i_2 = PHI <i_8(4), i_6(3)> if (i_2 <= 999) goto <bb 3>; else goto <bb 5>; $22 = void (gdb) p debug_bb(bb) ;; basic block 6, loop depth 1, count 0 ;; prev block 3, next block 5 ;; pred: 4 [100.0%] (fallthru) 3 (fallthru,dfs_back,exec) ;; succ: 3 (true,exec) 5 (false,exec) <bb 6>: # i_2 = PHI <i_8(4), i_6(3)> if (i_2 <= 999) goto <bb 3>; else goto <bb 5>; $23 = void (gdb) -- steven at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2010-01-30 16:37:37 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42906