[RFA] [PATCH] [PR tree-optimization/68619] Avoid direct cfg cleanups in tree-ssa-dom.c [3/3] v2

2015-12-09 Thread Jeff Law

Testcases for the DOM changes.

commit abf324bb826e59302aa8baa22763206536725974
Author: Jeff Law 
Date:   Mon Dec 7 22:43:53 2015 -0700

PR tree-optimization/68619
* gcc.dg/tree-ssa/pr68619-1.c: New test.
* gcc.dg/tree-ssa/pr68619-2.c: New test.
* gcc.dg/tree-ssa/pr68619-3.c: New test.
* gcc.dg/tree-ssa/pr68619-4.c: New test.
* gcc.dg/tree-ssa/pr68619-5.c: New test.

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4b1b1a3..0cb09e1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2015-12-05  Jeff Law  
+
+   PR tree-optimization/68619
+   * gcc.dg/tree-ssa/pr68619-1.c: New test.
+   * gcc.dg/tree-ssa/pr68619-2.c: New test.
+   * gcc.dg/tree-ssa/pr68619-3.c: New test.
+   * gcc.dg/tree-ssa/pr68619-4.c: New test.
+   * gcc.dg/tree-ssa/pr68619-5.c: New test.
+
 2015-12-02  Jeff Law  
 
* gcc.dg/tree-ssa/reassoc-43.c: New test.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68619-1.c 
b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-1.c
new file mode 100644
index 000..3e988de
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-1.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+extern void fn2(int);
+int a, b, c;
+void fn1() {
+  int d;
+  for (; b; b++) {
+a = 7;
+for (; a;) {
+jump:
+  fn2(d ?: c);
+  d = 0;
+}
+d = c;
+if (c)
+  goto jump;
+  }
+  goto jump;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68619-2.c 
b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-2.c
new file mode 100644
index 000..cca706e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-2.c
@@ -0,0 +1,92 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-dom2-details -w" } */
+
+typedef union tree_node *tree;
+struct gcc_options
+{
+  int x_flag_finite_math_only;
+};
+extern struct gcc_options global_options;
+enum mode_class
+{ MODE_RANDOM, MODE_CC, MODE_INT, MODE_PARTIAL_INT, MODE_FRACT, MODE_UFRACT,
+  MODE_ACCUM, MODE_UACCUM, MODE_FLOAT, MODE_DECIMAL_FLOAT, MODE_COMPLEX_INT,
+  MODE_COMPLEX_FLOAT, MODE_VECTOR_INT, MODE_VECTOR_FRACT,
+  MODE_VECTOR_UFRACT, MODE_VECTOR_ACCUM, MODE_VECTOR_UACCUM,
+  MODE_VECTOR_FLOAT, MAX_MODE_CLASS
+};
+extern const unsigned char mode_class[27];
+extern const unsigned char mode_inner[27];
+struct real_value
+{
+};
+struct real_format
+{
+  unsigned char has_inf;
+};
+extern const struct real_format *real_format_for_mode[5 -
+ 2 + 1 + 15 - 10 + 1];
+struct tree_type
+{
+};
+union tree_node
+{
+  int code;
+  int mode;
+  struct tree_type type;
+};
+tree
+omp_reduction_init (tree clause, tree type)
+{
+  if type)->code) == 64))
+{
+  struct real_value max;
+  if (mode_class[type))->code) ==
+ 32 ?
+ vector_type_mode (type)
+ : (type)->mode)]) ==
+MODE_VECTOR_FLOAT)
+   &&
+   ((real_format_for_mode
+ [((mode_class[((mode_class[type))->code) ==
+ 32 ?
+ vector_type_mode (type)
+ : (type)->mode)]) ==
+12) ? (type))->code)
+==
+32 ?
+vector_type_mode
+(type)
+: (type)->mode))
+   : (mode_inner[type))->code) ==
+  32 ?
+  vector_type_mode (type)
+  : (type)->mode)])]) ==
+   12)
+  ? (mode_class[type))->code) ==
+ 32 ? vector_type_mode (type)
+ : (type)->mode)]) ==
+12) ? (type))->code) ==
+32 ?
+vector_type_mode (type)
+: (type)->mode)) : (mode_inner
+[type))->code) ==
+  32 ?
+  vector_type_mode (type)
+  : (type)->mode)])) - 10) +
+ (5 - 2 +
+  1))
+  : mode_class
+[type))->code) ==
+  32 ? vector_type_mode (type) : (type)->mode)]) ==
+   12) ? (type))->code) ==
+   32 ? vector_type_mode (type) : (type)->
+   mode)) : (mode_inner[type))->code) ==
+ 32 ? vector_type_mode (type)
+ : (type)->

