On Mon, Feb 16, 2015 at 10:20:23PM +0100, Richard Biener wrote: > On February 16, 2015 10:11:07 PM CET, Jakub Jelinek <ja...@redhat.com> wrote: > >On Mon, Feb 16, 2015 at 02:00:32PM -0700, Jeff Law wrote: > >> --- a/gcc/tree-vrp.c > >> +++ b/gcc/tree-vrp.c > >> @@ -10176,13 +10176,20 @@ identify_jump_threads (void) > >> /* We only care about blocks ending in a COND_EXPR. While > >there > >> may be some value in handling SWITCH_EXPR here, I doubt it's > >> terribly important. */ > >> - last = gsi_stmt (gsi_last_bb (bb)); > >> + last = gsi_stmt (gsi_last_nondebug_bb (bb)); > > And if the comment is correct then it should not even matter as the condition > ends a basic block.
It matters, because the use is: if (!last || gimple_code (last) == GIMPLE_SWITCH || (gimple_code (last) == GIMPLE_COND && TREE_CODE (gimple_cond_lhs (last)) == SSA_NAME && (INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (last))) || POINTER_TYPE_P (TREE_TYPE (gimple_cond_lhs (last)))) && (TREE_CODE (gimple_cond_rhs (last)) == SSA_NAME || is_gimple_min_invariant (gimple_cond_rhs (last))))) thus, if a bb contains only debug statements and nothing else, the condition is false, while if it for corresponding -g0 doesn't contain anything, it is true (!last). Jakub