public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX
@ 2012-05-15 21:22 martin@mpa-garching.mpg.de
  2012-05-16  6:03 ` [Bug tree-optimization/53366] " hjl.tools at gmail dot com
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: martin@mpa-garching.mpg.de @ 2012-05-15 21:22 UTC (permalink / raw)
  To: gcc-bugs

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

             Bug #: 53366
           Summary: wrong code generation by tree vectorizer using AVX
    Classification: Unclassified
           Product: gcc
           Version: 4.7.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: martin@mpa-garching.mpg.de


Created attachment 27410
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27410
Testcase demonstrating the problem

The attached code is the reduction of a numerical library. It should print
"2.816937e+08" if executed correctly.
Using the current head of the 4.7 branch and trunk, and compiling on an
Intel Core i3-2120 using

gcc testcase.c -std=c99 -g -O3 -march=native -fno-tree-vectorize

everything works as expected.
When omitting the "-fno-tree-vectorize", random results are printed, and a
different number is generated for every run.

The testcase is the result of several hours' reduction. Currently I don't have
time to reduce it further.


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
@ 2012-05-16  6:03 ` hjl.tools at gmail dot com
  2012-05-16  9:43 ` jakub at gcc dot gnu.org
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2012-05-16  6:03 UTC (permalink / raw)
  To: gcc-bugs

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

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rsandifo at gcc dot gnu.org

--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2012-05-16 04:53:46 UTC ---
It is caused by revision 172817:

http://gcc.gnu.org/ml/gcc-cvs/2011-04/msg01013.html


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
  2012-05-16  6:03 ` [Bug tree-optimization/53366] " hjl.tools at gmail dot com
@ 2012-05-16  9:43 ` jakub at gcc dot gnu.org
  2012-05-16 12:00 ` hjl.tools at gmail dot com
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-05-16  9:43 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-05-16
                 CC|                            |jakub at gcc dot gnu.org
     Ever Confirmed|0                           |1

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-16 09:30:07 UTC ---
Well, that is just the first revision that actually vectorizes the loop, so it
may be either a vectorizer bug, or backend bug.

Here is a slightly cleaned up testcase, for -O3 -mavx (with -O3 -msse4 it
doesn't get vectorized and therefore doesn't fail):

struct S { double v[3]; };
struct T { struct S r, i; };
struct U { struct T j[5]; };

void
foo (struct U *__restrict p1, struct U *__restrict p2,
     struct S l1, struct S l2, struct S l3, struct S l4,
     const double _Complex * __restrict x, int y, int z)
{
  int i, j;
  while (y < z - 2)
    {
      for (j = 0; j < 5; ++j)
        {
          double a = __builtin_creal (x[5 * y + j]);
          double b = __builtin_cimag (x[5 * y + j]);
          double c = __builtin_creal (x[5 * (y + 2) + j]);
          double d = __builtin_cimag (x[5 * (y + 2) + j]);
          double e = __builtin_creal (x[5 * (y + 1) + j]);
          double f = __builtin_cimag (x[5 * (y + 1) + j]);
          double g = __builtin_creal (x[5 * (y + 3) + j]);
          double h = __builtin_cimag (x[5 * (y + 3) + j]);
          for (i = 0; i < 3; ++i)
            {
              p1->j[j].r.v[i] += l2.v[i] * a;
              p1->j[j].r.v[i] += l4.v[i] * c;
              p1->j[j].i.v[i] += l2.v[i] * b;
              p1->j[j].i.v[i] += l4.v[i] * d;
              p2->j[j].r.v[i] += l3.v[i] * e;
              p2->j[j].r.v[i] += l1.v[i] * g;
              p2->j[j].i.v[i] += l3.v[i] * f;
              p2->j[j].i.v[i] += l1.v[i] * h;
            }
        }
      y += 4;
    }
}

_Complex double x[5005];
struct U p1, p2;

int
main ()
{
  int i, j;
  struct S l1, l2, l3, l4;
  for (i = 0; i < 5005; ++i)
    x[i] = i + 1.0iF * (2 * i);
  for (i = 0; i < 3; ++i)
    {
      l1.v[i] = 1;
      l2.v[i] = 2;
      l3.v[i] = 3;
      l4.v[i] = 4;
    }
  foo (&p1, &p2, l1, l2, l3, l4, x, 5, 1000);
  for (j = 0; j < 5; ++j)
    for (i = 0; i < 3; ++i)
      if (p1.j[j].r.v[i] != 3752430 + j * 1494
          || p1.j[j].i.v[i] != p1.j[j].r.v[i] * 2
          || p2.j[j].r.v[i] != 2502450 + j * 996
          || p2.j[j].i.v[i] != p2.j[j].r.v[i] * 2)
        __builtin_abort ();
  return 0;
}


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
  2012-05-16  6:03 ` [Bug tree-optimization/53366] " hjl.tools at gmail dot com
  2012-05-16  9:43 ` jakub at gcc dot gnu.org
@ 2012-05-16 12:00 ` hjl.tools at gmail dot com
  2012-05-16 17:15 ` ubizjak at gmail dot com
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2012-05-16 12:00 UTC (permalink / raw)
  To: gcc-bugs

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

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |UNCONFIRMED
                 CC|                            |ubizjak at gmail dot com
     Ever Confirmed|1                           |0


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (2 preceding siblings ...)
  2012-05-16 12:00 ` hjl.tools at gmail dot com
@ 2012-05-16 17:15 ` ubizjak at gmail dot com
  2012-05-16 17:26 ` ubizjak at gmail dot com
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: ubizjak at gmail dot com @ 2012-05-16 17:15 UTC (permalink / raw)
  To: gcc-bugs

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

Uros Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1

--- Comment #3 from Uros Bizjak <ubizjak at gmail dot com> 2012-05-16 16:48:39 UTC ---
Even more reduced testcase, fails with -O3 -mavx, works with -O3 -msse4:

--cut here--
struct S { double v[3]; };
struct T { struct S r, i; };
struct U { struct T j[2]; };

void __attribute__((noinline))
foo (struct U *__restrict p1,
     const double _Complex * __restrict x)
{
  int i, j;

  for (j = 0; j < 2; ++j)
    {
      double a = __builtin_creal (x[j]);
      double b = __builtin_cimag (x[j]);
      double c = __builtin_creal (x[j+2]);
      double d = __builtin_cimag (x[j+2]);

      for (i = 0; i < 3; ++i)
    {
      p1->j[j].r.v[i] += a;
      p1->j[j].r.v[i] += c;

      p1->j[j].i.v[i] += b;
      p1->j[j].i.v[i] += d;
    }
    }
}

_Complex double x[4];

struct U p1;

int
main ()
{
  int i, j;

  for (i = 0; i < 4; ++i)
    x[i] = i + 1.0iF * (2 * i);

  foo (&p1, x);

  for (j = 0; j < 2; ++j)
    for (i = 0; i < 3; ++i)
      if (p1.j[j].r.v[i] != __builtin_creal (x[j] + x[j+2])
      || p1.j[j].i.v[i] != __builtin_cimag (x[j] + x[j+2]))
    __builtin_abort ();

  return 0;
}
--cut here--


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (3 preceding siblings ...)
  2012-05-16 17:15 ` ubizjak at gmail dot com
@ 2012-05-16 17:26 ` ubizjak at gmail dot com
  2012-05-16 17:50 ` ubizjak at gmail dot com
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: ubizjak at gmail dot com @ 2012-05-16 17:26 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2012-05-16 17:15:58 UTC ---
foo (struct U * restrict p1, const complex double * restrict x)
{
  vector(4) double vect_var_.41;
  vector(4) double vect_var_.40;
  vector(4) double vect_var_.39;
  vector(4) double vect_var_.38;
  vector(4) double vect_var_.37;
  vector(4) double vect_var_.32;
  vector(4) double vect_var_.31;
  vector(4) double vect_var_.30;
  vector(4) double * restrict vect_p.26;
  vector(4) double vect_var_.25;

<bb 2>:
  vect_var_.37_84 = MEM[(const complex double *)x_5(D)];
  vect_var_.38_86 = MEM[(const complex double *)x_5(D) + 32B];
  vect_var_.39_88 = MEM[(const complex double *)x_5(D) + 64B];
  vect_var_.25_72 = MEM[(const complex double *)x_5(D) + 96B];
  vect_var_.30_76 = MEM[(struct U *)p1_14(D)];
  vect_p.26_77 = p1_14(D) + 32;
  vect_var_.31_78 = MEM[(struct U *)p1_14(D) + 32B];
  vect_p.26_79 = &MEM[(void *)p1_14(D) + 64B];
  vect_var_.32_80 = MEM[(struct U *)p1_14(D) + 64B];
  vect_var_.40_89 = vect_var_.30_76 + vect_var_.37_84;
  vect_var_.40_90 = vect_var_.31_78 + vect_var_.38_86;
  vect_var_.40_91 = vect_var_.32_80 + vect_var_.39_88;
  vect_var_.41_92 = vect_var_.38_86 + vect_var_.40_89;
  vect_var_.41_93 = vect_var_.39_88 + vect_var_.40_90;
  vect_var_.41_94 = vect_var_.25_72 + vect_var_.40_91;
  MEM[(struct U *)p1_14(D)] = vect_var_.41_92;
  MEM[(struct U *)p1_14(D) + 32B] = vect_var_.41_93;
  MEM[(struct U *)p1_14(D) + 64B] = vect_var_.41_94;
  return;

}

