This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, middle-end]: Fix PR68999, gfortran.fortran-torture/execute/save_1.f90 execution failure on alpha
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Uros Bizjak <ubizjak at gmail dot com>,"gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: Jeff Law <law at redhat dot com>,Jan Hubicka <hubicka at ucw dot cz>
- Date: Wed, 23 Dec 2015 14:39:41 +0100
- Subject: Re: [PATCH, middle-end]: Fix PR68999, gfortran.fortran-torture/execute/save_1.f90 execution failure on alpha
- Authentication-results: sourceware.org; auth=none
- References: <CAFULd4bkJNSaaqoxxC5ttCf8pZrvkts6jYKNPXiPAqqR2mHM0w at mail dot gmail dot com>
On December 23, 2015 10:39:17 AM GMT+01:00, Uros Bizjak <ubizjak@gmail.com> wrote:
>Hello!
>
>There is a logic error in Honza's patch "Transparent alias suport part
>10" [1]. The part in memrefs_conflict_p should be changed to:
>
>- /* If decls are different or we know by offsets that there is no
>overlap,
>- we win. */
>- if (!cmp || !offset_overlap_p (c, xsize, ysize))
>+ /* If decls are different and we know by offsets that
>+ there is no overlap, we win. */
>+ if (!cmp && !offset_overlap_p (c, xsize, ysize))
> return 0;
>- /* Decls may or may not be different and offsets overlap....*/
>+ /* Decls are different and offsets overlap....*/
>
>Even if decls are different, their offsets shouldn't overlap!
Comparing offsets of different decls does not make sense.
>Addresses with alignment ANDs depend on increased xsize and ysize, so
>no wonder gcc fails to bootstrap on alpha.
Alpha also fails to honor the C++ memory model and introduces store data races.
I wonder if alpha needs to simply pad all decls appropriately.
Maybe also finally time to ditch this arch
(Or affected sub-arch)?
Richard.
>
>In addition to this, the check for SYMBOL_REFs in base_alias_check
>should be moved after checks for addresses.
>
>The patch also adds some simplification. If
>symtab_address::equal_address_to returns -1 for "unknown" (as is
>otherwise customary throughout the sources), we can simplify
>compare_base_decls a bit.
>
>2015-12-23 Uros Bizjak <ubizjak@gmail.com>
>
> PR middle-end/68999
> * symtab.c (symtab_node::equal_address_to): Return -1 instead of 2
> if we can't determine address equivalence.
> * alias.c (compare_base_decl): Update for changed return value of
> symtab_node::equal_address_to.
> (memrefs_conflict_p): Return 0 when decls are different
> and offsets don't overlap.
> (base_alias_check): Move check for addresses with alignment ANDs
> before the call for compare_base_decls.
>
>The patch was bootstrapped and regression tested on x86_64-linux-gnu
>{,-m32} and alpha-linux-gnu [2], which is a massive user of addresses
>with alignment ANDs
>
>OK for mainline?
>
>[1] https://gcc.gnu.org/ml/gcc-patches/2015-12/msg01076.html
>[2] https://gcc.gnu.org/ml/gcc-testresults/2015-12/msg02372.html
>
>Uros.