public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/40924]  New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias)
@ 2009-07-31  9:23 kretz at kde dot org
  2009-07-31  9:24 ` [Bug middle-end/40924] " kretz at kde dot org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: kretz at kde dot org @ 2009-07-31  9:23 UTC (permalink / raw)
  To: gcc-bugs

After upgrading to 4.4.1 one of my unit tests started failing reproducibly.

I tried to find the part of -O3 (compared to -O2) that caused the failure and I
was able to "fix" the error by changing "optimize >= 3" to "optimize >= 4" in
tree-ssa-loop.c lines 509 and 550. That's the minimal change to make it work
again.

Next I tried to reduce my code to a simple testcase but that is really hard. I
will attach the smallest file I was able to reduce. But in that case it also
fails at -O3 (with my change above -O4 was necessary to make it fail), -O2 and
-O1. -O0 still doesn't fail.

Any further simplification of the code made the bug go away.

The code creates an array of floats which an index vector (starting from {0,
1}) gathers values from into a float vector class. Then the code verifies that
the correct values were read.

The error I was able to identify in the assembly is that the multiplication at
line 93 ({0, 1} * uint_v(1)) is carried out as {0, 1} * {2, 3} instead of {0,
1} * {1, 1}.


-- 
           Summary: 4.4.1 regression: miscompiles with -03 (seemingly
                    related to attribute may_alias)
           Product: gcc
           Version: 4.4.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kretz at kde dot org
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug middle-end/40924] 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
@ 2009-07-31  9:24 ` kretz at kde dot org
  2009-07-31 11:15 ` [Bug rtl-optimization/40924] [4.4 Regression] " rguenth at gcc dot gnu dot org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: kretz at kde dot org @ 2009-07-31  9:24 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from kretz at kde dot org  2009-07-31 09:24 -------
Created an attachment (id=18278)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=18278&action=view)
minimal testcase


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
  2009-07-31  9:24 ` [Bug middle-end/40924] " kretz at kde dot org
@ 2009-07-31 11:15 ` rguenth at gcc dot gnu dot org
  2009-07-31 12:13 ` jakub at gcc dot gnu dot org
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2009-07-31 11:15 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from rguenth at gcc dot gnu dot org  2009-07-31 11:14 -------
Confirmed.  Trunk works for me.

If I disable gcse the testcase is no longer miscompiled (likewise if I
disable tree PRE which only hoists some conversions - thus likely const/copy
propagation goes wrong or addresses are improperly rewritten).  The RTL
after expansion looks sane wrt alias sets.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
          Component|middle-end                  |rtl-optimization
     Ever Confirmed|0                           |1
           Keywords|                            |alias, wrong-code
      Known to fail|                            |4.4.1
      Known to work|                            |4.4.0 4.5.0
   Last reconfirmed|0000-00-00 00:00:00         |2009-07-31 11:14:45
               date|                            |
            Summary|4.4.1 regression:           |[4.4 Regression] miscompiles
                   |miscompiles with -03        |with -03 (seemingly related
                   |(seemingly related to       |to attribute may_alias)
                   |attribute may_alias)        |
   Target Milestone|---                         |4.4.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
  2009-07-31  9:24 ` [Bug middle-end/40924] " kretz at kde dot org
  2009-07-31 11:15 ` [Bug rtl-optimization/40924] [4.4 Regression] " rguenth at gcc dot gnu dot org
@ 2009-07-31 12:13 ` jakub at gcc dot gnu dot org
  2009-08-04 10:27 ` jakub at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu dot org @ 2009-07-31 12:13 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from jakub at gcc dot gnu dot org  2009-07-31 12:13 -------
This has been broken even on the trunk, since r146669 till r146847 (so it works
again with r146848), no idea whether it is the same thing or not, nor whether
r146848 really fixed it rather than just made it latent (and similarly whether
r146669 broke it or just made it real rather than latent).


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
                   ` (2 preceding siblings ...)
  2009-07-31 12:13 ` jakub at gcc dot gnu dot org
