i386.md (UNSPEC_VSIBADDR): New.
authorJakub Jelinek <jakub@redhat.com>
Wed, 26 Oct 2011 09:46:45 +0000 (11:46 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 26 Oct 2011 09:46:45 +0000 (11:46 +0200)
* config/i386/i386.md (UNSPEC_VSIBADDR): New.
* config/i386/predicates.md (vsib_address_operand,
vsib_mem_operator): New predicates.
* config/i386/i386.c (ix86_print_operand_address): Handle
UNSPEC_VSIBADDR addresses.
* config/i386/sse.md (avx2_gathersi<mode>, avx2_gatherdi<mode>,
avx2_gatherdi<mode>256): Adjust expanders to use MEM with
UNSPEC_VSIBADDR address.
(*avx2_gathersi<mode>, *avx2_gatherdi<mode>, *avx2_gatherdi<mode>256):
Adjust insns to use MEM with UNSPEC_VSIBADDR address.

* gcc.target/i386/avx2-i32gatherd-1.c: Adjust scan-assembler regex
to work also with -masm=intel and additionally test the xmm vs. ymm
register type combination on mask/dest and in vsib.
* gcc.target/i386/avx2-i32gatherd256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherd256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherd-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherps-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherps256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherps256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherps-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherq-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherq256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherq256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherq-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherd-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherd256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherd256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherd-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherps-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherps256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherps256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherps-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherq-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherq256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherq256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherq-3.c: Likewise.

From-SVN: r180520

38 files changed:
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/predicates.md
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/avx2-i32gatherd-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherd-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherd256-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherd256-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherpd-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherpd-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherps-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherps-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherps256-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherps256-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherq-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherq-3.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-1.c
gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherd-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherd-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherd256-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherd256-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherpd-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherpd-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherps-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherps-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherps256-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherps256-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherq-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherq-3.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-1.c
gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-3.c

index 1a09dcc78c3812bd05ec37c0c6dc17b916db5b26..d4c198664b6add682fba46d3cccc3243bad3044f 100644 (file)
@@ -1,3 +1,16 @@
+2011-10-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/i386/i386.md (UNSPEC_VSIBADDR): New.
+       * config/i386/predicates.md (vsib_address_operand,
+       vsib_mem_operator): New predicates.
+       * config/i386/i386.c (ix86_print_operand_address): Handle
+       UNSPEC_VSIBADDR addresses.
+       * config/i386/sse.md (avx2_gathersi<mode>, avx2_gatherdi<mode>,
+       avx2_gatherdi<mode>256): Adjust expanders to use MEM with
+       UNSPEC_VSIBADDR address.
+       (*avx2_gathersi<mode>, *avx2_gatherdi<mode>, *avx2_gatherdi<mode>256):
+       Adjust insns to use MEM with UNSPEC_VSIBADDR address.
+
 2011-10-26  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/50763
index 0d5063e0e7e6967133d2d58de11cd5aeb0600a7a..c6e09aecccf063cfe66cfd475b427bb3dc71d0b6 100644 (file)
@@ -14231,7 +14231,20 @@ ix86_print_operand_address (FILE *file, rtx addr)
   struct ix86_address parts;
   rtx base, index, disp;
   int scale;
-  int ok = ix86_decompose_address (addr, &parts);
+  int ok;
+  bool vsib = false;
+
+  if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_VSIBADDR)
+    {
+      ok = ix86_decompose_address (XVECEXP (addr, 0, 0), &parts);
+      gcc_assert (parts.index == NULL_RTX);
+      parts.index = XVECEXP (addr, 0, 1);
+      parts.scale = INTVAL (XVECEXP (addr, 0, 2));
+      addr = XVECEXP (addr, 0, 0);
+      vsib = true;
+    }
+  else
+    ok = ix86_decompose_address (addr, &parts);
 
   gcc_assert (ok);
 
@@ -14328,8 +14341,8 @@ ix86_print_operand_address (FILE *file, rtx addr)
          if (index)
            {
              putc (',', file);
-             print_reg (index, code, file);
-             if (scale != 1)
+             print_reg (index, vsib ? 0 : code, file);
+             if (scale != 1 || vsib)
                fprintf (file, ",%d", scale);
            }
          putc (')', file);