It looks to me that x is handled in a totally wrong way.


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (4 preceding siblings ...)
  2012-05-16 17:26 ` ubizjak at gmail dot com
@ 2012-05-16 17:50 ` ubizjak at gmail dot com
  2012-05-17  8:57 ` jakub at gcc dot gnu.org
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: ubizjak at gmail dot com @ 2012-05-16 17:50 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Uros Bizjak <ubizjak at gmail dot com> 2012-05-16 17:25:50 UTC ---
This testcase fails with -O3 with plain SSE vectorization:

--cut here--
struct S { float v[3]; };
struct T { struct S r, i; };
struct U { struct T j[2]; };

void __attribute__((noinline))
foo (struct U *__restrict p1,
     const float _Complex * __restrict x)
{
  int i, j;

  for (j = 0; j < 2; ++j)
    {
      float a = __builtin_crealf (x[j]);
      float b = __builtin_cimagf (x[j]);
      float c = __builtin_crealf (x[j+2]);
      float d = __builtin_cimagf (x[j+2]);

      for (i = 0; i < 3; ++i)
    {
      p1->j[j].r.v[i] += a;
      p1->j[j].r.v[i] += c;

      p1->j[j].i.v[i] += b;
      p1->j[j].i.v[i] += d;
    }
    }
}

_Complex float x[4];

struct U p1;

int
main ()
{
  int i, j;

  for (i = 0; i < 4; ++i)
    x[i] = i + 1.0iF * (2 * i);

  foo (&p1, x);

  for (j = 0; j < 2; ++j)
    for (i = 0; i < 3; ++i)
      if (p1.j[j].r.v[i] != __builtin_crealf (x[j] + x[j+2])
      || p1.j[j].i.v[i] != __builtin_cimagf (x[j] + x[j+2]))
    __builtin_abort ();

  return 0;
}
--cut here--


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (5 preceding siblings ...)
  2012-05-16 17:50 ` ubizjak at gmail dot com
@ 2012-05-17  8:57 ` jakub at gcc dot gnu.org
  2012-05-17  9:43 ` jakub at gcc dot gnu.org
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-05-17  8:57 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-17 08:45:40 UTC ---
Slightly more reduced:

struct T { float r[3], i[3]; };
struct U { struct T j[2]; };

void __attribute__ ((noinline))
foo (struct U *__restrict y, const float _Complex *__restrict x)
{
  int i, j;
  for (j = 0; j < 2; ++j)
    {
      float a = __real__ x[j];
      float b = __imag__ x[j];
      float c = __real__ x[j + 2];
      float d = __imag__ x[j + 2];
      for (i = 0; i < 3; ++i)
        {
          y->j[j].r[i] = y->j[j].r[i] + a + c;
          y->j[j].i[i] = y->j[j].i[i] + b + d;
        }
    }
}

_Complex float x[4];
struct U y;

int
main ()
{
  int i, j;
  for (i = 0; i < 4; ++i)
    x[i] = i + 1.0iF * (2 * i);
  foo (&y, x);
  for (j = 0; j < 2; ++j)
    for (i = 0; i < 3; ++i)
      if (y.j[j].r[i] != __real__ (x[j] + x[j + 2])
          || y.j[j].i[i] != __imag__ (x[j] + x[j + 2]))
        __builtin_abort ();
  return 0;
}

I bet the bug is in vect_supported_load_permutation_p, in particular the
complex_numbers == 2 handling there.
The if (complex_numbers) doesn't do anything, because
GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) == first in all cases,
and then just
  /* We checked that this case ok, so there is no need to proceed with 
     permutation tests.  */
  if (complex_numbers == 2)
    {
      VEC_free (slp_tree, heap, SLP_INSTANCE_LOADS (slp_instn));
      VEC_free (int, heap, SLP_INSTANCE_LOAD_PERMUTATION (slp_instn));
      return true;
    }
I guess we need way more checks than that to verify we don't need to proceed
with permutation tests.  E.g. one possible reason not to return early might be
that complex_numbers != VEC_length (slp_tree, SLP_INSTANCE_LOADS (slp_instn)) ?
In that case we fail to check altogether whether the non-complex permutations
match the complex ones.  I also wonder whether group lengths smaller than
group_size can't be a problem (in this case, group_size is 6, but the complex
groups have just 2 elements).  This stuff has been added as part of the PR44152
fix.


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (6 preceding siblings ...)
  2012-05-17  8:57 ` jakub at gcc dot gnu.org
@ 2012-05-17  9:43 ` jakub at gcc dot gnu.org
  2012-05-18 11:48 ` rguenth at gcc dot gnu.org
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-05-17  9:43 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-17 08:55:36 UTC ---
Indeed,

--- gcc/tree-vect-slp.c.jj    2012-04-19 11:09:13.000000000 +0200
+++ gcc/tree-vect-slp.c    2012-05-17 10:47:30.124290361 +0200
@@ -1199,7 +1199,8 @@ vect_supported_load_permutation_p (slp_i

   /* We checked that this case ok, so there is no need to proceed with 
      permutation tests.  */
-  if (complex_numbers == 2)
+  if (complex_numbers == 2
+      && VEC_length (slp_tree, SLP_INSTANCE_LOADS (slp_instn)) == 2)
     {
       VEC_free (slp_tree, heap, SLP_INSTANCE_LOADS (slp_instn));
       VEC_free (int, heap, SLP_INSTANCE_LOAD_PERMUTATION (slp_instn));

alone fixes this as the further load permutation checks fail.  Whether this is
the right fix and whether it is sufficient, no idea unfortunately, not familiar
enough with the interleaving code.  Richard or Michael, any thoughts?


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (7 preceding siblings ...)
  2012-05-17  9:43 ` jakub at gcc dot gnu.org
