aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDorit Nuzman <dorit@il.ibm.com>2008-09-07 08:54:00 +0000
committerIra Rosen <irar@gcc.gnu.org>2008-09-07 08:54:00 +0000
commitcc54af2085468f38cb4ce0b7f8a644a17ac9dd20 (patch)
treef05693dc559cf15edd83dca04f265331b78e174e /gcc
parentc0cf64a28761cb9014cc03f064159af02c5b12aa (diff)
downloadgcc-cc54af2085468f38cb4ce0b7f8a644a17ac9dd20.zip
gcc-cc54af2085468f38cb4ce0b7f8a644a17ac9dd20.tar.gz
gcc-cc54af2085468f38cb4ce0b7f8a644a17ac9dd20.tar.bz2
re PR tree-optimization/35642 (short * short multiplication not vectorized on Power)
PR tree-optimization/35642 * config/rs6000/altivec.md (mulv8hi3): Implement. Co-Authored-By: Ira Rosen <irar@il.ibm.com> From-SVN: r140083
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/altivec.md22
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/lib/target-supports.exp3
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index baa5ec5..5520820 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-07 Dorit Nuzman <dorit@il.ibm.com>
+ Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/35642
+ * config/rs6000/altivec.md (mulv8hi3): Implement.
+
2008-09-06 Jeff Law <law@redhat.com>
* h8300.h (IRA_COVER_CLASSES): Define.
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index e8028ed..5edd248 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -647,6 +647,28 @@
DONE;
}")
+(define_expand "mulv8hi3"
+ [(use (match_operand:V8HI 0 "register_operand" ""))
+ (use (match_operand:V8HI 1 "register_operand" ""))
+ (use (match_operand:V8HI 2 "register_operand" ""))]
+ "TARGET_ALTIVEC"
+ "
+{
+ rtx odd = gen_reg_rtx (V4SImode);
+ rtx even = gen_reg_rtx (V4SImode);
+ rtx high = gen_reg_rtx (V4SImode);
+ rtx low = gen_reg_rtx (V4SImode);
+
+ emit_insn (gen_altivec_vmulesh (even, operands[1], operands[2]));
+ emit_insn (gen_altivec_vmulosh (odd, operands[1], operands[2]));
+
+ emit_insn (gen_altivec_vmrghw (high, even, odd));
+ emit_insn (gen_altivec_vmrglw (low, even, odd));
+
+ emit_insn (gen_altivec_vpkuwum (operands[0], high, low));
+
+ DONE;
+}")
;; Fused multiply subtract
(define_insn "altivec_vnmsubfp"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a947f93..0ba477c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2008-09-07 Dorit Nuzman <dorit@il.ibm.com>
+ Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/35642
+ * lib/target-supports.exp (check_effective_target_vect_short_mult):
+ Add powerpc.
+
2008-09-07 Victor Kaplansky <victork@il.ibm.com>
PR testsuite/37334
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 925c892..2965064 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2093,7 +2093,8 @@ proc check_effective_target_vect_short_mult { } {
if { [istarget ia64-*-*]
|| [istarget spu-*-*]
|| [istarget i?86-*-*]
- || [istarget x86_64-*-*] } {
+ || [istarget x86_64-*-*]
+ || [istarget powerpc*-*-*] } {
set et_vect_short_mult_saved 1
}
}