expr.c (do_store_flag): Expand vector comparison as VEC_COND_EXPR if...
authorIlya Enkovich <enkovich.gnu@gmail.com>
Thu, 12 Nov 2015 11:38:24 +0000 (11:38 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Thu, 12 Nov 2015 11:38:24 +0000 (11:38 +0000)
gcc/

* expr.c (do_store_flag): Expand vector comparison as
VEC_COND_EXPR if vector comparison is not supported
by target.

gcc/testsuite/

* gcc.dg/pr68286.c: New test.

From-SVN: r230238

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr68286.c [new file with mode: 0644]

index db14b226ce81bee7bdfebea50dae81f54f2fe756..0a2a9ae2126d71224572614e6cbe02c7fb5e71f4 100644 (file)
@@ -1,3 +1,9 @@
+2015-11-12  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       * expr.c (do_store_flag): Expand vector comparison as
+       VEC_COND_EXPR if vector comparison is not supported
+       by target.
+
 2015-11-12  Renlin Li  <renlin.li@arm.com>
 
        * config/arm/arm.md (addsi3_compare_op2): Make the order of
index 03936ee3ddb3d087fbde02c4d7a12dd8b69e6188..bd43dc4f3fdcaed7683c3df28ce52dc364130cd0 100644 (file)
@@ -11128,7 +11128,8 @@ do_store_flag (sepops ops, rtx target, machine_mode mode)
   if (TREE_CODE (ops->type) == VECTOR_TYPE)
     {
       tree ifexp = build2 (ops->code, ops->type, arg0, arg1);
-      if (VECTOR_BOOLEAN_TYPE_P (ops->type))
+      if (VECTOR_BOOLEAN_TYPE_P (ops->type)
+         && expand_vec_cmp_expr_p (TREE_TYPE (arg0), ops->type))
        return expand_vec_cmp_expr (ops->type, ifexp, target);
       else
        {
index 1fd6ccf1fe0afb414cfa3d5543e5477d2e0b7804..20a7deb6017f22caf4f8bf87d311a97414e49638 100644 (file)
@@ -1,3 +1,7 @@
+2015-11-12  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       * gcc.dg/pr68286.c: New test.
+
 2015-11-12  Christian Bruel  <christian.bruel@st.com>
 
        * gcc.target/arm/mmx-1.c: Adjust for unified asm.
diff --git a/gcc/testsuite/gcc.dg/pr68286.c b/gcc/testsuite/gcc.dg/pr68286.c
new file mode 100644 (file)
index 0000000..d0392e8
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR target/68286 */
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+int a, b, c;
+int fn1 ()
+{
+  int d[] = {0};
+  for (; c; c++)
+    {
+      float e = c;
+      if (e)
+        d[0]++;
+    }
+  b = d[0];
+  return a;
+}