aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/athlon.md
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-10-08 22:45:56 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2012-10-08 20:45:56 +0000
commitb790dea2eb93fa958ec9b3f62adbbb1d1e633d1e (patch)
treeec8cd77b0fd2b7468d9a7a4fe327fae6147c4c15 /gcc/config/i386/athlon.md
parent9b2770f22cfddf5a0ab54659ce696071b0857444 (diff)
downloadgcc-b790dea2eb93fa958ec9b3f62adbbb1d1e633d1e.zip
gcc-b790dea2eb93fa958ec9b3f62adbbb1d1e633d1e.tar.gz
gcc-b790dea2eb93fa958ec9b3f62adbbb1d1e633d1e.tar.bz2
re PR middle-end/54400 (recognize vector reductions)
2012-10-08 Marc Glisse <marc.glisse@inria.fr> gcc/ PR target/54400 * config/i386/i386.md (type attribute): Add sseadd1. (unit attribute): Add support for sseadd1. (memory attribute): Likewise. * config/i386/athlon.md: Likewise. * config/i386/core2.md: Likewise. * config/i386/atom.md: Likewise. * config/i386/ppro.md: Likewise. * config/i386/bdver1.md: Likewise. * config/i386/sse.md (sse3_h<plusminus_insn>v2df3): split into... (sse3_haddv2df3): ... expander. (*sse3_haddv2df3): ... define_insn. Accept permuted operands. (sse3_hsubv2df3): ... define_insn. (*sse3_haddv2df3_low): New define_insn. (*sse3_hsubv2df3_low): New define_insn. gcc/testsuite/ PR target/54400 * gcc.target/i386/pr54400.c: New testcase. From-SVN: r192223
Diffstat (limited to 'gcc/config/i386/athlon.md')
-rw-r--r--gcc/config/i386/athlon.md18
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/config/i386/athlon.md b/gcc/config/i386/athlon.md
index 401cb0d..1a2d607 100644
--- a/gcc/config/i386/athlon.md
+++ b/gcc/config/i386/athlon.md
@@ -807,47 +807,47 @@
"athlon-direct,athlon-fpsched,athlon-fadd")
(define_insn_reservation "athlon_sseadd_load" 4
(and (eq_attr "cpu" "athlon")
- (and (eq_attr "type" "sseadd")
+ (and (eq_attr "type" "sseadd,sseadd1")
(and (eq_attr "mode" "SF,DF,DI")
(eq_attr "memory" "load"))))
"athlon-direct,athlon-fpload,athlon-fadd")
(define_insn_reservation "athlon_sseadd_load_k8" 6
(and (eq_attr "cpu" "k8,generic64,amdfam10")
- (and (eq_attr "type" "sseadd")
+ (and (eq_attr "type" "sseadd,sseadd1")
(and (eq_attr "mode" "SF,DF,DI")
(eq_attr "memory" "load"))))
"athlon-direct,athlon-fploadk8,athlon-fadd")
(define_insn_reservation "athlon_sseadd" 4
(and (eq_attr "cpu" "athlon,k8,generic64,amdfam10")
- (and (eq_attr "type" "sseadd")
+ (and (eq_attr "type" "sseadd,sseadd1")
(eq_attr "mode" "SF,DF,DI")))
"athlon-direct,athlon-fpsched,athlon-fadd")
(define_insn_reservation "athlon_sseaddvector_load" 5
(and (eq_attr "cpu" "athlon")
- (and (eq_attr "type" "sseadd")
+ (and (eq_attr "type" "sseadd,sseadd1")
(eq_attr "memory" "load")))
"athlon-vector,athlon-fpload2,(athlon-fadd*2)")
(define_insn_reservation "athlon_sseaddvector_load_k8" 7
(and (eq_attr "cpu" "k8,generic64")
- (and (eq_attr "type" "sseadd")
+ (and (eq_attr "type" "sseadd,sseadd1")
(eq_attr "memory" "load")))
"athlon-double,athlon-fpload2k8,(athlon-fadd*2)")
(define_insn_reservation "athlon_sseaddvector_load_amdfam10" 6
(and (eq_attr "cpu" "amdfam10")
- (and (eq_attr "type" "sseadd")
+ (and (eq_attr "type" "sseadd,sseadd1")
(eq_attr "memory" "load")))
"athlon-direct,athlon-fploadk8,athlon-fadd")
(define_insn_reservation "athlon_sseaddvector" 5
(and (eq_attr "cpu" "athlon")
- (eq_attr "type" "sseadd"))
+ (eq_attr "type" "sseadd,sseadd1"))
"athlon-vector,athlon-fpsched,(athlon-fadd*2)")
(define_insn_reservation "athlon_sseaddvector_k8" 5
(and (eq_attr "cpu" "k8,generic64")
- (eq_attr "type" "sseadd"))
+ (eq_attr "type" "sseadd,sseadd1"))
"athlon-double,athlon-fpsched,(athlon-fadd*2)")
(define_insn_reservation "athlon_sseaddvector_amdfam10" 4
(and (eq_attr "cpu" "amdfam10")
- (eq_attr "type" "sseadd"))
+ (eq_attr "type" "sseadd,sseadd1"))
"athlon-direct,athlon-fpsched,athlon-fadd")
;; Conversions behaves very irregularly and the scheduling is critical here.