tree_forwarder_block_p has if (find_edge (ENTRY_BLOCK_PTR, bb)) return false;
without explanation. This test was added by you, Jeff - do you remember why? Removing this check triggers some ICEs in the testsuite because remove_bb (called from remove_forwarder_block) unconditionally moves labels from the removed block to prev_bb (yuck!) - which is of course invalid if that happens to be the entry bb. Luckily remove_forwarder_block already contains code to do the label-move job itself - it is just conditional on seen abnormal incoming edges. Enabling this code to run by default causes a bootstrap comparison failure though. -- Summary: tree_forwarder_block_p says no to first basic block Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38264