diff options
author | Richard Biener <rguenther@suse.de> | 2018-09-03 14:29:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-09-03 14:29:00 +0000 |
commit | 339e6723c9c2c062933c17eec128407a0778d99d (patch) | |
tree | 2fd2df65b089c28553d9199311459088d891fe2c | |
parent | 7efe0dd0b43db1ac5070908290a3febfcfb73513 (diff) | |
download | gcc-339e6723c9c2c062933c17eec128407a0778d99d.zip gcc-339e6723c9c2c062933c17eec128407a0778d99d.tar.gz gcc-339e6723c9c2c062933c17eec128407a0778d99d.tar.bz2 |
re PR tree-optimization/87200 (ICE in set_ssa_val_to, at tree-ssa-sccvn.c:3629)
2018-09-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/87200
* tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Valueize a
simplify result.
* gcc.dg/torture/pr87200.c: New testcase.
From-SVN: r264062
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr87200.c | 23 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 9 |
4 files changed, 41 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 40795e7..981e706 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-09-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/87200 + * tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Valueize a + simplify result. + 2018-09-03 Martin Liska <mliska@suse.cz> PR tree-optimization/87201 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd06f66..b44c714 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2018-09-03 Richard Biener <rguenther@suse.de> + PR tree-optimization/87200 + * gcc.dg/torture/pr87200.c: New testcase. + +2018-09-03 Richard Biener <rguenther@suse.de> + PR tree-optimization/87197 * gcc.dg/torture/pr87197.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/torture/pr87200.c b/gcc/testsuite/gcc.dg/torture/pr87200.c new file mode 100644 index 0000000..a035631 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr87200.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ + +unsigned long long int ry; + +int +gl (void) +{ + long long int my = 0; + unsigned long long int *oi = (unsigned long long int *) &my; + int s9; + + s9 = !!gl () ? ry : 0; + if (s9 != 0) + oi = &ry; + else + { + my = ry; + *oi += my; + } + + return *oi; +} + diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 26d093e..1f00335 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1759,8 +1759,13 @@ vn_nary_build_or_lookup_1 (gimple_match_op *res_op, bool insert) gimple *new_stmt = NULL; if (res && gimple_simplified_result_is_gimple_val (res_op)) - /* The expression is already available. */ - result = res_op->ops[0]; + { + /* The expression is already available. */ + result = res_op->ops[0]; + /* Valueize it, simplification returns sth in AVAIL only. */ + if (TREE_CODE (result) == SSA_NAME) + result = SSA_VAL (result); + } else { tree val = vn_lookup_simplify_result (res_op); |