diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2019-08-02 11:58:04 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2019-08-02 11:58:04 +0200 |
commit | d603877768c5a4ed26481afc0aff99e87a0a8d62 (patch) | |
tree | bd01499eff60b1dd55a75667bb326fdc44fa486f /gcc | |
parent | 8c2289931106421819cb14ee25976ab8b1c06ff1 (diff) | |
download | gcc-d603877768c5a4ed26481afc0aff99e87a0a8d62.zip gcc-d603877768c5a4ed26481afc0aff99e87a0a8d62.tar.gz gcc-d603877768c5a4ed26481afc0aff99e87a0a8d62.tar.bz2 |
re PR target/91323 (LTGT rtx produces UCOMISS instead of COMISS)
PR target/91323
* config/i386/i386-expand.c (ix86_unordered_fp_compare) <case LTGT>:
Return false.
testsuite/ChangeLog:
PR target/91323
* gcc.dg/torture/pr91323.c: New test.
From-SVN: r274005
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386-expand.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr91323.c | 51 |
4 files changed, 65 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c0e3cd8..a523bf0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-08-02 Uroš Bizjak <ubizjak@gmail.com> + + PR target/91323 + * config/i386/i386-expand.c (ix86_unordered_fp_compare) <case LTGT>: + Return false. + 2019-08-02 Richard Biener <rguenther@suse.de> * vec.h (vec::sort): Add gcc_qsort_r support. diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c index 6e4ae50..f6e6d68 100644 --- a/gcc/config/i386/i386-expand.c +++ b/gcc/config/i386/i386-expand.c @@ -2286,16 +2286,16 @@ ix86_unordered_fp_compare (enum rtx_code code) switch (code) { - case GT: - case GE: case LT: case LE: + case GT: + case GE: + case LTGT: return false; case EQ: case NE: - case LTGT: case UNORDERED: case ORDERED: case UNLT: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 58a26d1..36dbcc8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-08-02 Uroš Bizjak <ubizjak@gmail.com> + + PR target/91323 + * gcc.dg/torture/pr91323.c: New test. + 2019-08-02 Paolo Carlini <paolo.carlini@oracle.com> * g++.dg/cpp1z/nodiscard6.C: New. diff --git a/gcc/testsuite/gcc.dg/torture/pr91323.c b/gcc/testsuite/gcc.dg/torture/pr91323.c new file mode 100644 index 0000000..3da2dfb --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr91323.c @@ -0,0 +1,51 @@ +/* { dg-do run } */ +/* { dg-add-options ieee } */ +/* { dg-require-effective-target fenv_exceptions } */ + +#include <fenv.h> + +int +__attribute__ ((noinline, noclone)) +f1 (float a, float b) +{ + return __builtin_isless (a, b) || __builtin_isgreater (a, b); +} + +int +__attribute__ ((noinline, noclone)) +f2 (float a, float b) +{ + return __builtin_islessgreater (a, b); +} + +int +__attribute__ ((noinline, noclone)) +f3 (float a, float b) +{ + return a < b || a > b; +} + +int +main (void) +{ + volatile int r; + + float nanf = __builtin_nanf (""); + float argf = 1.0f; + + feclearexcept (FE_INVALID); + + r = f1 (nanf, argf); + if (fetestexcept (FE_INVALID)) + __builtin_abort (); + + r = f2 (nanf, argf); + if (fetestexcept (FE_INVALID)) + __builtin_abort (); + + r = f3 (nanf, argf); + if (!fetestexcept (FE_INVALID)) + __builtin_abort (); + + return 0; +} |