re PR target/22152 (Poor loop optimization when using mmx builtins)
PR target/22152 * config/i386/mmx.md (*mov<mode>_internal_rex64, *mov<mode>_internal_avx, *mov<mode>_internal, *movv2sf_internal_rex64_avx, *movv2sf_internal_rex64, *movv2sf_internal_avx, *movv2sf_internal): Split out !y-!y alternative. [ From-SVN: r163926
This commit is contained in:
parent
c5ee1358b9
commit
61ec112322
2 changed files with 65 additions and 51 deletions
|
@ -1,3 +1,11 @@
|
|||
2010-09-06 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/22152
|
||||
* config/i386/mmx.md (*mov<mode>_internal_rex64,
|
||||
*mov<mode>_internal_avx, *mov<mode>_internal,
|
||||
*movv2sf_internal_rex64_avx, *movv2sf_internal_rex64,
|
||||
*movv2sf_internal_avx, *movv2sf_internal): Split out !y-!y alternative.
|
||||
|
||||
2010-09-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* c-typeck.c (do_warn_double_promotion): Remove.
|
||||
|
@ -22,8 +30,7 @@
|
|||
2010-09-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/45524
|
||||
* configure.ac (enable_decimal_float): Set to
|
||||
$default_decimal_float.
|
||||
* configure.ac (enable_decimal_float): Set to $default_decimal_float.
|
||||
* configure: Regenerated.
|
||||
|
||||
2010-09-06 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||
|
|
|
@ -65,9 +65,9 @@
|
|||
|
||||
(define_insn "*mov<mode>_internal_rex64"
|
||||
[(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
|
||||
"=rm,r,!?y,!?y ,m ,!y,*Y2,x,x ,m,r,Yi")
|
||||
"=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x ,m,r ,Yi")
|
||||
(match_operand:MMXMODEI8 1 "vector_move_operand"
|
||||
"Cr ,m,C ,!?ym,!?y,*Y2,!y,C,xm,x,Yi,r"))]
|
||||
"Cr ,m,C ,!y,m ,!?y,*Y2,!y ,C,xm,x,Yi,r"))]
|
||||
"TARGET_64BIT && TARGET_MMX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
|
@ -76,6 +76,7 @@
|
|||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
%vpxor\t%0, %d0
|
||||
|
@ -83,31 +84,32 @@
|
|||
%vmovq\t{%1, %0|%0, %1}
|
||||
%vmovq\t{%1, %0|%0, %1}
|
||||
%vmovq\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov")
|
||||
(set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,*,1,1,*,1,*,*,*")
|
||||
(set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,1,1,1")
|
||||
[(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov")
|
||||
(set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,1,*,*,*")
|
||||
(set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,*,1,1,1")
|
||||
(set (attr "prefix_rex")
|
||||
(if_then_else (eq_attr "alternative" "8,9")
|
||||
(if_then_else (eq_attr "alternative" "9,10")
|
||||
(symbol_ref "x86_extended_reg_mentioned_p (insn)")
|
||||
(const_string "*")))
|
||||
(set (attr "prefix")
|
||||
(if_then_else (eq_attr "alternative" "7,8,9,10,11")
|
||||
(if_then_else (eq_attr "alternative" "8,9,10,11,12")
|
||||
(const_string "maybe_vex")
|
||||
(const_string "orig")))
|
||||
(set_attr "mode" "DI")])
|
||||
|
||||
(define_insn "*mov<mode>_internal_avx"
|
||||
[(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
|
||||
"=!?y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,r ,m")
|
||||
"=!?y,!y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,r ,m")
|
||||
(match_operand:MMXMODEI8 1 "vector_move_operand"
|
||||
"C ,!ym,!?y,*Y2,!y ,C ,*Y2m,*Y2,irm,r"))]
|
||||
"C ,!y,m ,!?y,*Y2,!y ,C ,*Y2m,*Y2,irm,r"))]
|
||||
"TARGET_AVX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
vpxor\t%0, %0, %0
|
||||
|
@ -115,26 +117,27 @@
|
|||
vmovq\t{%1, %0|%0, %1}
|
||||
#
|
||||
#"
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*")
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*")
|
||||
(set (attr "prefix")
|
||||
(if_then_else (eq_attr "alternative" "5,6,7")
|
||||
(if_then_else (eq_attr "alternative" "6,7,8")
|
||||
(const_string "vex")
|
||||
(const_string "orig")))
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,DI,DI,DI")])
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,TI,DI,DI,DI,DI")])
|
||||
|
||||
(define_insn "*mov<mode>_internal"
|
||||
[(set (match_operand:MMXMODEI8 0 "nonimmediate_operand"
|
||||
"=!?y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,*x,*x,*x,m ,r ,m")
|
||||
"=!?y,!y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,*x,*x,*x,m ,r ,m")
|
||||
(match_operand:MMXMODEI8 1 "vector_move_operand"
|
||||
"C ,!ym,!?y,*Y2,!y ,C ,*Y2m,*Y2,C ,*x,m ,*x,irm,r"))]
|
||||
"C ,!y,m ,!?y,*Y2,!y ,C ,*Y2m,*Y2,C ,*x,m ,*x,irm,r"))]
|
||||
"TARGET_MMX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
pxor\t%0, %0
|
||||
|
@ -146,11 +149,11 @@
|
|||
movlps\t{%1, %0|%0, %1}
|
||||
#
|
||||
#"
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,1,1,*,1,*,*,*,*,*,*,*")
|
||||
(set_attr "prefix_data16" "*,*,*,*,*,*,*,1,*,*,*,*,*,*")
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,1,1,*,1,*,*,*,*,*,*,*")
|
||||
(set_attr "prefix_data16" "*,*,*,*,*,*,*,*,1,*,*,*,*,*,*")
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,TI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
|
||||
(define_expand "movv2sf"
|
||||
[(set (match_operand:V2SF 0 "nonimmediate_operand" "")
|
||||
|
@ -163,9 +166,9 @@
|
|||
|
||||
(define_insn "*movv2sf_internal_rex64_avx"
|
||||
[(set (match_operand:V2SF 0 "nonimmediate_operand"
|
||||
"=rm,r ,!?y,!?y ,m ,!y,Y2,x,x,x,m,r,x")
|
||||
"=rm,r,!?y,!y,!?y,m ,!y,Y2,x,x,x,m,r,x")
|
||||
(match_operand:V2SF 1 "vector_move_operand"
|
||||
"Cr ,m ,C ,!?ym,!y,Y2,!y,C,x,m,x,x,r"))]
|
||||
"Cr ,m,C ,!y,m ,!?y,Y2,!y,C,x,m,x,x,r"))]
|
||||
"TARGET_64BIT && TARGET_AVX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
|
@ -174,6 +177,7 @@
|
|||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
vxorps\t%0, %0, %0
|
||||
|
@ -182,21 +186,21 @@
|
|||
vmovlps\t{%1, %0|%0, %1}
|
||||
vmovq\t{%1, %0|%0, %1}
|
||||
vmovq\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov")
|
||||
(set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set_attr "length_vex" "*,*,*,*,*,*,*,*,*,*,*,4,4")
|
||||
[(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov")
|
||||
(set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set_attr "length_vex" "*,*,*,*,*,*,*,*,*,*,*,*,4,4")
|
||||
(set (attr "prefix")
|
||||
(if_then_else (eq_attr "alternative" "7,8,9,10,11,12")
|
||||
(if_then_else (eq_attr "alternative" "8,9,10,11,12,13")
|
||||
(const_string "vex")
|
||||
(const_string "orig")))
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
|
||||
(define_insn "*movv2sf_internal_rex64"
|
||||
[(set (match_operand:V2SF 0 "nonimmediate_operand"
|
||||
"=rm,r ,!?y,!?y ,m ,!y,*Y2,x,x,x,m,r,Yi")
|
||||
"=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x,x,m,r ,Yi")
|
||||
(match_operand:V2SF 1 "vector_move_operand"
|
||||
"Cr ,m ,C ,!?ym,!y,*Y2,!y,C,x,m,x,Yi,r"))]
|
||||
"Cr ,m,C ,!y,m ,!?y,*Y2,!y ,C,x,m,x,Yi,r"))]
|
||||
"TARGET_64BIT && TARGET_MMX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
|
@ -205,6 +209,7 @@
|
|||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
xorps\t%0, %0
|
||||
|
@ -213,22 +218,23 @@
|
|||
movlps\t{%1, %0|%0, %1}
|
||||
movd\t{%1, %0|%0, %1}
|
||||
movd\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov")
|
||||
(set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
[(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov")
|
||||
(set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
|
||||
(define_insn "*movv2sf_internal_avx"
|
||||
[(set (match_operand:V2SF 0 "nonimmediate_operand"
|
||||
"=!?y,!?y ,m ,!y ,*Y2,*x,*x,*x,m ,r ,m")
|
||||
"=!?y,!y,!?y,m ,!y ,*Y2,*x,*x,*x,m ,r ,m")
|
||||
(match_operand:V2SF 1 "vector_move_operand"
|
||||
"C ,!?ym,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))]
|
||||
"C ,!y,m ,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))]
|
||||
"TARGET_AVX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
vxorps\t%0, %0, %0
|
||||
|
@ -237,26 +243,27 @@
|
|||
vmovlps\t{%1, %0|%0, %1}
|
||||
#
|
||||
#"
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*,*")
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set (attr "prefix")
|
||||
(if_then_else (eq_attr "alternative" "5,6,7,8")
|
||||
(if_then_else (eq_attr "alternative" "6,7,8,9")
|
||||
(const_string "vex")
|
||||
(const_string "orig")))
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
|
||||
(define_insn "*movv2sf_internal"
|
||||
[(set (match_operand:V2SF 0 "nonimmediate_operand"
|
||||
"=!?y,!?y ,m ,!y ,*Y2,*x,*x,*x,m ,r ,m")
|
||||
"=!?y,!y,!?y,m ,!y ,*Y2,*x,*x,*x,m ,r ,m")
|
||||
(match_operand:V2SF 1 "vector_move_operand"
|
||||
"C ,!?ym,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))]
|
||||
"C ,!y,m ,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))]
|
||||
"TARGET_MMX
|
||||
&& !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movdq2q\t{%1, %0|%0, %1}
|
||||
movq2dq\t{%1, %0|%0, %1}
|
||||
xorps\t%0, %0
|
||||
|
@ -265,10 +272,10 @@
|
|||
movlps\t{%1, %0|%0, %1}
|
||||
#
|
||||
#"
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
[(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*")
|
||||
(set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*")
|
||||
(set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*,*")
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")])
|
||||
|
||||
;; %%% This multiword shite has got to go.
|
||||
(define_split
|
||||
|
|
Loading…
Add table
Reference in a new issue