]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/53805 (combine_comparisons changes trapping behavior)
authorMarc Glisse <marc.glisse@inria.fr>
Thu, 2 Aug 2012 19:54:43 +0000 (21:54 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Thu, 2 Aug 2012 19:54:43 +0000 (19:54 +0000)
2012-08-02  Marc Glisse  <marc.glisse@inria.fr>

PR tree-optimization/53805
* gcc/fold-const.c (invert_tree_comparison): Invert ORDERED_EXPR and
UNORDERED_EXPR even for trapping floating point.
* gcc/testsuite/gcc.dg/fold-notunord.c: New testcase.

From-SVN: r190100

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/fold-notunord.c [new file with mode: 0644]

index 6839fda90ce2c41bf06cb34c9bd0298d0f8fb31b..d0929184b946b4705a17424231c3b9a208c182d9 100644 (file)
@@ -1,3 +1,9 @@
+2012-08-02  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR tree-optimization/53805
+       * fold-const.c (invert_tree_comparison): Invert ORDERED_EXPR and
+       UNORDERED_EXPR even for trapping floating point.
+
 2012-08-02  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR middle-end/53321
index c1369601fff4be783c8bb5602d618b1d713e2e02..dfc01cc39a5cea9c62e40cff647dd7bbf4da1fd6 100644 (file)
@@ -2094,12 +2094,14 @@ pedantic_non_lvalue_loc (location_t loc, tree x)
 \f
 /* Given a tree comparison code, return the code that is the logical inverse.
    It is generally not safe to do this for floating-point comparisons, except
-   for EQ_EXPR and NE_EXPR, so we return ERROR_MARK in this case.  */
+   for EQ_EXPR, NE_EXPR, ORDERED_EXPR and UNORDERED_EXPR, so we return
+   ERROR_MARK in this case.  */
 
 enum tree_code
 invert_tree_comparison (enum tree_code code, bool honor_nans)
 {
-  if (honor_nans && flag_trapping_math && code != EQ_EXPR && code != NE_EXPR)
+  if (honor_nans && flag_trapping_math && code != EQ_EXPR && code != NE_EXPR
+      && code != ORDERED_EXPR && code != UNORDERED_EXPR)
     return ERROR_MARK;
 
   switch (code)
index 4198578994cb20106bd487de0ef3142f6d3c880f..8ef8e789b38627686dbca636aa0fb06c7bc21691 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-02  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR tree-optimization/53805
+       * gcc.dg/fold-notunord.c: New testcase.
+
 2012-08-02  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/48820
diff --git a/gcc/testsuite/gcc.dg/fold-notunord.c b/gcc/testsuite/gcc.dg/fold-notunord.c
new file mode 100644 (file)
index 0000000..edfe3cd
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O -ftrapping-math -fdump-tree-optimized" } */
+
+int f (double d)
+{
+  return !__builtin_isnan (d);
+}
+
+/* { dg-final { scan-tree-dump " ord " "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */