]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/79901 (ICE in prepare_cmp_insn, at optabs.c:3904)
authorJakub Jelinek <jakub@redhat.com>
Tue, 30 May 2017 08:07:30 +0000 (10:07 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 30 May 2017 08:07:30 +0000 (10:07 +0200)
Backported from mainline
2017-03-07  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/79901
* expr.c (expand_expr_real_2): For vector MIN/MAX, if there is no
min/max expander, expand it using expand_vec_cond_expr.

From-SVN: r248654

gcc/ChangeLog
gcc/expr.c

index 67739ea67bad3e2dab6fe834b3412d510bfeb856..6eb34c77a833c702a8681f7afb9a0bd5e35d0857 100644 (file)
@@ -1,6 +1,12 @@
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2017-03-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/79901
+       * expr.c (expand_expr_real_2): For vector MIN/MAX, if there is no
+       min/max expander, expand it using expand_vec_cond_expr.
+
        2017-03-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/79807
index e92d781e3949dc21fec2d76e05238ede04b4d529..164f9e9c26c7b153be68fffad213183e13ca65ef 100644 (file)
@@ -8852,6 +8852,18 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
       if (temp != 0)
        return temp;
 
+      /* For vector MIN <x, y>, expand it a VEC_COND_EXPR <x <= y, x, y>
+        and similarly for MAX <x, y>.  */
+      if (VECTOR_TYPE_P (type))
+       {
+         tree t0 = make_tree (type, op0);
+         tree t1 = make_tree (type, op1);
+         tree comparison = build2 (code == MIN_EXPR ? LE_EXPR : GE_EXPR,
+                                   type, t0, t1);
+         return expand_vec_cond_expr (type, comparison, t0, t1,
+                                      original_target);
+       }
+
       /* At this point, a MEM target is no longer useful; we will get better
         code without it.  */