I am testing the following patch to fix PR89135.
Bootstrap / regtest running on x86_64-unknown-linux-gnu. Richard. 2019-01-31 Richard Biener <rguent...@suse.de> PR tree-optimization/89135 * tree-ssa-phiprop.c (pass_phiprop::execute): Skip blocks with abnormal preds. * gcc.dg/torture/pr89135.c: New testcase. Index: gcc/tree-ssa-phiprop.c =================================================================== --- gcc/tree-ssa-phiprop.c (revision 268415) +++ gcc/tree-ssa-phiprop.c (working copy) @@ -495,8 +495,14 @@ pass_phiprop::execute (function *fun) bbs = get_all_dominated_blocks (CDI_DOMINATORS, single_succ (ENTRY_BLOCK_PTR_FOR_FN (fun))); FOR_EACH_VEC_ELT (bbs, i, bb) - for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) - did_something |= propagate_with_phi (bb, gsi.phi (), phivn, n); + { + /* Since we're going to move dereferences across predecessor + edges avoid blocks with abnormal predecessors. */ + if (bb_has_abnormal_pred (bb)) + continue; + for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + did_something |= propagate_with_phi (bb, gsi.phi (), phivn, n); + } if (did_something) gsi_commit_edge_inserts (); Index: gcc/testsuite/gcc.dg/torture/pr89135.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr89135.c (nonexistent) +++ gcc/testsuite/gcc.dg/torture/pr89135.c (working copy) @@ -0,0 +1,33 @@ +/* { dg-do compile } */ + +typedef __INTPTR_TYPE__ intptr_t; +intptr_t a, b, c, d; +int foo (void) { return 0; } +int baz (void); + +void +bar (void) +{ + intptr_t g = (intptr_t) &&h; + void *i = &&j, *k = &&l; +j: + if (baz ()) + { + intptr_t **n = (intptr_t **) &a; +l: + b = 0; + for (; b >= 0;) + goto *k; +h: + **n = 0; + for (;;) + { + intptr_t *o = &c; + g = foo (); + *o = g; + if (c) + goto *d; + } + } + goto *i; +}