Commit db67dfda by Uros Bizjak Committed by Uros Bizjak

mmx.md (*vec_extractv2sf_1): Do not emit unpckhps.

	* config/i386/mmx.md (*vec_extractv2sf_1): Do not emit unpckhps.
	Emit movshdup for SSE3 and shufps otherwise.
	(*vec_extractv2si_1): Do not emit punpckhdq and unpckhps.
	Emit pshufd for SSE2 and shufps otherwise.

From-SVN: r219074
parent 7b8e6885
2014-12-27 Uros Bizjak <ubizjak@gmail.com>
* config/i386/mmx.md (*vec_extractv2sf_1): Do not emit unpckhps.
Emit movshdup for SSE3 and shufps otherwise.
(*vec_extractv2si_1): Do not emit punpckhdq and unpckhps.
Emit pshufd for SSE2 and shufps otherwise.
2014-12-24 Oleg Endo <olegendo@gcc.gnu.org> 2014-12-24 Oleg Endo <olegendo@gcc.gnu.org>
PR target/51244 PR target/51244
...@@ -600,20 +600,25 @@ ...@@ -600,20 +600,25 @@
;; Avoid combining registers from different units in a single alternative, ;; Avoid combining registers from different units in a single alternative,
;; see comment above inline_secondary_memory_needed function in i386.c ;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "*vec_extractv2sf_1" (define_insn "*vec_extractv2sf_1"
[(set (match_operand:SF 0 "nonimmediate_operand" "=y,x,y,x,f,r") [(set (match_operand:SF 0 "nonimmediate_operand" "=y,x,x,y,x,f,r")
(vec_select:SF (vec_select:SF
(match_operand:V2SF 1 "nonimmediate_operand" " 0,0,o,o,o,o") (match_operand:V2SF 1 "nonimmediate_operand" " 0,x,x,o,o,o,o")
(parallel [(const_int 1)])))] (parallel [(const_int 1)])))]
"TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"@ "@
punpckhdq\t%0, %0 punpckhdq\t%0, %0
unpckhps\t%0, %0 %vmovshdup\t{%1, %0|%0, %1}
shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
# #
# #
# #
#" #"
[(set_attr "type" "mmxcvt,sselog1,mmxmov,ssemov,fmov,imov") [(set_attr "isa" "*,sse3,noavx,*,*,*,*")
(set_attr "mode" "DI,V4SF,SF,SF,SF,SF")]) (set_attr "type" "mmxcvt,sse,sseshuf1,mmxmov,ssemov,fmov,imov")
(set_attr "length_immediate" "*,*,1,*,*,*,*")
(set_attr "prefix_rep" "*,1,*,*,*,*,*")
(set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig,orig")
(set_attr "mode" "DI,V4SF,V4SF,SF,SF,SF,SF")])
(define_split (define_split
[(set (match_operand:SF 0 "register_operand") [(set (match_operand:SF 0 "register_operand")
...@@ -1288,26 +1293,23 @@ ...@@ -1288,26 +1293,23 @@
;; Avoid combining registers from different units in a single alternative, ;; Avoid combining registers from different units in a single alternative,
;; see comment above inline_secondary_memory_needed function in i386.c ;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "*vec_extractv2si_1" (define_insn "*vec_extractv2si_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=y,x,x,x,y,x,r") [(set (match_operand:SI 0 "nonimmediate_operand" "=y,x,x,y,x,r")
(vec_select:SI (vec_select:SI
(match_operand:V2SI 1 "nonimmediate_operand" " 0,0,x,0,o,o,o") (match_operand:V2SI 1 "nonimmediate_operand" " 0,x,x,o,o,o")
(parallel [(const_int 1)])))] (parallel [(const_int 1)])))]
"TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
"@ "@
punpckhdq\t%0, %0 punpckhdq\t%0, %0
punpckhdq\t%0, %0 %vpshufd\t{$0xe5, %1, %0|%0, %1, 0xe5}
pshufd\t{$85, %1, %0|%0, %1, 85} shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
unpckhps\t%0, %0
# #
# #
#" #"
[(set (attr "isa") [(set_attr "isa" "*,sse2,noavx,*,*,*")
(if_then_else (eq_attr "alternative" "1,2") (set_attr "type" "mmxcvt,sseshuf1,sseshuf1,mmxmov,ssemov,imov")
(const_string "sse2") (set_attr "length_immediate" "*,1,1,*,*,*")
(const_string "*"))) (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig")
(set_attr "type" "mmxcvt,sselog1,sselog1,sselog1,mmxmov,ssemov,imov") (set_attr "mode" "DI,TI,V4SF,SI,SI,SI")])
(set_attr "length_immediate" "*,*,1,*,*,*,*")
(set_attr "mode" "DI,TI,TI,V4SF,SI,SI,SI")])
(define_split (define_split
[(set (match_operand:SI 0 "register_operand") [(set (match_operand:SI 0 "register_operand")
......
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