aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.md2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr79951.c10
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eb0e150..2ea7fe8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-17 Pat Haugen <pthaugen@us.ibm.com>
+
+ PR target/79951
+ * config/rs6000/rs6000.md (copysign<mode>3_fcpsgn): Test
+ for VECTOR_UNIT_VSX_P (<MODE>mode) too.
+
2017-03-17 Bernd Schmidt <bschmidt@redhat.com>
* reload.c (find_reloads): When reloading a nonoffsettable address,
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 000d840..164fc2c 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -4831,7 +4831,7 @@
(unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")
(match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,<Fv>")]
UNSPEC_COPYSIGN))]
- "TARGET_<MODE>_FPR && TARGET_CMPB"
+ "TARGET_<MODE>_FPR && (TARGET_CMPB || VECTOR_UNIT_VSX_P (<MODE>mode))"
"@
fcpsgn %0,%2,%1
xscpsgndp %x0,%x2,%x1"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4162ca2..7178b8e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-17 Pat Haugen <pthaugen@us.ibm.com>
+
+ PR target/79951
+ * gcc.target/powerpc/pr79951.c: New.
+
2017-03-17 Bernd Schmidt <bschmidt@redhat.com>
PR rtl-optimization/79910
diff --git a/gcc/testsuite/gcc.target/powerpc/pr79951.c b/gcc/testsuite/gcc.target/powerpc/pr79951.c
new file mode 100644
index 0000000..6783744
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr79951.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -S -mno-cmpb" } */
+
+float testf (float x, float y)
+{
+ return __builtin_copysignf (x, y);
+}
+