diff options
author | Richard Biener <rguenther@suse.de> | 2016-09-15 07:17:45 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-09-15 07:17:45 +0000 |
commit | d08615f28f4f12a5f633e11a460f9187a54a59af (patch) | |
tree | 7a8ca019034d9bf3b7353d34bcac996b3a07b9d1 /gcc/tree-ssa-pre.c | |
parent | 46aa019a01e8278b12961c63fb457306e09cf13f (diff) | |
download | gcc-d08615f28f4f12a5f633e11a460f9187a54a59af.zip gcc-d08615f28f4f12a5f633e11a460f9187a54a59af.tar.gz gcc-d08615f28f4f12a5f633e11a460f9187a54a59af.tar.bz2 |
re PR tree-optimization/77514 (ICE in VN_INFO_GET, at tree-ssa-sccvn.c:406 w/ -O2 (and above))
2016-09-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/77514
* tree-ssa-pre.c (create_expression_by_pieces): Handle garbage
only forced_stmts sequence.
* gcc.dg/torture/pr77514.c: New testcase.
From-SVN: r240153
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 67a0513..d1fe72c 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2879,7 +2879,21 @@ create_expression_by_pieces (basic_block block, pre_expr expr, gimple_seq_discard (forced_stmts); return folded; } - + /* Likewise if we simplified to sth not queued for insertion. */ + bool found = false; + gsi = gsi_start (forced_stmts); + for (; !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + tree forcedname = gimple_get_lhs (stmt); + if (forcedname == folded) + found = true; + } + if (! found) + { + gimple_seq_discard (forced_stmts); + return folded; + } gcc_assert (TREE_CODE (folded) == SSA_NAME); /* If we have any intermediate expressions to the value sets, add them |