[RFA] [PATCH] [PR tree-optimization/68619] Avoid direct cfg cleanups in tree-ssa-dom.c [3/3]

2015-12-07 Thread Jeff Law


And testcases.  One from the BZ.  Two ICEs that showed up during 
development, one case where we optimize better now than before, and one 
case where we missed an optimization during development that's since 
been fixed.


commit f5b74ee83944177f0a1b98ca577343e45aa35584
Author: Jeff Law 
Date:   Mon Dec 7 22:43:53 2015 -0700

PR tree-optimization/68619
* gcc.dg/tree-ssa/pr68619-1.c: New test.
* gcc.dg/tree-ssa/pr68619-2.c: New test.
* gcc.dg/tree-ssa/pr68619-3.c: New test.
* gcc.dg/tree-ssa/pr68619-4.c: New test.
* gcc.dg/tree-ssa/pr68619-5.c: New test.

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4b1b1a3..0cb09e1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2015-12-05  Jeff Law  
+
+   PR tree-optimization/68619
+   * gcc.dg/tree-ssa/pr68619-1.c: New test.
+   * gcc.dg/tree-ssa/pr68619-2.c: New test.
+   * gcc.dg/tree-ssa/pr68619-3.c: New test.
+   * gcc.dg/tree-ssa/pr68619-4.c: New test.
+   * gcc.dg/tree-ssa/pr68619-5.c: New test.
+
 2015-12-02  Jeff Law  
 
* gcc.dg/tree-ssa/reassoc-43.c: New test.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68619-1.c 
b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-1.c
new file mode 100644
index 000..3e988de
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-1.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+extern void fn2(int);
+int a, b, c;
+void fn1() {
+  int d;
+  for (; b; b++) {
+a = 7;
+for (; a;) {
+jump:
+  fn2(d ?: c);
+  d = 0;
+}
+d = c;
+if (c)
+  goto jump;
+  }
+  goto jump;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68619-2.c 
b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-2.c
new file mode 100644
index 000..cca706e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68619-2.c
@@ -0,0 +1,92 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-dom2-details -w" } */
+
+typedef union tree_node *tree;
+struct gcc_options
+{
+  int x_flag_finite_math_only;
+};
+extern struct gcc_options global_options;
+enum mode_class
+{ MODE_RANDOM, MODE_CC, MODE_INT, MODE_PARTIAL_INT, MODE_FRACT, MODE_UFRACT,
+  MODE_ACCUM, MODE_UACCUM, MODE_FLOAT, MODE_DECIMAL_FLOAT, MODE_COMPLEX_INT,
+  MODE_COMPLEX_FLOAT, MODE_VECTOR_INT, MODE_VECTOR_FRACT,
+  MODE_VECTOR_UFRACT, MODE_VECTOR_ACCUM, MODE_VECTOR_UACCUM,
+  MODE_VECTOR_FLOAT, MAX_MODE_CLASS
+};
+extern const unsigned char mode_class[27];
+extern const unsigned char mode_inner[27];
+struct real_value
+{
+};
+struct real_format
+{
+  unsigned char has_inf;
+};
+extern const struct real_format *real_format_for_mode[5 -
+ 2 + 1 + 15 - 10 + 1];
+struct tree_type
+{
+};
+union tree_node
+{
+  int code;
+  int mode;
+  struct tree_type type;
+};
+tree
+omp_reduction_init (tree clause, tree type)
+{
+  if type)->code) == 64))
+{
+  struct real_value max;
+  if (mode_class[type))->code) ==
+ 32 ?
+ vector_type_mode (type)
+ : (type)->mode)]) ==
+MODE_VECTOR_FLOAT)
+   &&
+   ((real_format_for_mode
+ [((mode_class[((mode_class[type))->code) ==
+ 32 ?
+ vector_type_mode (type)
+ : (type)->mode)]) ==
+12) ? (type))->code)
+==
+32 ?
+vector_type_mode
+(type)
+: (type)->mode))
+   : (mode_inner[type))->code) ==
+  32 ?
+  vector_type_mode (type)
+  : (type)->mode)])]) ==
+   12)
+  ? (mode_class[type))->code) ==
+ 32 ? vector_type_mode (type)
+ : (type)->mode)]) ==
+12) ? (type))->code) ==
+32 ?
+vector_type_mode (type)
+: (type)->mode)) : (mode_inner
+[type))->code) ==
+  32 ?
+  vector_type_mode (type)
+  : (type)->mode)])) - 10) +
+ (5 - 2 +
+  1))
+  : mode_class
+[type))->code) ==
+  32 ? vector_type_mode (type) : (type)->mode)]) ==
+   12) ? (type))->code) ==
+   32 ? vector_type_mode (type) : (type)->
+