@@ -14379,8 +14392,8 @@ ix86_print_operand_address (FILE *file, rtx addr)
          if (index)
            {
              putc ('+', file);
-             print_reg (index, code, file);
-             if (scale != 1)
+             print_reg (index, vsib ? 0 : code, file);
+             if (scale != 1 || vsib)
                fprintf (file, "*%d", scale);
            }
          putc (']', file);
index 866fb05d867e719bf2d9527dd48f7cd3b282bcf9..6eb6152e50412c0f029544e4c916864aea246fd8 100644 (file)
   UNSPEC_VPERMSF
   UNSPEC_VPERMTI
   UNSPEC_GATHER
+  UNSPEC_VSIBADDR
 
   ;; For BMI support
   UNSPEC_BEXTR
index 349f5b0c427faf8e7fdce51074a31bc271a7c84b..48e110ad164397ac323c9a62fa01a0baa71eda4e 100644 (file)
   return parts.seg == SEG_DEFAULT;
 })
 
+;; Return true if op if a valid base register, displacement or
+;; sum of base register and displacement for VSIB addressing.
+(define_predicate "vsib_address_operand"
+  (match_operand 0 "address_operand")
+{
+  struct ix86_address parts;
+  int ok;
+  rtx disp;
+
+  ok = ix86_decompose_address (op, &parts);
+  gcc_assert (ok);
+  if (parts.index || parts.seg != SEG_DEFAULT)
+    return false;
+
+  /* VSIB addressing doesn't support (%rip).  */
+  if (parts.disp && GET_CODE (parts.disp) == CONST)
+    {
+      disp = XEXP (parts.disp, 0);
+      if (GET_CODE (disp) == PLUS)
+       disp = XEXP (disp, 0);
+      if (GET_CODE (disp) == UNSPEC)
+       switch (XINT (disp, 1))
+         {
+         case UNSPEC_GOTPCREL:
+         case UNSPEC_PCREL:
+         case UNSPEC_GOTNTPOFF:
+           return false;
+         }
+    }
+
+  return true;
+})
+
+(define_predicate "vsib_mem_operator"
+  (match_code "mem"))
+
 ;; Return true if the rtx is known to be at least 32 bits aligned.
 (define_predicate "aligned_operand"
   (match_operand 0 "general_operand")
index 31c40d36584f110c6ae7d5fdb4f2a7a5e450b27f..73429e472bade1bfc184cb7a56aaee9516efd5d0 100644 (file)
   [(parallel [(set (match_operand:VEC_GATHER_MODE 0 "register_operand" "")
                   (unspec:VEC_GATHER_MODE
                     [(match_operand:VEC_GATHER_MODE 1 "register_operand" "")
-                     (match_operand 2 "register_operand" "")
+                     (mem:<ssescalarmode>
+                       (match_par_dup 7
+                         [(match_operand 2 "vsib_address_operand" "")
+                          (match_operand:<VEC_GATHER_MODE> 3 "register_operand" "")
+                          (match_operand:SI 5 "const1248_operand " "")]))
                      (mem:BLK (scratch))
-                     (match_operand:<VEC_GATHER_MODE> 3 "register_operand" "")
-                     (match_operand:VEC_GATHER_MODE 4 "register_operand" "")
-                     (match_operand:SI 5 "const1248_operand " "")]
+                     (match_operand:VEC_GATHER_MODE 4 "register_operand" "")]
                     UNSPEC_GATHER))
              (clobber (match_scratch:VEC_GATHER_MODE 6 ""))])]
