------- Comment #2 from steven at gcc dot gnu dot org  2010-01-30 16:42 -------
Even more fun: mark_control_dependent_edges_necessary is called on basic block
6 because a PHI argument is fed to "j_1 = PHI <j_5(D)(2), 0(6)>" i.e. a
constant coming from basic block 6:

#1  0x0000000000a16627 in propagate_necessity (el=0x142c5d0) at
../../trunk/gcc/tree-ssa-dce.c:691
691                           mark_control_dependent_edges_necessary (arg_bb,
el);
(gdb) l
686                       basic_block arg_bb = gimple_phi_arg_edge (stmt,
k)->src;
687                       if (arg_bb != ENTRY_BLOCK_PTR
688                           && ! TEST_BIT (visited_control_parents,
arg_bb->index))
689                         {
690                           SET_BIT (visited_control_parents, arg_bb->index);
691                           mark_control_dependent_edges_necessary (arg_bb,
el);
692                         }
693                     }
694                 }
695             }
(gdb) p stmt
$28 = (gimple) 0x7ffff5ce0c00
(gdb) p debug_gimple_stmt(stmt)
j_1 = PHI <j_4(D)(2), 0(6)>


The CD-DCE algorithm is not prepared to deal with this situation.
(I have said years ago that I didn't think having constants as PHI arguments
was always a helpful thing...)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42906

Reply via email to