From efc04f78d8a0efb66d9f767ce26aa7d01d19cb0c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 1 Nov 2017 22:52:21 +0100 Subject: re PR rtl-optimization/82778 (crash: insn does not satisfy its constraints) PR rtl-optimization/82778 PR rtl-optimization/82597 * compare-elim.c (struct comparison): Add in_a_setter field. (find_comparison_dom_walker::before_dom_children): Remove killed bitmap and df_simulate_find_defs call, instead walk the defs. Compute last_setter and initialize in_a_setter. Merge definitions with first initialization for a few variables. (try_validate_parallel): Use insn_invalid_p instead of recog_memoized. Return insn rather than just the pattern. (try_merge_compare): Fix up comment. Don't uselessly test if in_a is a REG_P. Use cmp->in_a_setter instead of walking UD chains. (execute_compare_elim_after_reload): Remove df_chain_add_problem call. * g++.dg/opt/pr82778.C: New test. 2017-11-01 Michael Collison PR rtl-optimization/82597 * gcc.dg/pr82597.c: New test. From-SVN: r254328 --- gcc/testsuite/ChangeLog | 10 ++++++++++ gcc/testsuite/g++.dg/opt/pr82778.C | 37 +++++++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/pr82597.c | 40 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/pr82778.C create mode 100644 gcc/testsuite/gcc.dg/pr82597.c (limited to 'gcc/testsuite') diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a8143ad..eba8154 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2017-11-01 Jakub Jelinek + + PR rtl-optimization/82778 + * g++.dg/opt/pr82778.C: New test. + +2017-11-01 Michael Collison + + PR rtl-optimization/82597 + * gcc.dg/pr82597.c: New test. + 2017-11-01 Uros Bizjak * gcc.target/alpha/sqrt.c: New test. diff --git a/gcc/testsuite/g++.dg/opt/pr82778.C b/gcc/testsuite/g++.dg/opt/pr82778.C new file mode 100644 index 0000000..eeac0c5f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr82778.C @@ -0,0 +1,37 @@ +// PR rtl-optimization/82778 +// { dg-do compile } +// { dg-options "-O2" } + +template struct c { + typedef a d[b]; + static a e(d f, int g) { return f[g]; } +}; +template struct B { + typedef c h; + typename h::d i; + long j; + a at() { return h::e(i, j); } +}; +int k, m, r, s, t; +char l, n, q; +short o, p, w; +struct C { + int u; +}; +B v; +void x() { + if (((p > (q ? v.at().u : k)) >> l - 226) + !(n ^ r * m)) + s = ((-(((p > (q ? v.at().u : k)) >> l - 226) + !(n ^ r * m)) < 0) / + (-(((p > (q ? v.at().u : k)) >> l - 226) + !(n ^ r * m)) ^ + -25 & o) && + p) >> + (0 <= 0 + ? 0 || + (-(((p > (q ? v.at().u : k)) >> l - 226) + !(n ^ r * m)) < + 0) / + (-(((p > (q ? v.at().u : k)) >> l - 226) + + !(n ^ r * m)) ^ -25 & o) + : 0); + w = (p > (q ? v.at().u : k)) >> l - 226; + t = !(n ^ r * m); +} diff --git a/gcc/testsuite/gcc.dg/pr82597.c b/gcc/testsuite/gcc.dg/pr82597.c new file mode 100644 index 0000000..98ae264 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr82597.c @@ -0,0 +1,40 @@ +/* PR rtl-optimization/82597 */ +/* { dg-do compile }*/ +/* { dg-options "-O2 -funroll-loops" } */ + +int pb; + +void +ch (unsigned char np, char fc) +{ + unsigned char *y6 = &np; + + if (fc != 0) + { + unsigned char *z1 = &np; + + for (;;) + if (*y6 != 0) + for (fc = 0; fc < 12; ++fc) + { + int hh; + int tp; + + if (fc != 0) + hh = (*z1 != 0) ? fc : 0; + else + hh = pb; + + tp = fc > 0; + if (hh == tp) + *y6 = 1; + } + } + + if (np != 0) + y6 = (unsigned char *)&fc; + if (pb != 0 && *y6 != 0) + for (;;) + { + } +} -- cgit v1.1