http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60363
--- Comment #5 from bin.cheng <amker.cheng at gmail dot com> --- Vrp1 generates below code: <bb 3>: if (b_elt_11(D) != 0B) goto <bb 4>; else goto <bb 8>; <bb 4>: # kill_elt_10 = PHI <kill_elt_4(3)> goto <bb 6>; <bb 5>: kill_elt_14 = kill_elt_2->next; <bb 6>: # kill_elt_2 = PHI <kill_elt_10(4), kill_elt_14(5)> if (kill_elt_2 != 0B) goto <bb 7>; else goto <bb 19>; <bb 7>: _12 = kill_elt_2->indx; _13 = b_elt_11(D)->indx; if (_12 < _13) goto <bb 5>; else goto <bb 20>; ... <bb 18>: goto <bb 14>; <bb 19>: # kill_elt_41 = PHI <0B(6)> if (b_elt_11(D) != 0B) goto <bb 18>; else goto <bb 14>; The whole bb 19 is unnecessary since we know "b_elt_11(D) != 0" holds.