public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
@ 2011-10-14 11:54 Kirill Yukhin
  2011-10-14 12:10 ` Jakub Jelinek
  0 siblings, 1 reply; 9+ messages in thread
From: Kirill Yukhin @ 2011-10-14 11:54 UTC (permalink / raw)
  To: gcc-patches List, Uros Bizjak, Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 989 bytes --]

Hello guys,
Here is a bunch of tests which check basic vectorization abilities to
generate AVX2 instructions.

testsuite/ChangeLog entry is:
2011-10-14  Kirill Yukhin  <kirill.yukhin@intel.com>

        * gcc.target/i386/avx2-vpaddd-3.c: New test.
        * gcc.target/i386/avx2-vpaddw-3.c: Ditto.
        * gcc.target/i386/avx2-vpaddb-3.c: New.
        * gcc.target/i386/avx2-vpaddq-3.c: Ditto.
        * gcc.target/i386/avx2-vpand-3.c: Ditto.
        * gcc.target/i386/avx2-vpmulld-3.c: Ditto.
        * gcc.target/i386/avx2-vpmullw-3.c: Ditto.
        * gcc.target/i386/avx2-vpsrad-3.c: Ditto.
        * gcc.target/i386/avx2-vpsraw-3.c: Ditto.
        * gcc.target/i386/avx2-vpsrld-3.c: Ditto.
        * gcc.target/i386/avx2-vpsrlw-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubb-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubd-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubq-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubw-3.c: Ditto.

Could you please have a look?

Thanks, K

[-- Attachment #2: avx2.vect.tests.gcc.patch --]
[-- Type: application/octet-stream, Size: 16635 bytes --]

diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
new file mode 100644
index 0000000..4333880
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+char a[SIZE];
+char b[SIZE];
+char c[SIZE];
+volatile char c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddb ();
+    check_paddb ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (char) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c
new file mode 100644
index 0000000..6c940f9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddd ();
+    check_paddd ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c
new file mode 100644
index 0000000..a5ca567
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+long long int a[SIZE];
+long long int b[SIZE];
+long long int c[SIZE];
+volatile long long int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  long long int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddq ();
+    check_paddq ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (long long int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c
new file mode 100644
index 0000000..0ac402f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short int a[SIZE];
+short int b[SIZE];
+short int c[SIZE];
+volatile short int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddw ();
+    check_paddw ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof(short) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c
new file mode 100644
index 0000000..cc3fd4b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+unsigned int a[SIZE];
+unsigned int b[SIZE];
+unsigned int c[SIZE];
+volatile unsigned int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pand ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] & b[i];
+}
+
+void
+check_pand ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] & b[i];
+}
+
+void static
+avx2_test (void)
+{
+  unsigned int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_pand ();
+    check_pand ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (unsigned int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpand\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c
new file mode 100644
index 0000000..62e9244
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pmulld ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] * b[i];
+}
+
+void
+check_pmulld ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] * b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_pmulld ();
+    check_pmulld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c
new file mode 100644
index 0000000..a9bef12
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short int a[SIZE];
+short int b[SIZE];
+short int c[SIZE];
+volatile short int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pmulld ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] * b[i];
+}
+
+void
+check_pmulld ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] * b[i];
+}
+
+void static
+avx2_test (void)
+{
+  short int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_pmulld ();
+    check_pmulld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (short int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpmullw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c
new file mode 100644
index 0000000..ad07de8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psrad ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psrad ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psrad ();
+    check_psrad ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsrad\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c
new file mode 100644
index 0000000..e6e7df1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short int a[SIZE];
+short int b[SIZE];
+short int c[SIZE];
+volatile short int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psraw ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psraw ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  short int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psraw ();
+    check_psraw ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (short int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsraw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c
new file mode 100644
index 0000000..32e399d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+unsigned int a[SIZE];
+unsigned int b[SIZE];
+unsigned int c[SIZE];
+volatile unsigned int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psrld ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psrld ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  unsigned int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psrld ();
+    check_psrld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (unsigned int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsrld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c
new file mode 100644
index 0000000..6c5402a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+unsigned short a[SIZE];
+unsigned short b[SIZE];
+unsigned short c[SIZE];
+volatile unsigned short c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psrld ()
+{
+  unsigned short i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psrld ()
+{
+  unsigned short i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  unsigned short i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psrld ();
+    check_psrld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (unsigned short) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsrlw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c
new file mode 100644
index 0000000..5002f3c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+char a[SIZE];
+char b[SIZE];
+char c[SIZE];
+volatile char c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubb ();
+    check_psubb ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (char) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c
new file mode 100644
index 0000000..7def232
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubd ();
+    check_psubd ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c
new file mode 100644
index 0000000..7b15c01
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+long long int a[SIZE];
+long long int b[SIZE];
+long long int c[SIZE];
+volatile long long int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  long long int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubq ();
+    check_psubq ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (long long int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c
new file mode 100644
index 0000000..3ffb10d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short a[SIZE];
+short b[SIZE];
+short c[SIZE];
+volatile short c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubw ();
+    check_psubw ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (short) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-14 11:54 [PATCH, i386 tests] New tests to check vectorization for AVX2 insns Kirill Yukhin
@ 2011-10-14 12:10 ` Jakub Jelinek
  2011-10-14 14:05   ` Kirill Yukhin
  0 siblings, 1 reply; 9+ messages in thread
From: Jakub Jelinek @ 2011-10-14 12:10 UTC (permalink / raw)
  To: Kirill Yukhin; +Cc: gcc-patches List, Uros Bizjak

On Fri, Oct 14, 2011 at 03:13:45PM +0400, Kirill Yukhin wrote:

--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
@@ -0,0 +1,49 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
...
+
+/* { dg-final { scan-assembler-times "vpaddb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */

You need
/* { dg-final { cleanup-saved-temps } } */
in all the testcases compiled with -save-temps. 

	Jakub

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-14 12:10 ` Jakub Jelinek
@ 2011-10-14 14:05   ` Kirill Yukhin
  2011-10-14 14:44     ` Jakub Jelinek
  0 siblings, 1 reply; 9+ messages in thread
