[RFA] [PATCH] [PR tree-optimization/68619] Avoid direct cfg cleanups in tree-ssa-dom.c [3/3] v2
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]
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)-> +