On Mon, 6 Mar 2017, Jakub Jelinek wrote: > Hi! > > This is the middle-end for the same PR. While supporting min/max for > avx512f V8DI generates of course better code, when the backend claims it is > not available, we should not ICE on that by trying to expand the vector > min/max by expanding comparison and jump. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Ok. Thanks, Richard. > 2017-03-06 Jakub Jelinek <ja...@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. > > --- gcc/expr.c.jj 2017-03-02 10:15:32.000000000 +0100 > +++ gcc/expr.c 2017-03-06 16:07:56.159868534 +0100 > @@ -8943,6 +8943,18 @@ expand_expr_real_2 (sepops ops, rtx targ > 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. */ > > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)