From: Kirill Yukhin @ 2011-10-14 14:05 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches List, Uros Bizjak, H.J. Lu

[-- Attachment #1: Type: text/plain, Size: 651 bytes --]

Thanks, done.

Anything else?

K

On Fri, Oct 14, 2011 at 3:53 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Fri, Oct 14, 2011 at 03:13:45PM +0400, Kirill Yukhin wrote:
>
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
> @@ -0,0 +1,49 @@
> +/* { dg-do run } */
> +/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
> +/* { dg-require-effective-target avx2 } */
> +
> ...
> +
> +/* { dg-final { scan-assembler-times "vpaddb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
>
> You need
> /* { dg-final { cleanup-saved-temps } } */
> in all the testcases compiled with -save-temps.
>
>        Jakub
>

[-- Attachment #2: avx2.vect-2.tests.gcc.patch --]
[-- Type: application/octet-stream, Size: 17295 bytes --]

diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
new file mode 100644
index 0000000..c99c967
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+char a[SIZE];
+char b[SIZE];
+char c[SIZE];
+volatile char c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddb ();
+    check_paddb ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (char) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c
new file mode 100644
index 0000000..ab6b658
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddd ();
+    check_paddd ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c
new file mode 100644
index 0000000..066c6fa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+long long int a[SIZE];
+long long int b[SIZE];
+long long int c[SIZE];
+volatile long long int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  long long int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddq ();
+    check_paddq ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (long long int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c
new file mode 100644
index 0000000..34ba45e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short int a[SIZE];
+short int b[SIZE];
+short int c[SIZE];
+volatile short int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_paddw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] + b[i];
+}
+
+void
+check_paddw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] + b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_paddw ();
+    check_paddw ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof(short) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpaddw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c
new file mode 100644
index 0000000..8f1b6c0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+unsigned int a[SIZE];
+unsigned int b[SIZE];
+unsigned int c[SIZE];
+volatile unsigned int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pand ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] & b[i];
+}
+
+void
+check_pand ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] & b[i];
+}
+
+void static
+avx2_test (void)
+{
+  unsigned int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_pand ();
+    check_pand ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (unsigned int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpand\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c
new file mode 100644
index 0000000..5f656c3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pmulld ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] * b[i];
+}
+
+void
+check_pmulld ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] * b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_pmulld ();
+    check_pmulld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c
new file mode 100644
index 0000000..48ea215
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short int a[SIZE];
+short int b[SIZE];
+short int c[SIZE];
+volatile short int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pmulld ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] * b[i];
+}
+
+void
+check_pmulld ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] * b[i];
+}
+
+void static
+avx2_test (void)
+{
+  short int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_pmulld ();
+    check_pmulld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (short int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpmullw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c
new file mode 100644
index 0000000..008c86a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psrad ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psrad ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psrad ();
+    check_psrad ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsrad\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c
new file mode 100644
index 0000000..c805c00
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short int a[SIZE];
+short int b[SIZE];
+short int c[SIZE];
+volatile short int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psraw ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psraw ()
+{
+  short int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  short int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psraw ();
+    check_psraw ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (short int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsraw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c
new file mode 100644
index 0000000..09427b2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+unsigned int a[SIZE];
+unsigned int b[SIZE];
+unsigned int c[SIZE];
+volatile unsigned int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psrld ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psrld ()
+{
+  unsigned int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  unsigned int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psrld ();
+    check_psrld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (unsigned int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsrld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c
new file mode 100644
index 0000000..439a784
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+unsigned short a[SIZE];
+unsigned short b[SIZE];
+unsigned short c[SIZE];
+volatile unsigned short c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psrld ()
+{
+  unsigned short i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] >> 5;
+}
+
+void
+check_psrld ()
+{
+  unsigned short i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] >> 5;
+}
+
+void static
+avx2_test (void)
+{
+  unsigned short i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psrld ();
+    check_psrld ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (unsigned short) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsrlw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c
new file mode 100644
index 0000000..6e48971
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+char a[SIZE];
+char b[SIZE];
+char c[SIZE];
+volatile char c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubb ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubb ();
+    check_psubb ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (char) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c
new file mode 100644
index 0000000..d037d7e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+int a[SIZE];
+int b[SIZE];
+int c[SIZE];
+volatile int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubd ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubd ();
+    check_psubd ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c
new file mode 100644
index 0000000..92e1e6f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+long long int a[SIZE];
+long long int b[SIZE];
+long long int c[SIZE];
+volatile long long int c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubq ()
+{
+  long long int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  long long int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubq ();
+    check_psubq ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (long long int) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c
new file mode 100644
index 0000000..52fc88b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c
@@ -0,0 +1,50 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define SIZE 256
+
+short a[SIZE];
+short b[SIZE];
+short c[SIZE];
+volatile short c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_psubw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c[i] = a[i] - b[i];
+}
+
+void
+check_psubw ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+    c_ref[i] = a[i] - b[i];
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }
+
+    gen_psubw ();
+    check_psubw ();
+
+    if ( memcmp(c, c_ref, SIZE * sizeof (short) ) )
+      abort();
+  }
+}
+
+/* { dg-final { scan-assembler-times "vpsubw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-14 14:05   ` Kirill Yukhin
@ 2011-10-14 14:44     ` Jakub Jelinek
  2011-10-17 14:39       ` Kirill Yukhin
  0 siblings, 1 reply; 9+ messages in thread
From: Jakub Jelinek @ 2011-10-14 14:44 UTC (permalink / raw)
  To: Kirill Yukhin; +Cc: gcc-patches List, Uros Bizjak, H.J. Lu

On Fri, Oct 14, 2011 at 05:53:28PM +0400, Kirill Yukhin wrote:
> Thanks, done.
> 
> Anything else?

First of all, most of the testcases look very similar, the only changes
in between many of them are (unimportant) function names and different type.
So, I think it would be much better to just write one testcase that will use
instead of int or whatever the type is TYPE
where there will be
#ifndef TYPE
#define TYPE int
#endif
early in the testcase.  Then all the other type variants can just include
the base variant of the testcase, and would contain just

/* { dg-do run } */
/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
/* { dg-require-effective-target avx2 } */

#define TYPE long long int
#include "avx2-vpaddd-3.c"

/* { dg-final { scan-assembler-times "vpaddq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
/* { dg-final { cleanup-saved-temps } } */


The indentation is not the GNU standard one, though perhaps for the
testcases it is less important.  For testcases we import from somewhere
else we often keep it in the weirdo formatting it originally had
(after all, it doesn't hurt to verify that e.g. our lexer etc. isn't
surprised by whitespace missing or being present at unexpected spots).
These testcases on the other side are written for GCC just to check
the vectorization, so perhaps it should follow the GNU coding conventions.

+  for (i = 0; i < 4; ++i ) {
+    for ( j = 0; j < SIZE; ++j ) {
+      a[i] = i*i+i;
+      b[i] = i*i*i;
+    }

{ should be on the next line, indented by two columns from for.
= i * i + i;
= i * i * i;

+    if ( memcmp(c, c_ref, SIZE * sizeof (char) ) )

if (memcmp (c, c_ref, SIZE * sizeof (TYPE)))

+      abort();
+  }
+}
+

	Jakub

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-14 14:44     ` Jakub Jelinek
@ 2011-10-17 14:39       ` Kirill Yukhin
  2011-10-17 14:49         ` Jakub Jelinek
  0 siblings, 1 reply; 9+ messages in thread
From: Kirill Yukhin @ 2011-10-17 14:39 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches List, Uros Bizjak, H.J. Lu

[-- Attachment #1: Type: text/plain, Size: 998 bytes --]

Thanks for inputs, Jakub!

I am attaching updated patch.

Updated testsuite/ChangeLog entry:
2011-10-17  Kirill Yukhin  <kirill.yukhin@intel.com>

        * gcc.target/i386/avx2-vpop-check.h: New header.
        * gcc.target/i386/avx2-vpaddd-3.c: New test.
        * gcc.target/i386/avx2-vpaddw-3.c: Ditto.
        * gcc.target/i386/avx2-vpaddb-3.c: Ditto.
        * gcc.target/i386/avx2-vpaddq-3.c: Ditto.
        * gcc.target/i386/avx2-vpand-3.c: Ditto.
        * gcc.target/i386/avx2-vpmulld-3.c: Ditto.
        * gcc.target/i386/avx2-vpmullw-3.c: Ditto.
        * gcc.target/i386/avx2-vpsrad-3.c: Ditto.
        * gcc.target/i386/avx2-vpsraw-3.c: Ditto.
        * gcc.target/i386/avx2-vpsrld-3.c: Ditto.
        * gcc.target/i386/avx2-vpsrlw-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubb-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubd-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubq-3.c: Ditto.
        * gcc.target/i386/avx2-vpsubw-3.c: Ditto.


Could you please guys have a look?

K

[-- Attachment #2: avx2.vect-3.tests.gcc.patch --]
[-- Type: application/octet-stream, Size: 9835 bytes --]

diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
new file mode 100644
index 0000000..238f020
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE char
+#define BIN_OP(a, b) ((a) + (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpaddb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c
new file mode 100644
index 0000000..c57ef8f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE int
+#define BIN_OP(a, b) ((a) + (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpaddd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c
new file mode 100644
index 0000000..801bd39
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE long long int
+#define BIN_OP(a, b) ((a) + (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpaddq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c
new file mode 100644
index 0000000..facee9f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE short
+#define BIN_OP(a, b) ((a) + (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpaddw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c
new file mode 100644
index 0000000..67ca4a7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE unsigned
+#define BIN_OP(a, b) ((a) & (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpand\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c
new file mode 100644
index 0000000..b2d539b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE int
+#define BIN_OP(a, b) ((a) * (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c
new file mode 100644
index 0000000..46d173f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE short
+#define BIN_OP(a, b) ((a) * (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpmullw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpop-check.h b/gcc/testsuite/gcc.target/i386/avx2-vpop-check.h
new file mode 100644
index 0000000..143b54da
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpop-check.h
@@ -0,0 +1,53 @@
+#include "avx2-check.h"
+
+#define SIZE 256
+
+TYPE a[SIZE];
+TYPE b[SIZE];
+TYPE c[SIZE];
+volatile TYPE c_ref[SIZE];
+
+__attribute__ ((__noinline__))
+void
+gen_pop ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+#ifdef BIN_OP
+    c[i] = BIN_OP (a[i], b[i]);
+#else /*  Must be UN_OP */
+    c[i] = UN_OP (a[i]);
+#endif /*  BIN_OP */
+}
+
+void
+check_pop ()
+{
+  int i;
+  for (i = 0; i < SIZE; ++i)
+#ifdef BIN_OP
+    c_ref[i] = BIN_OP (a[i], b[i]);
+#else /*  Must be UN_OP */
+    c_ref[i] = UN_OP (a[i]);
+#endif /*  BIN_OP */
+}
+
+void static
+avx2_test (void)
+{
+  int i, j;
+  for (i = 0; i < 4; ++i )
+    {
+      for ( j = 0; j < SIZE; ++j )
+	{
+	  a[i] = i * i + i;
+	  b[i] = i * i * i;
+	}
+
+      gen_pop ();
+      check_pop ();
+
+      if (memcmp (c, c_ref, SIZE * sizeof (TYPE)))
+	abort();
+    }
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c
new file mode 100644
index 0000000..97affb4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE unsigned
+#define UN_OP(a) ((a) >> (5))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsrld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c
new file mode 100644
index 0000000..e711256
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE short
+#define UN_OP(a) ((a) >> (5))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsraw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c
new file mode 100644
index 0000000..97affb4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE unsigned
+#define UN_OP(a) ((a) >> (5))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsrld\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c
new file mode 100644
index 0000000..67f3afc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE unsigned short
+#define UN_OP(a) ((a) >> (5))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsrlw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c
new file mode 100644
index 0000000..843128b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE char
+#define BIN_OP(a, b) ((a) - (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsubb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c
new file mode 100644
index 0000000..f8f399f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE int
+#define BIN_OP(a, b) ((a) - (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsubd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c
new file mode 100644
index 0000000..0a23a28
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE long long int
+#define BIN_OP(a, b) ((a) - (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsubq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c b/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c
new file mode 100644
index 0000000..1cb90b5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */
+/* { dg-require-effective-target avx2 } */
+
+
+#define TYPE short
+#define BIN_OP(a, b) ((a) - (b))
+
+#include "avx2-vpop-check.h"
+
+/* { dg-final { scan-assembler-times "vpsubw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-17 14:39       ` Kirill Yukhin
@ 2011-10-17 14:49         ` Jakub Jelinek
  2011-10-17 16:03           ` Kirill Yukhin
  0 siblings, 1 reply; 9+ messages in thread
From: Jakub Jelinek @ 2011-10-17 14:49 UTC (permalink / raw)
  To: Kirill Yukhin; +Cc: gcc-patches List, Uros Bizjak, H.J. Lu

On Mon, Oct 17, 2011 at 06:27:04PM +0400, Kirill Yukhin wrote:
> Thanks for inputs, Jakub!
> 
> I am attaching updated patch.
> 
> Updated testsuite/ChangeLog entry:
> 2011-10-17  Kirill Yukhin  <kirill.yukhin@intel.com>
> 
>         * gcc.target/i386/avx2-vpop-check.h: New header.
>         * gcc.target/i386/avx2-vpaddd-3.c: New test.
>         * gcc.target/i386/avx2-vpaddw-3.c: Ditto.
>         * gcc.target/i386/avx2-vpaddb-3.c: Ditto.
>         * gcc.target/i386/avx2-vpaddq-3.c: Ditto.
>         * gcc.target/i386/avx2-vpand-3.c: Ditto.
>         * gcc.target/i386/avx2-vpmulld-3.c: Ditto.
>         * gcc.target/i386/avx2-vpmullw-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsrad-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsraw-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsrld-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsrlw-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsubb-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsubd-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsubq-3.c: Ditto.
>         * gcc.target/i386/avx2-vpsubw-3.c: Ditto.
> 
> 
> Could you please guys have a look?

This is ok for the trunk.

	Jakub

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-17 14:49         ` Jakub Jelinek
@ 2011-10-17 16:03           ` Kirill Yukhin
  2011-10-18 16:49             ` H.J. Lu
  0 siblings, 1 reply; 9+ messages in thread
From: Kirill Yukhin @ 2011-10-17 16:03 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches List, Uros Bizjak, H.J. Lu

Thanks, guys, could anybody please commit that?

K

On Mon, Oct 17, 2011 at 6:33 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Mon, Oct 17, 2011 at 06:27:04PM +0400, Kirill Yukhin wrote:
>> Thanks for inputs, Jakub!
>>
>> I am attaching updated patch.
>>
>> Updated testsuite/ChangeLog entry:
>> 2011-10-17  Kirill Yukhin  <kirill.yukhin@intel.com>
>>
>>         * gcc.target/i386/avx2-vpop-check.h: New header.
>>         * gcc.target/i386/avx2-vpaddd-3.c: New test.
>>         * gcc.target/i386/avx2-vpaddw-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpaddb-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpaddq-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpand-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpmulld-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpmullw-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsrad-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsraw-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsrld-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsrlw-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsubb-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsubd-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsubq-3.c: Ditto.
>>         * gcc.target/i386/avx2-vpsubw-3.c: Ditto.
>>
>>
>> Could you please guys have a look?
>
> This is ok for the trunk.
>
>        Jakub
>

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-17 16:03           ` Kirill Yukhin
@ 2011-10-18 16:49             ` H.J. Lu
  2011-10-18 16:54               ` Kirill Yukhin
  0 siblings, 1 reply; 9+ messages in thread
From: H.J. Lu @ 2011-10-18 16:49 UTC (permalink / raw)
  To: Kirill Yukhin; +Cc: Jakub Jelinek, gcc-patches List, Uros Bizjak

On Mon, Oct 17, 2011 at 7:49 AM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
> Thanks, guys, could anybody please commit that?
>

I checked it in for you.


-- 
H.J.

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

* Re: [PATCH, i386 tests] New tests to check vectorization for AVX2 insns.
  2011-10-18 16:49             ` H.J. Lu
@ 2011-10-18 16:54               ` Kirill Yukhin
  0 siblings, 0 replies; 9+ messages in thread
From: Kirill Yukhin @ 2011-10-18 16:54 UTC (permalink / raw)
  To: H.J. Lu; +Cc: Jakub Jelinek, gcc-patches List, Uros Bizjak

Thank you!

K

On Tue, Oct 18, 2011 at 7:42 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Oct 17, 2011 at 7:49 AM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
>> Thanks, guys, could anybody please commit that?
>>
>
> I checked it in for you.
>
>
> --
> H.J.
>

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

end of thread, other threads:[~2011-10-18 15:59 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-14 11:54 [PATCH, i386 tests] New tests to check vectorization for AVX2 insns Kirill Yukhin
2011-10-14 12:10 ` Jakub Jelinek
2011-10-14 14:05   ` Kirill Yukhin
2011-10-14 14:44     ` Jakub Jelinek
2011-10-17 14:39       ` Kirill Yukhin
2011-10-17 14:49         ` Jakub Jelinek
2011-10-17 16:03           ` Kirill Yukhin
2011-10-18 16:49             ` H.J. Lu
2011-10-18 16:54               ` Kirill Yukhin

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