-  "TARGET_AVX2")
+  "TARGET_AVX2"
+{
+  operands[7]
+    = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3],
+                                       operands[5]), UNSPEC_VSIBADDR);
+})
 
 (define_insn "*avx2_gathersi<mode>"
   [(set (match_operand:VEC_GATHER_MODE 0 "register_operand" "=&x")
        (unspec:VEC_GATHER_MODE
          [(match_operand:VEC_GATHER_MODE 2 "register_operand" "0")
-          (match_operand:P 3 "register_operand" "r")
+          (match_operator:<ssescalarmode> 7 "vsib_mem_operator"
+            [(unspec:P
+               [(match_operand:P 3 "vsib_address_operand" "p")
+                (match_operand:<VEC_GATHER_MODE> 4 "register_operand" "x")
+                (match_operand:SI 6 "const1248_operand" "n")]
+               UNSPEC_VSIBADDR)])
           (mem:BLK (scratch))
-          (match_operand:<VEC_GATHER_MODE> 4 "register_operand" "x")
-          (match_operand:VEC_GATHER_MODE 5 "register_operand" "1")
-          (match_operand:SI 6 "const1248_operand" "n")]
+          (match_operand:VEC_GATHER_MODE 5 "register_operand" "1")]
          UNSPEC_GATHER))
    (clobber (match_scratch:VEC_GATHER_MODE 1 "=&x"))]
   "TARGET_AVX2"
-  "v<sseintprefix>gatherd<ssemodesuffix>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}"
+  "v<sseintprefix>gatherd<ssemodesuffix>\t{%1, %7, %0|%0, %7, %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
   [(parallel [(set (match_operand:VEC_GATHER_MODE 0 "register_operand" "")
                   (unspec:VEC_GATHER_MODE
                     [(match_operand:VEC_GATHER_MODE 1 "register_operand" "")
-                     (match_operand 2 "register_operand" "")
+                     (mem:<ssescalarmode>
+                       (match_par_dup 7
+                         [(match_operand 2 "vsib_address_operand" "")
+                          (match_operand:<AVXMODE48P_DI> 3 "register_operand" "")
+                          (match_operand:SI 5 "const1248_operand " "")]))
                      (mem:BLK (scratch))
-                     (match_operand:<AVXMODE48P_DI> 3 "register_operand" "")
-                     (match_operand:VEC_GATHER_MODE 4 "register_operand" "")
-                     (match_operand:SI 5 "const1248_operand " "")]
+                     (match_operand:VEC_GATHER_MODE 4 "register_operand" "")]
                     UNSPEC_GATHER))
              (clobber (match_scratch:VEC_GATHER_MODE 6 ""))])]
-  "TARGET_AVX2")
+  "TARGET_AVX2"
+{
+  operands[7]
+    = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3],
+                                       operands[5]), UNSPEC_VSIBADDR);
+})
 
 (define_insn "*avx2_gatherdi<mode>"
   [(set (match_operand:AVXMODE48P_DI 0 "register_operand" "=&x")
        (unspec:AVXMODE48P_DI
          [(match_operand:AVXMODE48P_DI 2 "register_operand" "0")
-          (match_operand:P 3 "register_operand" "r")
+          (match_operator:<ssescalarmode> 7 "vsib_mem_operator"
+            [(unspec:P
+               [(match_operand:P 3 "vsib_address_operand" "p")
+                (match_operand:<AVXMODE48P_DI> 4 "register_operand" "x")
+                (match_operand:SI 6 "const1248_operand" "n")]
+               UNSPEC_VSIBADDR)])
           (mem:BLK (scratch))
-          (match_operand:<AVXMODE48P_DI> 4 "register_operand" "x")
-          (match_operand:AVXMODE48P_DI 5 "register_operand" "1")
-          (match_operand:SI 6 "const1248_operand" "n")]
+          (match_operand:AVXMODE48P_DI 5 "register_operand" "1")]
          UNSPEC_GATHER))
    (clobber (match_scratch:AVXMODE48P_DI 1 "=&x"))]
   "TARGET_AVX2"
-  "v<sseintprefix>gatherq<ssemodesuffix>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}"
+  "v<sseintprefix>gatherq<ssemodesuffix>\t{%1, %7, %0|%0, %7, %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
   [(parallel [(set (match_operand:VI4F_128 0 "register_operand" "")
                   (unspec:VI4F_128
                     [(match_operand:VI4F_128 1 "register_operand" "")
-                     (match_operand 2 "register_operand" "")
+                     (mem:<ssescalarmode>
+                       (match_par_dup 7
+                         [(match_operand 2 "vsib_address_operand" "")
+                          (match_operand:V4DI 3 "register_operand" "")
+                          (match_operand:SI 5 "const1248_operand " "")]))
                      (mem:BLK (scratch))
-                     (match_operand:V4DI 3 "register_operand" "")
-                     (match_operand:VI4F_128 4 "register_operand" "")
-                     (match_operand:SI 5 "const1248_operand " "")]
+                     (match_operand:VI4F_128 4 "register_operand" "")]
                     UNSPEC_GATHER))
              (clobber (match_scratch:VI4F_128 6 ""))])]
-  "TARGET_AVX2")
+  "TARGET_AVX2"
+{
+  operands[7]
+    = gen_rtx_UNSPEC (Pmode, gen_rtvec (3, operands[2], operands[3],
+                                       operands[5]), UNSPEC_VSIBADDR);
+})
 
 (define_insn "*avx2_gatherdi<mode>256"
   [(set (match_operand:VI4F_128 0 "register_operand" "=x")
        (unspec:VI4F_128
          [(match_operand:VI4F_128 2 "register_operand" "0")
-          (match_operand:P 3 "register_operand" "r")
+          (match_operator:<ssescalarmode> 7 "vsib_mem_operator"
+            [(unspec:P
+               [(match_operand:P 3 "vsib_address_operand" "p")
+                (match_operand:V4DI 4 "register_operand" "x")
+                (match_operand:SI 6 "const1248_operand" "n")]
+               UNSPEC_VSIBADDR)])
           (mem:BLK (scratch))
-          (match_operand:V4DI 4 "register_operand" "x")
-          (match_operand:VI4F_128 5 "register_operand" "1")
-          (match_operand:SI 6 "const1248_operand" "n")]
+          (match_operand:VI4F_128 5 "register_operand" "1")]
          UNSPEC_GATHER)) 
    (clobber (match_scratch:VI4F_128 1 "=&x"))]
   "TARGET_AVX2"
-  "v<sseintprefix>gatherq<ssemodesuffix>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}"
+  "v<sseintprefix>gatherq<ssemodesuffix>\t{%1, %7, %0|%0, %7, %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
index 2c9026e075a483967a935194654db6f2ea1a2fb2..33542ac3ad635fe6fc2b1e0292aa5f0b76647af4 100644 (file)
@@ -1,3 +1,40 @@
+2011-10-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.target/i386/avx2-i32gatherd-1.c: Adjust scan-assembler regex
+       to work also with -masm=intel and additionally test the xmm vs. ymm
+       register type combination on mask/dest and in vsib.
+       * gcc.target/i386/avx2-i32gatherd256-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherd256-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherd-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherpd-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherpd256-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherpd256-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherpd-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherps-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherps256-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherps256-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherps-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherq-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherq256-1.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherq256-3.c: Likewise.
+       * gcc.target/i386/avx2-i32gatherq-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherd-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherd256-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherd256-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherd-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherpd-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherpd256-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherpd256-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherpd-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherps-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherps256-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherps256-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherps-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherq-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherq256-1.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherq256-3.c: Likewise.
+       * gcc.target/i386/avx2-i64gatherq-3.c: Likewise.
+
 2011-10-26  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/50763
index 8adddcfdc4639f2aa5bfbb7dca678805c0bde397..ae3b1d577b42cbc8cb3b011b8dd5cafc65414b21 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index f84c4a56463ca6b6cc0a636c4965f03cc34052f0..fc8fedea076c8f0552e884007ce25bc235a4c5ab 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index a4bbb1d38783bcaba6da149825db9c9e2a2d4ec8..afc73b9b18b5ce7eb5b1612ed767208f07341bfa 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 36df1f80cc123b9595a525b4fca66ff29c755497..d0c86429449ad791a9481c6c3d91a2891fc0e2ab 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index e9a3a0ecedd12ec0ab5f127f45c2028869f8b732..860cac448d740327d3988e69a34d57cfc4becd54 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 08d0de29b96064d8ee8513ecbccbe4540dde9177..5e1d4864bdf323f860bf1a475b4d3206f624a416 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 82edc5c5526b9e557caafc0788d759f82b31fb87..00b6a35c59d6cbbfe027bb0be7877fe5387d54bc 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index bc22fae9f5aa41d6e47c2b4284637d523b02178f..336fb299b0f77bf6fdfdf945dfe9acb3ef045318 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 5559cb198d23cfd10b80018f2016cfa79b067582..c43687c4d01c3c70ecafe28bf12bb139c5934aeb 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 0423d2c23456a5d1ffe82b2efcfd0b8540729e92..76b46fb23ab5bb8e7974b349f8eb969a819d973f 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index ce77a398699d794bcf5bc501b6aadf2917bdabb0..f09a0ff32f6a9c7b6e086379502c5c92be59cc4c 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 63879e09f931e4d9b17583d2e68529ff7c135138..34b7b8d72fe52e4751ece7ebc71629e4ce552ecf 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index a31e07c3adaea6d0120c63f0082034a0b50a6864..0b250e5dd2ca5e217562a9beb8a64a4460eff07c 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index b3cd6099544494a9db408e52572f3736f0b6377c..d87400c77dbda8c323dbe1005b64150f9b34ab5f 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 140036f921f33457a4236e624b807dc714c241a7..e8651438a9bd02754d8928508e6f57afb6ee93fe 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 345917cc2ea57d6bf9615c19c5a0964044f3a11d..7b6f4491aa02a7a6d043d56a6c56ae569309f4a4 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 333a7f848812eec53d07a5ba28b221cf5086c1d3..f2ade8415d3bcb8ee443cd3eb7bc90262a6b9096 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 2c04422331f7e59737d23099571e50f5aaaaffae..265713da5043031b4a0d045128d1147083e7db42 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index d338d1bcd86ef9063713d709543357b4253276bb..ccc16e523c8d69163b2d2024224ce5b8a3ef7331 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 50fbbf2eb74f7f5d95c7dfcf74a0c351a27a3c3c..815e70828248da4f919f3b579ba656688c570e9c 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index a8cc464f42d1fe71ae79fe9b07b9da977743790d..895b248c722321e64b339c4c51809ccc749e22af 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 8cf10f3e7e7bd196ff5e97d1b1069925ffebeaf2..436ffe90a902a0cc5504e5fe4811d0cdc7e36019 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 39e2370b2ff5dbc364ba4c02e65a0a06d5ab8ef5..bc22f02e56b215f6514a3137a2a662203746e3f2 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 83b31544c7bec8cdabfb1d598fff5da2a2650d0b..505722a8a79c2b15ca4ba9d5e62b11f9904891db 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 2dccde6462d3cf95445d2b47d8788d41df30a8f1..c7d7c0787b2b485252805851c24ac114a8cecd23 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index f69cc2636bf3f7b295a94fcbd028108c3207003f..ca7162ad92b4d5d948447a6ff97c6a980ded14e8 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 59dd47d91138b112542c3bd59259fbfc0d0b399b..6612e9940055cc99bf20313a6289002b24a18d90 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 4ccc10a2b95b7fd14e4c3592af4753431025078a..f05e4a208c12cacbd561396136ea5f1c153073f3 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 7db1d924cf8bbde33fac7fe03c28c01ed07ecf09..8f9752d2c84267c8eb03933a6936287f59d9f172 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index 16e4fb8ce0e0efd23ff726908da1e78ff5c7a604..c1c31c7288ed6a9f12048ff8d78925e01557da45 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]\[^\n\]*xmm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index a9b09210070c799920670f7fc5ac1f10e8afe1a0..c873cb95487b84bfaff85b0c4c2621b424ed54a6 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>
 
index fd96648fab165744a26eca8d9042114e85d02f9c..f60ad22746ac6db47ee3354e5439cca817fb6895 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mavx2 -O2" } */
-/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
+/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*ymm\[0-9\]" } } */
 
 #include <immintrin.h>