aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPat Haugen <pthaugen@us.ibm.com>2017-11-10 16:46:54 +0000
committerPat Haugen <pthaugen@gcc.gnu.org>2017-11-10 16:46:54 +0000
commitcd764269a16bdf66160c7272c9340afd57e654fa (patch)
treebcb04274ab44263ff667c5f79acae64d631761c8 /gcc
parent025d57f037ad13eb479818b677ef4be4d97b639c (diff)
downloadgcc-cd764269a16bdf66160c7272c9340afd57e654fa.zip
gcc-cd764269a16bdf66160c7272c9340afd57e654fa.tar.gz
gcc-cd764269a16bdf66160c7272c9340afd57e654fa.tar.bz2
power9.md (power9-qpdiv): Correct DFU pipe usage.
* rs6000/power9.md (power9-qpdiv): Correct DFU pipe usage. (power9-qpmul): New. * rs6000/rs6000.md ("type" attr): Add qmul. (mul<mode>3, fma<mode>4_hw, *fms<mode>4_hw, *nfma<mode>4_hw, *nfms<mode>4_hw, mul<mode>3_odd, fma<mode>4_odd, *fms<mode>4_odd, *nfma<mode>4_odd, *nfms<mode>4_odd): Change type to qmul. From-SVN: r254631
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/rs6000/power9.md8
-rw-r--r--gcc/config/rs6000/rs6000.md22
3 files changed, 27 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7e4093a..82665bd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2017-11-10 Pat Haugen <pthaugen@us.ibm.com>
+
+ * rs6000/power9.md (power9-qpdiv): Correct DFU pipe usage.
+ (power9-qpmul): New.
+ * rs6000/rs6000.md ("type" attr): Add qmul.
+ (mul<mode>3, fma<mode>4_hw, *fms<mode>4_hw, *nfma<mode>4_hw,
+ *nfms<mode>4_hw, mul<mode>3_odd, fma<mode>4_odd, *fms<mode>4_odd,
+ *nfma<mode>4_odd, *nfms<mode>4_odd): Change type to qmul.
+
2017-11-10 Martin Sebor <msebor@redhat.com>
PR c/81117
diff --git a/gcc/config/rs6000/power9.md b/gcc/config/rs6000/power9.md
index 217864f..82e4b1c 100644
--- a/gcc/config/rs6000/power9.md
+++ b/gcc/config/rs6000/power9.md
@@ -434,7 +434,13 @@
(and (eq_attr "type" "vecdiv")
(eq_attr "size" "128")
(eq_attr "cpu" "power9"))
- "DU_super_power9,dfu_power9")
+ "DU_super_power9,dfu_power9*44")
+
+(define_insn_reservation "power9-qpmul" 24
+ (and (eq_attr "type" "qmul")
+ (eq_attr "size" "128")
+ (eq_attr "cpu" "power9"))
+ "DU_super_power9,dfu_power9*12")
(define_insn_reservation "power9-mffgpr" 2
(and (eq_attr "type" "mffgpr")
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index b800276..7025b00 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -182,7 +182,7 @@
cmp,
branch,jmpreg,mfjmpr,mtjmpr,trap,isync,sync,load_l,store_c,
cr_logical,delayed_cr,mfcr,mfcrf,mtcr,
- fpcompare,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,
+ fpcompare,fp,fpsimple,dmul,qmul,sdiv,ddiv,ssqrt,dsqrt,
vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,
vecfloat,vecfdiv,vecdouble,mffgpr,mftgpr,crypto,
veclogical,veccmpfx,vecexts,vecmove,
@@ -14335,7 +14335,7 @@
(match_operand:IEEE128 2 "altivec_register_operand" "v")))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsmulqp %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "div<mode>3"
@@ -14437,7 +14437,7 @@
(match_operand:IEEE128 3 "altivec_register_operand" "0")))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsmaddqp %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "*fms<mode>4_hw"
@@ -14449,7 +14449,7 @@
(match_operand:IEEE128 3 "altivec_register_operand" "0"))))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsmsubqp %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "*nfma<mode>4_hw"
@@ -14461,7 +14461,7 @@
(match_operand:IEEE128 3 "altivec_register_operand" "0"))))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsnmaddqp %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "*nfms<mode>4_hw"
@@ -14474,7 +14474,7 @@
(match_operand:IEEE128 3 "altivec_register_operand" "0")))))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsnmsubqp %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "extend<SFDF:mode><IEEE128:mode>2_hw"
@@ -14749,7 +14749,7 @@
UNSPEC_MUL_ROUND_TO_ODD))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsmulqpo %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "div<mode>3_odd"
@@ -14782,7 +14782,7 @@
UNSPEC_FMA_ROUND_TO_ODD))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsmaddqpo %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "*fms<mode>4_odd"
@@ -14795,7 +14795,7 @@
UNSPEC_FMA_ROUND_TO_ODD))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsmsubqpo %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "*nfma<mode>4_odd"
@@ -14808,7 +14808,7 @@
UNSPEC_FMA_ROUND_TO_ODD)))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsnmaddqpo %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "*nfms<mode>4_odd"
@@ -14822,7 +14822,7 @@
UNSPEC_FMA_ROUND_TO_ODD)))]
"TARGET_FLOAT128_HW && FLOAT128_IEEE_P (<MODE>mode)"
"xsnmsubqpo %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "qmul")
(set_attr "size" "128")])
(define_insn "trunc<mode>df2_odd"