@ 2012-05-18 11:48 ` rguenth at gcc dot gnu.org
  2012-05-21 15:13 ` jakub at gcc dot gnu.org
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-05-18 11:48 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-05-18 10:36:04 UTC ---
(In reply to comment #7)
> Indeed,
> 
> --- gcc/tree-vect-slp.c.jj    2012-04-19 11:09:13.000000000 +0200
> +++ gcc/tree-vect-slp.c    2012-05-17 10:47:30.124290361 +0200
> @@ -1199,7 +1199,8 @@ vect_supported_load_permutation_p (slp_i
> 
>    /* We checked that this case ok, so there is no need to proceed with 
>       permutation tests.  */
> -  if (complex_numbers == 2)
> +  if (complex_numbers == 2
> +      && VEC_length (slp_tree, SLP_INSTANCE_LOADS (slp_instn)) == 2)
>      {
>        VEC_free (slp_tree, heap, SLP_INSTANCE_LOADS (slp_instn));
>        VEC_free (int, heap, SLP_INSTANCE_LOAD_PERMUTATION (slp_instn));
> 
> alone fixes this as the further load permutation checks fail.  Whether this is
> the right fix and whether it is sufficient, no idea unfortunately, not familiar
> enough with the interleaving code.  Richard or Michael, any thoughts?

I'm not very familiar with the code, but the above looks sensible and safe
at least.


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (8 preceding siblings ...)
  2012-05-18 11:48 ` rguenth at gcc dot gnu.org
@ 2012-05-21 15:13 ` jakub at gcc dot gnu.org
  2012-05-21 21:05 ` jakub at gcc dot gnu.org
  2012-05-22  7:42 ` [Bug tree-optimization/53366] [4.7/4.8 Regression] " jakub at gcc dot gnu.org
  11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-05-21 15:13 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-21 14:29:19 UTC ---
Author: jakub
Date: Mon May 21 14:29:11 2012
New Revision: 187717

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187717
Log:
    PR tree-optimization/53366
    * tree-vect-slp.c (vect_supported_load_permutation_p): Don't shortcut
    tests if complex_numbers == 2, but there are non-complex number loads
    too.

    * gcc.dg/torture/pr53366-1.c: New test.
    * gcc.dg/torture/pr53366-2.c: New test.
    * gcc.target/i386/pr53366-1.c: New test.
    * gcc.target/i386/pr53366-2.c: New test.

Added:
    trunk/gcc/testsuite/gcc.dg/torture/pr53366-1.c
    trunk/gcc/testsuite/gcc.dg/torture/pr53366-2.c
    trunk/gcc/testsuite/gcc.target/i386/pr53366-1.c
    trunk/gcc/testsuite/gcc.target/i386/pr53366-2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-vect-slp.c


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

* [Bug tree-optimization/53366] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (9 preceding siblings ...)
  2012-05-21 15:13 ` jakub at gcc dot gnu.org
@ 2012-05-21 21:05 ` jakub at gcc dot gnu.org
  2012-05-22  7:42 ` [Bug tree-optimization/53366] [4.7/4.8 Regression] " jakub at gcc dot gnu.org
  11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-05-21 21:05 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-21 21:03:50 UTC ---
Author: jakub
Date: Mon May 21 21:03:42 2012
New Revision: 187740

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187740
Log:
    PR tree-optimization/53366
    * tree-vect-slp.c (vect_supported_load_permutation_p): Don't shortcut
    tests if complex_numbers == 2, but there are non-complex number loads
    too.

    * gcc.dg/torture/pr53366-1.c: New test.
    * gcc.dg/torture/pr53366-2.c: New test.
    * gcc.target/i386/pr53366-1.c: New test.
    * gcc.target/i386/pr53366-2.c: New test.

Added:
    branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr53366-1.c
    branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr53366-2.c
    branches/gcc-4_7-branch/gcc/testsuite/gcc.target/i386/pr53366-1.c
    branches/gcc-4_7-branch/gcc/testsuite/gcc.target/i386/pr53366-2.c
Modified:
    branches/gcc-4_7-branch/gcc/ChangeLog
    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_7-branch/gcc/tree-vect-slp.c


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

* [Bug tree-optimization/53366] [4.7/4.8 Regression] wrong code generation by tree vectorizer using AVX
  2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
                   ` (10 preceding siblings ...)
  2012-05-21 21:05 ` jakub at gcc dot gnu.org
@ 2012-05-22  7:42 ` jakub at gcc dot gnu.org
  11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-05-22  7:42 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |4.7.1
            Summary|wrong code generation by    |[4.7/4.8 Regression] wrong
                   |tree vectorizer using AVX   |code generation by tree
                   |                            |vectorizer using AVX

--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-22 07:38:53 UTC ---
Fixed.


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

end of thread, other threads:[~2012-05-22  7:40 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-15 21:22 [Bug tree-optimization/53366] New: wrong code generation by tree vectorizer using AVX martin@mpa-garching.mpg.de
2012-05-16  6:03 ` [Bug tree-optimization/53366] " hjl.tools at gmail dot com
2012-05-16  9:43 ` jakub at gcc dot gnu.org
2012-05-16 12:00 ` hjl.tools at gmail dot com
2012-05-16 17:15 ` ubizjak at gmail dot com
2012-05-16 17:26 ` ubizjak at gmail dot com
2012-05-16 17:50 ` ubizjak at gmail dot com
2012-05-17  8:57 ` jakub at gcc dot gnu.org
2012-05-17  9:43 ` jakub at gcc dot gnu.org
2012-05-18 11:48 ` rguenth at gcc dot gnu.org
2012-05-21 15:13 ` jakub at gcc dot gnu.org
2012-05-21 21:05 ` jakub at gcc dot gnu.org
2012-05-22  7:42 ` [Bug tree-optimization/53366] [4.7/4.8 Regression] " jakub at gcc dot gnu.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).