This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH rs6000] Fix PR79951, ICE for unrecognizable insn with -mno-cmpb


The define_expand for copysign<mode>3 will call
gen_copysign<mode>3_fcpsgn if either TARGET_CMPB || VECTOR_UNIT_VSX_P
(<MODE>mode) are true, but gen_copysign<mode>3_fcpsgn is missing the
check of VECTOR_UNIT_VSX_P (<MODE>mode) which results in an
unrecognizable insn ICE. This is fixed with the following patch.

Bootstrap/regtest on powerpc64le with no new regressions. Ok for trunk?
Ok for backport to GCC 5/6 branches after testing?

-Pat


2017-03-15  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.

testsuite/ChangeLog:
2017-03-15  Pat Haugen  <pthaugen@us.ibm.com>

	* gcc.target/powerpc/pr79951.c: New.



Index: config/rs6000/rs6000.md
===================================================================
--- config/rs6000/rs6000.md	(revision 246180)
+++ config/rs6000/rs6000.md	(working copy)
@@ -4831,7 +4831,7 @@ (define_insn "copysign<mode>3_fcpsgn"
 	(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"
Index: testsuite/gcc.target/powerpc/pr79951.c
===================================================================
--- testsuite/gcc.target/powerpc/pr79951.c	(nonexistent)
+++ testsuite/gcc.target/powerpc/pr79951.c	(working copy)
@@ -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);
+}
+


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]