mirror of git://gcc.gnu.org/git/gcc.git
i386.c (ix86_prepare_sse_fp_compare_args): For GE/GT/UNLE/UNLT swap arguments and condition even for TARGET_AVX.
* 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. From-SVN: r179119
This commit is contained in:
parent
9e4ef69ef8
commit
50926346e5
|
|
@ -1,3 +1,8 @@
|
||||||
|
2011-09-23 Jakub Jelinek <jakub@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.
|
||||||
|
|
||||||
2011-09-23 Ian Lance Taylor <iant@google.com>
|
2011-09-23 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
* godump.c (go_define): Treat a single character in single quotes,
|
* godump.c (go_define): Treat a single character in single quotes,
|
||||||
|
|
|
||||||
|
|
@ -18735,15 +18735,13 @@ ix86_prepare_sse_fp_compare_args (rtx dest, enum rtx_code code,
|
||||||
{
|
{
|
||||||
rtx tmp;
|
rtx tmp;
|
||||||
|
|
||||||
/* AVX supports all the needed comparisons, no need to swap arguments
|
|
||||||
nor help reload. */
|
|
||||||
if (TARGET_AVX)
|
|
||||||
return code;
|
|
||||||
|
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case LTGT:
|
case LTGT:
|
||||||
case UNEQ:
|
case UNEQ:
|
||||||
|
/* AVX supports all the needed comparisons. */
|
||||||
|
if (TARGET_AVX)
|
||||||
|
break;
|
||||||
/* We have no LTGT as an operator. We could implement it with
|
/* We have no LTGT as an operator. We could implement it with
|
||||||
NE & ORDERED, but this requires an extra temporary. It's
|
NE & ORDERED, but this requires an extra temporary. It's
|
||||||
not clear that it's worth it. */
|
not clear that it's worth it. */
|
||||||
|
|
@ -18760,6 +18758,9 @@ ix86_prepare_sse_fp_compare_args (rtx dest, enum rtx_code code,
|
||||||
case NE:
|
case NE:
|
||||||
case UNORDERED:
|
case UNORDERED:
|
||||||
case ORDERED:
|
case ORDERED:
|
||||||
|
/* AVX has 3 operand comparisons, no need to swap anything. */
|
||||||
|
if (TARGET_AVX)
|
||||||
|
break;
|
||||||
/* For commutative operators, try to canonicalize the destination
|
/* For commutative operators, try to canonicalize the destination
|
||||||
operand to be first in the comparison - this helps reload to
|
operand to be first in the comparison - this helps reload to
|
||||||
avoid extra moves. */
|
avoid extra moves. */
|
||||||
|
|
@ -18771,8 +18772,10 @@ ix86_prepare_sse_fp_compare_args (rtx dest, enum rtx_code code,
|
||||||
case GT:
|
case GT:
|
||||||
case UNLE:
|
case UNLE:
|
||||||
case UNLT:
|
case UNLT:
|
||||||
/* These are not supported directly. Swap the comparison operands
|
/* These are not supported directly before AVX, and furthermore
|
||||||
to transform into something that is supported. */
|
ix86_expand_sse_fp_minmax only optimizes LT/UNGE. Swap the
|
||||||
|
comparison operands to transform into something that is
|
||||||
|
supported. */
|
||||||
tmp = *pop0;
|
tmp = *pop0;
|
||||||
*pop0 = *pop1;
|
*pop0 = *pop1;
|
||||||
*pop1 = tmp;
|
*pop1 = tmp;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2011-09-23 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* gcc.target/i386/avxfp-1.c: New test.
|
||||||
|
* gcc.target/i386/avxfp-2.c: New test.
|
||||||
|
|
||||||
2011-09-23 Terry Guo <terry.guo@arm.com>
|
2011-09-23 Terry Guo <terry.guo@arm.com>
|
||||||
|
|
||||||
* gcc.c-torture/execute/941014-1.x: Deleted.
|
* gcc.c-torture/execute/941014-1.x: Deleted.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -mavx -mfpmath=sse" } */
|
||||||
|
/* { dg-final { scan-assembler "vmaxsd" } } */
|
||||||
|
/* { dg-final { scan-assembler "vminsd" } } */
|
||||||
|
double x;
|
||||||
|
t()
|
||||||
|
{
|
||||||
|
x=x>5?x:5;
|
||||||
|
}
|
||||||
|
|
||||||
|
double x;
|
||||||
|
q()
|
||||||
|
{
|
||||||
|
x=x<5?x:5;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -mavx -mfpmath=sse" } */
|
||||||
|
/* { dg-final { scan-assembler "vmaxsd" } } */
|
||||||
|
/* { dg-final { scan-assembler "vminsd" } } */
|
||||||
|
double x;
|
||||||
|
q()
|
||||||
|
{
|
||||||
|
x=x<5?5:x;
|
||||||
|
}
|
||||||
|
|
||||||
|
double x;
|
||||||
|
q1()
|
||||||
|
{
|
||||||
|
x=x>5?5:x;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue