------- Comment #15 from dberlin at gcc dot gnu dot org 2007-07-14 02:04
-------
Subject: Re: [4.3 regression] ICE in set_ssa_val_to, at tree-ssa-sccvn.c:1022
On 13 Jul 2007 20:43:37 -0000, ebotcazou at gcc dot gnu dot org
<[EMAIL PROTECTED]> wrote:
>
>
> ------- Comment #14 from ebotcazou at gcc dot gnu dot org 2007-07-13 20:43
> -------
> > Instead, where we init everything to VN_TOP, init everything with
> > SSA_NAME_OCCURS_IN_ABNORMAL_PHI to itself instead of VN_TOP.
>
> @@ -1912,13 +1912,16 @@ init_scc_vn (void)
> VN_TOP = create_tmp_var_raw (void_type_node, "vn_top");
>
> /* Create the VN_INFO structures, and initialize value numbers to
> - TOP. */
> + TOP, except for SSA names appearing in abnormal PHI nodes. */
> for (i = 0; i < num_ssa_names; i++)
> {
> tree name = ssa_name (i);
> if (name)
> {
> - VN_INFO_GET (name)->valnum = VN_TOP;
> + if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
> + VN_INFO_GET (name)->valnum = name;
> + else
> + VN_INFO_GET (name)->valnum = VN_TOP;
> VN_INFO (name)->expr = name;
> }
> }
>
> is not sufficient to eliminate all the failures. I get the same assertion
> failure for non-degenerate PHI nodes without SSA_NAME_OCCURS_IN_ABNORMAL_PHI
> anywhere, all operands having SSA_VAL set to VN_TOP. Top-level function too.
Change the assert to allow to == VN_TOP.
It can happen when we have aliasing issues, and we believe some piece
of memory/a value to be truly undefined.
This is what is happening in your case, and since your case is legal,
we must allow it.
It's likely a bug in the rest of the compiler, however, since we
should almost *never* end up with bare NMT's like that.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32705