aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2017-12-12 20:44:57 +0000
committerWilliam Schmidt <wschmidt@gcc.gnu.org>2017-12-12 20:44:57 +0000
commit95e5bea0012664d225a40a219f98a9cc1f7f1579 (patch)
tree9892ad64a705ca7f03fd472e4614aaa4a73774e7
parent8eedea2cde1a19afffad9349116ae53292179f13 (diff)
downloadgcc-95e5bea0012664d225a40a219f98a9cc1f7f1579.zip
gcc-95e5bea0012664d225a40a219f98a9cc1f7f1579.tar.gz
gcc-95e5bea0012664d225a40a219f98a9cc1f7f1579.tar.bz2
re PR target/83332 (new test case gfortran.dg/vect/pr81303.f fails (r255499))
2017-12-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/83332 * config/rs6000/vector.md (vcondv2dfv2di): New define_expand. (vcondv2div2df): Likewise. (vconduv2dfv2di): Likewise. From-SVN: r255588
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/rs6000/vector.md54
2 files changed, 61 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b04e6fd..7415fa9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2017-12-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/83332
+ * config/rs6000/vector.md (vcondv2dfv2di): New define_expand.
+ (vcondv2div2df): Likewise.
+ (vconduv2dfv2di): Likewise.
+
2017-12-12 Jakub Jelinek <jakub@redhat.com>
* builtins.def (BUILT_IN_NEXTAFTER, BUILT_IN_NEXTAFTERF,
diff --git a/gcc/config/rs6000/vector.md b/gcc/config/rs6000/vector.md
index 5a9b1a8..35bd892 100644
--- a/gcc/config/rs6000/vector.md
+++ b/gcc/config/rs6000/vector.md
@@ -455,6 +455,42 @@
FAIL;
}")
+(define_expand "vcondv2dfv2di"
+ [(set (match_operand:V2DF 0 "vfloat_operand")
+ (if_then_else:V2DF
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V2DI 4 "vint_operand")
+ (match_operand:V2DI 5 "vint_operand")])
+ (match_operand:V2DF 1 "vfloat_operand")
+ (match_operand:V2DF 2 "vfloat_operand")))]
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)
+ && VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DImode)"
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+})
+
+(define_expand "vcondv2div2df"
+ [(set (match_operand:V2DI 0 "vint_operand")
+ (if_then_else:V2DI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V2DF 4 "vfloat_operand")
+ (match_operand:V2DF 5 "vfloat_operand")])
+ (match_operand:V2DI 1 "vint_operand")
+ (match_operand:V2DI 2 "vint_operand")))]
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)
+ && VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DImode)"
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+})
+
(define_expand "vcondu<mode><mode>"
[(set (match_operand:VEC_I 0 "vint_operand")
(if_then_else:VEC_I
@@ -492,6 +528,24 @@
FAIL;
}")
+(define_expand "vconduv2dfv2di"
+ [(set (match_operand:V2DF 0 "vfloat_operand")
+ (if_then_else:V2DF
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V2DI 4 "vint_operand")
+ (match_operand:V2DI 5 "vint_operand")])
+ (match_operand:V2DF 1 "vfloat_operand")
+ (match_operand:V2DF 2 "vfloat_operand")))]
+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)
+ && VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DImode)"
+{
+ if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
+ operands[3], operands[4], operands[5]))
+ DONE;
+ else
+ FAIL;
+})
+
(define_expand "vector_eq<mode>"
[(set (match_operand:VEC_C 0 "vlogical_operand" "")
(eq:VEC_C (match_operand:VEC_C 1 "vlogical_operand" "")