On Fri, Sep 23, 2011 at 10:12 AM, Jakub Jelinek <ja...@redhat.com> wrote: >> > --- gcc/config/i386/i386.c.jj 2011-09-02 16:29:38.000000000 +0200 >> > +++ gcc/config/i386/i386.c 2011-09-07 21:57:52.000000000 +0200 >> > @@ -18304,6 +18304,11 @@ ix86_prepare_sse_fp_compare_args (rtx de >> > { >> > rtx tmp; >> > >> > + /* AVX supports all the needed comparisons, no need to swap arguments >> > + nor help reload. */ >> > + if (TARGET_AVX) >> > + return code; >> > + >> >> Unfortunately, this part prevents generation of vmin/vmax instructions >> for TARGET_AVX. In ix86_expand_fp_movcc, we call >> ix86_prepare_sse_fp_compare_args, where we previously converted GT >> into LT. LT is recognized in ix86_expand_sse_fp_minmax as valid >> operand for MIN/MAX, whereas GT is not. >> >> I'm not sure if we can swap operands in ix86_expand_sse_fp_minmax, >> there is a scary comment in front of ix86_expand_sse_fp_minmax w.r.t. >> to IEEE safety. > > swap_condition is documented to be IEEE safe: > /* Similar, but return the code when two operands of a comparison are swapped. > This IS safe for IEEE floating-point. */ > > So, do you prefer this?
Yes, since the operands can be swapped, this looks OK to me. Also, the comments are very informative. > 2011-09-23 Jakub Jelinek <ja...@redhat.com> > > * config/i386/i386.c (ix86_prepare_sse_fp_compare_args): For > GE/GT/UNLE/UNLT swap arguments and condition even for TARGET_AVX. > > * gcc.target/i386/avxfp-1.c: New test. > * gcc.target/i386/avxfp-2.c: New test. OK. Thanks, Uros.