https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70856

--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> ---
On Thu, 12 May 2016, tschwinge at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70856
> 
> Thomas Schwinge <tschwinge at gcc dot gnu.org> changed:
> 
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
>                  CC|                            |rguenth at gcc dot gnu.org,
>                    |                            |tschwinge at gcc dot gnu.org,
>                    |                            |vries at gcc dot gnu.org
> 
> --- Comment #3 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
> I had a cursory look at that one.  Differently from PR70857, the ICE triggers
> here the second time that pass_ipa_pta is run (all_late_ipa_passes), and not
> the first one (which is only active if "-fopenacc" is in effect; Tom CCed for
> your information anyway).  This is "fixed" ;-) by reverting the r233734 
> changes
> for PR69951 "[Bug tree-optimization/69951] wrong code at -O1 and above on
> x86_64-linux-gnu":

I figured out that much already.  Now the question is why/how oacc
ends up making sth different the alias target for the decl.  It may
generate a new alias that has the old decl as target but not the
other way around (which is what the assert detects).

Richard.

>     2016-02-26  Richard Biener  <rguent...@suse.de>
> 
>         PR tree-optimization/69551
>         * tree-ssa-structalias.c (get_constraint_for_ssa_var): When
>         looking through aliases adjust DECL_PT_UID to refer to the
>         ultimate alias target.
> 
>     --- gcc/tree-ssa-structalias.c
>     +++ gcc/tree-ssa-structalias.c
>     @@ -2943,6 +2943,14 @@ get_constraint_for_ssa_var (tree t, vec<ce_s>
> *results, bool address_p)
>            if (node && node->alias && node->analyzed)
>             {
>               node = node->ultimate_alias_target ();
>     +         /* Canonicalize the PT uid of all aliases to the ultimate 
> target.
>     +            ???  Hopefully the set of aliases can't change in a way that
>     +            changes the ultimate alias target.  */
>     +         gcc_assert ((! DECL_PT_UID_SET_P (node->decl)
>     +                      || DECL_PT_UID (node->decl) == DECL_UID
> (node->decl))
>     +                     && (! DECL_PT_UID_SET_P (t)
>     +                         || DECL_PT_UID (t) == DECL_UID (node->decl)));
>     +         DECL_PT_UID (t) = DECL_UID (node->decl);
>               t = node->decl;
>             }
>          }
> 
>     (gdb) call node->debug()
>     A.4.3435/10 (A.4) @0x7ffff6a7f800
>       Type: variable definition analyzed
>       Visibility: prevailing_def_ironly artificial
>       References: 
>       Referring: A.1.3429/6 (alias)MAIN__/0 (read)
>       Availability: available
>       Varpool flags: initialized used-by-single-function read-only
> const-value-known
>     (gdb) call debug_tree(node->decl)
>      <var_decl 0x7ffff7ff5c60 A.4
>         type <array_type 0x7ffff6a91b28
>             type <real_type 0x7ffff68e6540 real(kind=4) SF
>                 size <integer_cst 0x7ffff68cde10 constant 32>
>                 unit size <integer_cst 0x7ffff68cde28 constant 4>
>                 align 32 symtab 0 alias set 9 canonical type 0x7ffff68e6540
> precision 32
>                 pointer_to_this <pointer_type 0x7ffff68e6738>>
>             type_2 DI
>             size <integer_cst 0x7ffff68cdbd0 constant 64>
>             unit size <integer_cst 0x7ffff68cdbe8 constant 8>
>             align 32 symtab 0 alias set 9 canonical type 0x7ffff6a91b28
>             domain <integer_type 0x7ffff6a91540 type <integer_type
> 0x7ffff68d1930 integer(kind=8)>
>                 DI size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst
> 0x7ffff68cdbe8 8>
>                 align 64 symtab 0 alias set -1 canonical type 0x7ffff6a91540
> precision 64 min <integer_cst 0x7ffff68e8258 0> max <integer_cst 
> 0x7ffff6a886d8
> 1>>
>             pointer_to_this <pointer_type 0x7ffff6a91f18>>
>         readonly constant static ignored DI file ../pr70856-z1.f90 line 3 col > 0
> size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst 0x7ffff68cdbe8 8>
>         align 64 context <function_decl 0x7ffff6a8ec40 p> initial <constructor
> 0x7ffff6a88c00>>
>     (gdb) call debug_tree(t)
>      <var_decl 0x7ffff7ff5a20 A.1
>         type <array_type 0x7ffff6a911f8
>             type <real_type 0x7ffff68e6540 real(kind=4) SF
>                 size <integer_cst 0x7ffff68cde10 constant 32>
>                 unit size <integer_cst 0x7ffff68cde28 constant 4>
>                 align 32 symtab 0 alias set 9 canonical type 0x7ffff68e6540
> precision 32
>                 pointer_to_this <pointer_type 0x7ffff68e6738>>
>             type_2 DI
>             size <integer_cst 0x7ffff68cdbd0 constant 64>
>             unit size <integer_cst 0x7ffff68cdbe8 constant 8>
>             align 32 symtab 0 alias set 9 canonical type 0x7ffff6a911f8
>             domain <integer_type 0x7ffff6a91540 type <integer_type
> 0x7ffff68d1930 integer(kind=8)>
>                 DI size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst
> 0x7ffff68cdbe8 8>
>                 align 64 symtab 0 alias set -1 canonical type 0x7ffff6a91540
> precision 64 min <integer_cst 0x7ffff68e8258 0> max <integer_cst 
> 0x7ffff6a886d8
> 1>>
>             pointer_to_this <pointer_type 0x7ffff6a91738>>
>         readonly constant static ignored DI file ../pr70856-z1.f90 line 2 col > 0
> size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst 0x7ffff68cdbe8 8>
>         align 64 context <function_decl 0x7ffff6a8ec40 p>>
> 
>

Reply via email to