re PR other/63387 (Optimize pairs of isnan() calls into a single isunordered())
authorMarc Glisse <marc.glisse@inria.fr>
Tue, 14 Apr 2015 08:49:16 +0000 (10:49 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Tue, 14 Apr 2015 08:49:16 +0000 (08:49 +0000)
2015-04-14  Marc Glisse  <marc.glisse@inria.fr>

PR tree-optimization/63387
gcc/
* match.pd ((x unord x) | (y unord y) -> (x unord y),
(x unord x) | (x unord y) -> (x unord y)): New simplifications.
gcc/testsuite/
* gcc.dg/pr63387.c: New testcase.

From-SVN: r222077

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr63387.c [new file with mode: 0644]

index b1b06b3bf4ee0c180775adaa30d32cd6a3167001..f44fd64533a4521679276d2c2dcf89973bd776c3 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-14  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR tree-optimization/63387
+       * match.pd ((x unord x) | (y unord y) -> (x unord y),
+       (x unord x) | (x unord y) -> (x unord y)): New simplifications.
+
 2015-04-14  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/predicates.md (any_QIreg_operand): Rename from
index d438179be4f5cf3dc5f155f9234562022fa90365..fc374de4121b98d990c336f1348f4b743157bfb6 100644 (file)
@@ -932,6 +932,15 @@ along with GCC; see the file COPYING3.  If not see
    (if (ic == ncmp)
     (ncmp @0 @1)))))
 
+/* Unordered tests if either argument is a NaN.  */
+(simplify
+ (bit_ior (unordered @0 @0) (unordered @1 @1))
+ (if ((GIMPLE && types_compatible_p (TREE_TYPE (@0), TREE_TYPE (@1)))
+      || (GENERIC && TREE_TYPE (@0) == TREE_TYPE (@1)))
+  (unordered @0 @1)))
+(simplify
+ (bit_ior:c (unordered @0 @0) (unordered:c@2 @0 @1))
+ @2)
 
 /* Simplification of math builtins.  */
 
index 18ce31ce12fa3c2494e1eef9abe0bc2a0ab9da25..aec780ba1325414442bfc5c3c521b865980aeb4f 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-14  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR tree-optimization/63387
+       * gcc.dg/pr63387.c: New testcase.
+
 2015-04-12  Jan Hubicka  <hubicka@ucw.cz>
 
        * g++.dg/tree-ssa/nonzero-3.C: New testcase.
diff --git a/gcc/testsuite/gcc.dg/pr63387.c b/gcc/testsuite/gcc.dg/pr63387.c
new file mode 100644 (file)
index 0000000..1814fe0
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+
+int f(double aaa, double bbb){
+  int xa = __builtin_isunordered(aaa, aaa);
+  int xb = __builtin_isunordered(bbb, bbb);
+  return xa | xb;
+}
+
+int g(double aaa, double bbb){
+  int xa = __builtin_isunordered(aaa, bbb);
+  int xb = __builtin_isunordered(bbb, bbb);
+  return xa | xb;
+}
+
+int h(double ccc, float ddd){
+  int xc = __builtin_isunordered(ccc, ccc);
+  int xd = __builtin_isunordered(ddd, ddd);
+  return xc | xd;
+}
+
+/* { dg-final { scan-tree-dump-not "aaa\[^\n\r\]* unord aaa" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "bbb\[^\n\r\]* unord bbb" "optimized" } } */
+/* { dg-final { scan-tree-dump-times "aaa\[^\n\r\]* unord bbb" 2 "optimized" } } */
+/* { dg-final { scan-tree-dump-not "ccc\[^\n\r\]* unord ddd" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */