Gimplify vec_cond_expr with condition inside
authorRichard Henderson <rth@redhat.com>
Wed, 16 Mar 2016 23:53:01 +0000 (16:53 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 16 Mar 2016 23:53:01 +0000 (16:53 -0700)
  PR middle-end/70240
  PR middle-end/68215
  PR tree-opt/68714
  * gimplify.c (gimplify_expr) [VEC_COND_EXPR]: Gimplify the
  first operand as is_gimple_condexpr.

Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r234271

gcc/ChangeLog
gcc/gimplify.c

index 12e86013561f20e1236fb4d8848c747e636fb047..f95976143abd8549b1138f925feeda21eb89e681 100644 (file)
@@ -1,3 +1,12 @@
+2016-03-16  Richard Henderson  <rth@redhat.com>
+           Richard Biener  <rguenth@suse.de>
+
+       PR middle-end/70240
+       PR middle-end/68215
+       PR tree-opt/68714
+       * gimplify.c (gimplify_expr) [VEC_COND_EXPR]: Gimplify the
+       first operand as is_gimple_condexpr.
+
 2016-03-16  Richard Henderson  <rth@redhat.com>
 
        PR target/70048
index 84ce46ea1a3155cdfc5697b6ed24e98648dc82ec..f3e5c392f6bd09cec562fc8792d2a0d72bab5066 100644 (file)
@@ -10799,8 +10799,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
            goto expr_2;
          }
 
-       case FMA_EXPR:
        case VEC_COND_EXPR:
+         {
+           enum gimplify_status r0, r1, r2;
+
+           r0 = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p,
+                               post_p, is_gimple_condexpr, fb_rvalue);
+           r1 = gimplify_expr (&TREE_OPERAND (*expr_p, 1), pre_p,
+                               post_p, is_gimple_val, fb_rvalue);
+           r2 = gimplify_expr (&TREE_OPERAND (*expr_p, 2), pre_p,
+                               post_p, is_gimple_val, fb_rvalue);
+
+           ret = MIN (MIN (r0, r1), r2);
+           recalculate_side_effects (*expr_p);
+         }
+         break;
+
+       case FMA_EXPR:
        case VEC_PERM_EXPR:
          /* Classified as tcc_expression.  */
          goto expr_3;