OSDN Git Service

* fold-const.c (fold <EQ_EXPR>): Don't fold x == x only if x
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jun 2003 13:00:17 +0000 (13:00 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jun 2003 13:00:17 +0000 (13:00 +0000)
is a floating point type *and* we currently honor NaNs.
(fold <NE_EXPR>): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67700 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c

index 3c34fe2..6ef9b93 100644 (file)
@@ -1,3 +1,9 @@
+2003-06-10  Roger Sayle  <roger@eyesopen.com>
+
+       * fold-const.c (fold <EQ_EXPR>):  Don't fold x == x only if x
+       is a floating point type *and* we currently honor NaNs.
+       (fold <NE_EXPR>): Likewise.
+
 2003-06-10  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/11131
index 1f118e8..7b0f2cc 100644 (file)
@@ -7046,15 +7046,18 @@ fold (expr)
            case EQ_EXPR:
            case GE_EXPR:
            case LE_EXPR:
-             if (! FLOAT_TYPE_P (TREE_TYPE (arg0)))
+             if (! FLOAT_TYPE_P (TREE_TYPE (arg0))
+                 || ! HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
                return constant_boolean_node (1, type);
              code = EQ_EXPR;
              TREE_SET_CODE (t, code);
              break;
 
            case NE_EXPR:
-             /* For NE, we can only do this simplification if integer.  */
-             if (FLOAT_TYPE_P (TREE_TYPE (arg0)))
+             /* For NE, we can only do this simplification if integer
+                or we don't honor IEEE floating point NaNs.  */
+             if (FLOAT_TYPE_P (TREE_TYPE (arg0))
+                 && HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
                break;
              /* ... fall through ...  */
            case GT_EXPR: