Commit f108770a by Uros Bizjak Committed by Uros Bizjak

i386.i386.md (*zero_extendsidi2): Do not penalize non-interunit SSE move alternatives with '?'.

	* config/i386.i386.md (*zero_extendsidi2): Do not penalize
	non-interunit SSE move alternatives with '?'.
	(zero-extendsidi peephole2): New peephole to skip intermediate
	general register in SSE zero-extend sequence.

testsuite/ChangeLog:

	* gcc.target/i386/pr80425-1.c: New test.
	* gcc.target/i386/pr80425-2.c: Ditto.

From-SVN: r248070
parent e30ce0a3
2017-05-15 Uros Bizjak <ubizjak@gmail.com>
* config/i386.i386.md (*zero_extendsidi2): Do not penalize
non-interunit SSE move alternatives with '?'.
(zero-extendsidi peephole2): New peephole to skip intermediate
general register in SSE zero-extend sequence.
2017-05-15 Jeff Law <law@redhat.com>
* reorg.c (relax_delay_slots): Create a new variable to hold
......
......@@ -3762,10 +3762,10 @@
(define_insn "*zero_extendsidi2"
[(set (match_operand:DI 0 "nonimmediate_operand"
"=r,?r,?o,r ,o,?*Ym,?!*y,?r ,?r,?*Yi,?*x,?*x,?*v,*r")
"=r,?r,?o,r ,o,?*Ym,?!*y,?r ,?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,*x,r ,m , *x, *v,*k")))]
"0 ,rm,r ,rmWz,0,r ,m ,*Yj,*x,r ,m ,*x,*v,*k")))]
""
{
switch (get_attr_type (insn))
......@@ -3885,6 +3885,15 @@
(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")])
......
2017-05-15 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/pr80425-1.c: New test.
* gcc.target/i386/pr80425-2.c: Ditto.
2017-05-15 Jeff Law <law@redhat.com>
* gcc.target/mips/reorgbug-1.c: New test.
......
/* { dg-do compile } */
/* { dg-options "-O2 -mavx512f -mtune=intel" } */
#include <x86intrin.h>
__m512i
f1 (__m512i x, int a)
{
return _mm512_srai_epi32 (x, a);
}
/* { dg-final { scan-assembler-times "movd\[ \\t\]+\[^\n\]*%xmm" 1 } } */
/* { dg-do compile } */
/* { dg-options "-O2 -mavx512f -mtune=intel" } */
#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 } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment