re PR target/80425 (Extra inter-unit register move with zero-extension)
authorUros Bizjak <uros@gcc.gnu.org>
Tue, 7 Nov 2017 18:51:22 +0000 (19:51 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 7 Nov 2017 18:51:22 +0000 (19:51 +0100)
PR target/80425
* config/i386.i386.md (*zero_extendsidi2): Change (?r,*Yj), (?*Yi,r)
and (*x,m) to ($r,Yj), ($Yi,r) and ($x,m).
(zero-extendsidi peephole2): Remove peephole.

testsuite/ChangeLog:

PR target/80425
* gcc.target/i386/pr80425-3.c: New test.

From-SVN: r254505

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr80425-3.c [new file with mode: 0644]

index 27d52937dd8a279b60f2a01ae0598cff1032184f..da5902d0ab553501e47e7d1a209afca968197a95 100644 (file)
@@ -1,3 +1,10 @@
+2017-11-07  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/80425
+       * config/i386.i386.md (*zero_extendsidi2): Change (?r,*Yj), (?*Yi,r)
+       and (*x,m) to ($r,Yj), ($Yi,r) and ($x,m).
+       (zero-extendsidi peephole2): Remove peephole.
+
 2017-11-07  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR c/53037
 
 2017-11-07  Andrew Waterman  <andrew@sifive.com>
 
-       * config/riscv/riscv-protos.h (riscv_hard_regno_nregs): New
-       prototype.
+       * config/riscv/riscv-protos.h (riscv_hard_regno_nregs): New prototype.
        (riscv_expand_block_move): Likewise.
-       gcc/config/riscv/riscv.h (MOVE_RATIO): Tune cost to movmemsi
+       config/riscv/riscv.h (MOVE_RATIO): Tune cost to movmemsi
        implementation.
        (RISCV_MAX_MOVE_BYTES_PER_LOOP_ITER): New define.
        (RISCV_MAX_MOVE_BYTES_STRAIGHT): New define.
-       gcc/config/riscv/riscv.c (riscv_block_move_straight): New
-       function.
+       * config/riscv/riscv.c (riscv_block_move_straight): New function.
        (riscv_adjust_block_mem): Likewise.
        (riscv_block_move_loop): Likewise.
        (riscv_expand_block_move): Likewise.
index d48decbb7d99768567be64b5537fe468a0511947..36061e19adb84b04da6f3eb01eaf2eac54201a7f 100644 (file)
 
 (define_insn "*zero_extendsidi2"
   [(set (match_operand:DI 0 "nonimmediate_operand"
-               "=r,?r,?o,r   ,o,?*Ym,?!*y,?r ,?*Yi,*x,*x,*v,*r")
+               "=r,?r,?o,r   ,o,?*Ym,?!*y,$r,$Yi,$x,*x,*v,*r")
        (zero_extend:DI
         (match_operand:SI 1 "x86_64_zext_operand"
-               "0 ,rm,r ,rmWz,0,r   ,m   ,*Yj,r   ,m ,*x,*v,*k")))]
+               "0 ,rm,r ,rmWz,0,r   ,m   ,Yj,r  ,m ,*x,*v,*k")))]
   ""
 {
   switch (get_attr_type (insn))
    (set (match_dup 4) (const_int 0))]
   "split_double_mode (DImode, &operands[0], 1, &operands[3], &operands[4]);")
 
-(define_peephole2
-  [(set (match_operand:DI 0 "general_reg_operand")
-       (zero_extend:DI (match_operand:SI 1 "nonimmediate_gr_operand")))
-   (set (match_operand:DI 2 "sse_reg_operand") (match_dup 0))]
-  "TARGET_64BIT && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC
-   && peep2_reg_dead_p (2, operands[0])"
-  [(set (match_dup 2)
-       (zero_extend:DI (match_dup 1)))])
-
 (define_mode_attr kmov_isa
   [(QI "avx512dq") (HI "avx512f") (SI "avx512bw") (DI "avx512bw")])
 
index 59799238b1d08430d10e0f9bc4444c9cbed216c4..d8a018846b8f032c6074f8796385490304a84fca 100644 (file)
@@ -1,8 +1,13 @@
+2017-11-07  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/80425
+       * gcc.target/i386/pr80425-3.c: New test.
+
 2017-11-07  Andreas Schwab  <schwab@suse.de>
 
        * g++.dg/pr50763-3.C (evalPoint): Return a value.
 
-2017-10-17  Wilco Dijkstra  <wdijkstr@arm.com>
+2017-11-07  Wilco Dijkstra  <wdijkstr@arm.com>
            Jackson Woodruff  <jackson.woodruff@arm.com>
 
        PR tree-optimization/71026
diff --git a/gcc/testsuite/gcc.target/i386/pr80425-3.c b/gcc/testsuite/gcc.target/i386/pr80425-3.c
new file mode 100644 (file)
index 0000000..1bf80b1
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx512f" } */
+
+#include <x86intrin.h>
+
+extern int a;
+
+__m512i
+f1 (__m512i x)
+{
+  return _mm512_srai_epi32 (x, a);
+}
+
+/* { dg-final { scan-assembler-times "movd\[ \\t\]+\[^\n\]*%xmm" 1 } } */