aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@linux.vnet.ibm.com>2010-01-14 22:52:02 +0000
committerMichael Meissner <meissner@gcc.gnu.org>2010-01-14 22:52:02 +0000
commitc919858d6a696636b2bf7aa276fb902ad2f6d60b (patch)
tree26b88e698fdeff308edddfca40fa712338dd4aca
parentef5d11818dec252c1c843e82645b52ea71ab315c (diff)
downloadgcc-c919858d6a696636b2bf7aa276fb902ad2f6d60b.zip
gcc-c919858d6a696636b2bf7aa276fb902ad2f6d60b.tar.gz
gcc-c919858d6a696636b2bf7aa276fb902ad2f6d60b.tar.bz2
Fix 42747, make -mvsx enable sqrt
From-SVN: r155923
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/rs6000/rs6000.md11
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr42747.c8
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ce96cca..17c9a4b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-01-14 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/42747
+ * config/rs6000/rs6000.md (sqrtdf2): Split into expander and insn
+ to allow generation of the xssqrtdp instruction on power7.
+ (sqrtdf2_fpr): Ditto.
+
2010-01-14 Jakub Jelinek <jakub@redhat.com>
PR middle-end/42674
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index f30cb38..08475b6 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -1,6 +1,6 @@
;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
;; Free Software Foundation, Inc.
;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
@@ -6310,7 +6310,14 @@
[(set_attr "type" "dmul")
(set_attr "fp_type" "fp_maddsub_d")])
-(define_insn "sqrtdf2"
+(define_expand "sqrtdf2"
+ [(set (match_operand:DF 0 "gpc_reg_operand" "")
+ (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "")))]
+ "(TARGET_PPC_GPOPT || TARGET_POWER2) && TARGET_HARD_FLOAT && TARGET_FPRS
+ && TARGET_DOUBLE_FLOAT"
+ "")
+
+(define_insn "*sqrtdf2_fpr"
[(set (match_operand:DF 0 "gpc_reg_operand" "=d")
(sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "d")))]
"(TARGET_PPC_GPOPT || TARGET_POWER2) && TARGET_HARD_FLOAT && TARGET_FPRS
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f4d13be..f527fce 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-01-14 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/pr42747.c: New file.
+
2010-01-14 Jakub Jelinek <jakub@redhat.com>
PR middle-end/42674
diff --git a/gcc/testsuite/gcc.target/powerpc/pr42747.c b/gcc/testsuite/gcc.target/powerpc/pr42747.c
new file mode 100644
index 0000000..9e7310e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr42747.c
@@ -0,0 +1,8 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7 -ffast-math" } */
+
+double foo (double x) { return __builtin_sqrt (x); }
+
+/* { dg-final { scan-assembler "xssqrtdp" } } */