From: Uros Bizjak <ubizjak@gmail.com>
To: Steven Bosscher <stevenb.gcc@gmail.com>
Cc: Paolo Bonzini <bonzini@gnu.org>,
gcc-patches@gcc.gnu.org, Alexandre Oliva <aoliva@redhat.com>
Subject: Re: [PATCH] Fix allocation of reg_known_value
Date: Fri, 30 Nov 2012 15:57:00 -0000 [thread overview]
Message-ID: <CAFULd4YFtmHESHo6aGihWh1cWY7-1zsi=xX+k6ppGfdz=+KKbg@mail.gmail.com> (raw)
In-Reply-To: <CABu31nP8Kh-PiTMDzBP_TR1fUpWJeH7=E3k7RXfmc=0LzKKdpQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2158 bytes --]
On Fri, Nov 30, 2012 at 3:51 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
>>>>> This one-liner causes following runtime test failure [1] for
>>>>> alphaev68-linux-gnu:
>>>>>
>>>>> FAIL: gfortran.fortran-torture/execute/save_1.f90 execution, -O2
>>>>> FAIL: gfortran.fortran-torture/execute/save_1.f90 execution, -O2
>>>>> -fomit-frame-pointer -finline-functions
>>>>> FAIL: gfortran.fortran-torture/execute/save_1.f90 execution, -O2
>>>>> -fomit-frame-pointer -finline-functions -funroll-loops
>>>>> FAIL: gfortran.fortran-torture/execute/save_1.f90 execution, -O2
>>>>> -fbounds-check
>>>>>
>>>>> The patch miscompiles libgfortran library.
>>>>>
>>>>> I will provide more info tomorrow, any hint what/where should I look
>>>>> for differences?
>>>>
>>>> Anywhere. The bug disabled a large part of alias analysis.
>>>>
>>>> Perhaps you can bisect it and backport the fix along the steps.
>>>
>>> Or open a PR and assign it to me, ultimately I'm responsible for this breakage.
>>
>> I have found the problem. Luckily, it is the testcase that is
>> miscompiled. The problem is in sched1 pass that moves write to an
>> address "addrX" that happens to be aliased with AND mutilated address
>> "addrY & -7". The improved alias analysis does not notice that the
>> write is inside (addr & -7) region, allowing write to be moved after
>> read.
>
> Based on this description of the problem, I remembered these patches
> from Alexandre:
>
> 2012-07-06 Alexandre Oilva <>
>
> PR rtl-optimization/53827
> PR debug/53671
> PR debug/49888
> * alias.c (memrefs_conflict_p): Adjust offset and size by the
> same amount for alignment ANDs.
>
> 2012-06-21 Alexandre Oliva <>
>
> PR debug/53671
> PR debug/49888
> * alias.c (memrefs_conflict_p): Improve handling of AND for alignment.
>
>
> They are r188868 and r189325. Can you try revert these and see if that
> fixes your problem (probably at the expense of some other problem
> returning, but at least it'd be a good place to start looking
> further...).
Yes backing out these revisions with attached patch fixes the runtime failure!
Uros.
[-- Attachment #2: alias.diff --]
[-- Type: application/octet-stream, Size: 1219 bytes --]
Index: alias.c
===================================================================
--- alias.c (revision 193992)
+++ alias.c (working copy)
@@ -2103,6 +2103,10 @@
alignment into account. */
if (GET_CODE (x) == AND && CONST_INT_P (XEXP (x, 1)))
{
+ if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
+ xsize = -1;
+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
+#if 0
HOST_WIDE_INT sc = INTVAL (XEXP (x, 1));
unsigned HOST_WIDE_INT uc = sc;
if (xsize > 0 && sc < 0 && -uc == (uc & -uc))
@@ -2112,9 +2116,14 @@
return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
ysize, y, c);
}
+#endif
}
if (GET_CODE (y) == AND && CONST_INT_P (XEXP (y, 1)))
{
+ if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
+ ysize = -1;
+ return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
+#if 0
HOST_WIDE_INT sc = INTVAL (XEXP (y, 1));
unsigned HOST_WIDE_INT uc = sc;
if (ysize > 0 && sc < 0 && -uc == (uc & -uc))
@@ -2124,6 +2133,7 @@
return memrefs_conflict_p (xsize, x,
ysize, canon_rtx (XEXP (y, 0)), c);
}
+#endif
}
if (CONSTANT_P (x))
next prev parent reply other threads:[~2012-11-30 15:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-29 22:51 Uros Bizjak
2012-11-30 10:43 ` Paolo Bonzini
2012-11-30 10:43 ` Steven Bosscher
2012-11-30 12:34 ` Uros Bizjak
2012-11-30 13:17 ` Uros Bizjak
2012-11-30 14:54 ` Steven Bosscher
2012-11-30 15:10 ` Steven Bosscher
2012-11-30 15:57 ` Uros Bizjak [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-11-27 16:01 Paolo Bonzini
2012-11-27 16:32 ` Steven Bosscher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAFULd4YFtmHESHo6aGihWh1cWY7-1zsi=xX+k6ppGfdz=+KKbg@mail.gmail.com' \
--to=ubizjak@gmail.com \
--cc=aoliva@redhat.com \
--cc=bonzini@gnu.org \
--cc=gcc-patches@gcc.gnu.org \
--cc=stevenb.gcc@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).