===================================================================
@@ -2286,16 +2286,16 @@ ix86_unordered_fp_compare (enum rtx_code code)
switch (code)
{
+ case LT:
+ case LE:
case GT:
case GE:
- case LT:
- case LE:
+ case LTGT:
return false;
case EQ:
case NE:
- case LTGT:
case UNORDERED:
case ORDERED:
case UNLT:
===================================================================
@@ -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;
+}