@ 2009-08-04 10:27 ` jakub at gcc dot gnu dot org
  2009-08-04 20:56 ` jakub at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu dot org @ 2009-08-04 10:27 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from jakub at gcc dot gnu dot org  2009-08-04 10:27 -------
On the 4.4 branch/x86_64-linux, I can reproduce even with -O1 on:
extern "C" void abort (void);

#define _MAY_ALIAS __attribute__((__may_alias__))

typedef struct { float v[2]; } _float_v;
typedef struct { int v[2]; } _int_v;

typedef unsigned int _UInt _MAY_ALIAS;
typedef signed int _Int _MAY_ALIAS;
typedef float _Float _MAY_ALIAS;

static inline unsigned short less_than (_int_v a, _int_v b)
{
  unsigned short r = 0;
  const _UInt *p1 = (const _UInt *) &a;
  const _UInt *p2 = (const _UInt *) &b;
  for (int i=0; i < 2; i++)
    if (p1[i] < p2[i]) r |= (1 << i);
  return r;
}

static inline _int_v multiply (_int_v b, _int_v c)
{
  _int_v r;
  _Int *p3 = (_Int *) &c;
  for (int i=0; i < 2; i++)
    r.v[i] = (int) (b.v[i] * p3[i] & 0xFFFFFFFF);
  return r;
}

static inline _float_v gather (_int_v indexes, const void *baseAddr)
{
  _float_v r;

  _Int *idx = (_Int *) &indexes;
  _Float *src = (_Float *) baseAddr;
  for (int i=0; i < 2; i++)
    r.v[i] = *(src + idx[i]);
  return r;
}

static inline _int_v add (const _int_v &b, const _int_v &c)
{
  _int_v result;
  _Int *r = (_Int *) &result;

  for (int i=0; i < 2; i++)
    r[i] = b.v[i] + c.v[i];
  return result;
}

struct uint_v
{
  _int_v data;
  inline uint_v () { data.v[0] = 0; data.v[1] = 1; }
  inline uint_v (unsigned int a) {
    for (int i=0; i < 2; i++)
      *(_UInt *) &data.v[i] = a;
  }
  inline uint_v (_int_v x) : data (x) {}
  inline uint_v operator* (const uint_v &x) const { return multiply (data,
x.data); }
  inline uint_v operator+ (const uint_v &x) const { return uint_v (add (data,
x.data)); }
  inline unsigned short operator< (const uint_v &x) const { return less_than
(data, x.data); }
};

struct float_v
{
  _float_v data;
  explicit inline float_v (const uint_v &x) {
    _UInt *p2 = (_UInt *) &x.data;
    for (int i=0; i < 2; i++)
      data.v[i] = p2[i];
  }
  inline float_v (const float *array, const uint_v &indexes) {
    const uint_v &offsets = indexes * uint_v (1);
    data = gather (offsets.data, array);
  }
  __attribute__((noinline)) unsigned short operator== (const float_v &x) const
{
    unsigned short r = 0;
    for (int i=0; i < 2; i++)
      if (data.v[i] == x.data.v[i]) r |= (1 << i);
    return r;
  }
};

int main ()
{
  const float array[2] = { 2, 3 };
  unsigned short mask;
  for (uint_v i; (mask = (i < 2)) == 3; i = i + 2) {
    const float_v ii (i + 2);
    asm volatile ("# Barrier 1 %0 %1 %2" : : "r" (&ii), "r" (&i), "r" (array) :
"memory");
    float_v a (array, i);
    asm volatile ("# Barrier 2 %0 %1 %2 %3" : : "r" (&ii), "r" (&i), "r"
(array), "r" (&a) : "memory");
    if ((a == ii) != 3)
      abort();
  }
  return 0;
}

Apparently there is some stack slot sharing and RTL DSE decides to remove a
store to stack related address as dead when that memory is later on read using
a non-%rsp related read.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
                   ` (3 preceding siblings ...)
  2009-08-04 10:27 ` jakub at gcc dot gnu dot org
@ 2009-08-04 20:56 ` jakub at gcc dot gnu dot org
  2009-08-05 12:37 ` jakub at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu dot org @ 2009-08-04 20:56 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from jakub at gcc dot gnu dot org  2009-08-04 20:56 -------
Patch posted: http://gcc.gnu.org/ml/gcc-patches/2009-08/msg00226.html


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |jakub at gcc dot gnu dot org
                   |dot org                     |
                URL|                            |http://gcc.gnu.org/ml/gcc-
                   |                            |patches/2009-
                   |                            |08/msg00226.html
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2009-07-31 11:14:45         |2009-08-04 20:56:23
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
                   ` (4 preceding siblings ...)
  2009-08-04 20:56 ` jakub at gcc dot gnu dot org
@ 2009-08-05 12:37 ` jakub at gcc dot gnu dot org
  2009-08-05 12:54 ` jakub at gcc dot gnu dot org
  2009-08-05 12:55 ` jakub at gcc dot gnu dot org
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu dot org @ 2009-08-05 12:37 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from jakub at gcc dot gnu dot org  2009-08-05 12:36 -------
Subject: Bug 40924

Author: jakub
Date: Wed Aug  5 12:36:34 2009
New Revision: 150483

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=150483
Log:
        PR rtl-optimization/40924
        * dse.c (canon_address): Before calling cselib_expand_value_rtx
        make sure canon_rtx (mem_address) isn't simpler than
        canon_rtx (expanded_mem_address).

        * g++.dg/torture/pr40924.C: New test.

Added:
    trunk/gcc/testsuite/g++.dg/torture/pr40924.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/dse.c
    trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
                   ` (5 preceding siblings ...)
  2009-08-05 12:37 ` jakub at gcc dot gnu dot org
@ 2009-08-05 12:54 ` jakub at gcc dot gnu dot org
  2009-08-05 12:55 ` jakub at gcc dot gnu dot org
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu dot org @ 2009-08-05 12:54 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from jakub at gcc dot gnu dot org  2009-08-05 12:54 -------
Subject: Bug 40924

Author: jakub
Date: Wed Aug  5 12:54:21 2009
New Revision: 150484

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=150484
Log:
        PR rtl-optimization/40924
        * dse.c (canon_address): Before calling cselib_expand_value_rtx
        make sure canon_rtx (mem_address) isn't simpler than
        canon_rtx (expanded_mem_address).

        * g++.dg/torture/pr40924.C: New test.

Added:
    branches/gcc-4_4-branch/gcc/testsuite/g++.dg/torture/pr40924.C
Modified:
    branches/gcc-4_4-branch/gcc/ChangeLog
    branches/gcc-4_4-branch/gcc/dse.c
    branches/gcc-4_4-branch/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug rtl-optimization/40924] [4.4 Regression] miscompiles with -03 (seemingly related to attribute may_alias)
  2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
                   ` (6 preceding siblings ...)
  2009-08-05 12:54 ` jakub at gcc dot gnu dot org
@ 2009-08-05 12:55 ` jakub at gcc dot gnu dot org
  7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu dot org @ 2009-08-05 12:55 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from jakub at gcc dot gnu dot org  2009-08-05 12:55 -------
Fixed.


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40924


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-08-05 12:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-31  9:23 [Bug middle-end/40924] New: 4.4.1 regression: miscompiles with -03 (seemingly related to attribute may_alias) kretz at kde dot org
2009-07-31  9:24 ` [Bug middle-end/40924] " kretz at kde dot org
2009-07-31 11:15 ` [Bug rtl-optimization/40924] [4.4 Regression] " rguenth at gcc dot gnu dot org
2009-07-31 12:13 ` jakub at gcc dot gnu dot org
2009-08-04 10:27 ` jakub at gcc dot gnu dot org
2009-08-04 20:56 ` jakub at gcc dot gnu dot org
2009-08-05 12:37 ` jakub at gcc dot gnu dot org
2009-08-05 12:54 ` jakub at gcc dot gnu dot org
2009-08-05 12:55 ` jakub at gcc dot gnu dot org

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