aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2019-08-02 11:58:04 +0200
committerUros Bizjak <uros@gcc.gnu.org>2019-08-02 11:58:04 +0200
commitd603877768c5a4ed26481afc0aff99e87a0a8d62 (patch)
treebd01499eff60b1dd55a75667bb326fdc44fa486f /gcc
parent8c2289931106421819cb14ee25976ab8b1c06ff1 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/i386-expand.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr91323.c51
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;
+}