public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
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))

  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).