http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55124
--- Comment #6 from rguenther at suse dot de <rguenther at suse dot de> 2012-10-30 17:12:46 UTC --- On Tue, 30 Oct 2012, vries at gcc dot gnu.org wrote: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55124 > > vries at gcc dot gnu.org changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > CC| |rguenth at gcc dot gnu.org > > --- Comment #5 from vries at gcc dot gnu.org 2012-10-30 15:49:42 UTC --- > tentative patch: > ... > Index: gcc/tree-ssa-pre.c > =================================================================== > --- gcc/tree-ssa-pre.c (revision 192023) > +++ gcc/tree-ssa-pre.c (working copy) > @@ -1657,6 +1657,16 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, > if (result) > VEC_free (vn_reference_op_s, heap, newoperands); > > + if (result && TREE_CODE (result) == SSA_NAME) > + { > + gimple def_stmt = SSA_NAME_DEF_STMT (result); > + basic_block def_bb = gimple_bb (def_stmt); > + if (def_bb != pred > + && !dominated_by_p (CDI_DOMINATORS, pred, > + def_bb)) > + return NULL; > + } > + > /* We can always insert constants, so if we have a partial > redundant constant load of another type try to translate it > to a constant of appropriate type. */ > ... Err ... certainly not. result is a value-number, not sth to be taken literally and its def stmt to be looked up. See how clean () removes names from the sets instead.