aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-sccvn.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-09-26 07:29:51 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-09-26 07:29:51 +0000
commit09fdb7014c9b121d4f695b1ce63d13f7e43a45c8 (patch)
treef0340b9988503b0649b09dc8a759ee36ef684ec4 /gcc/tree-ssa-sccvn.c
parentdf2a1a265d13222bd4d109eeebbb7662f24fd5b1 (diff)
downloadgcc-09fdb7014c9b121d4f695b1ce63d13f7e43a45c8.zip
gcc-09fdb7014c9b121d4f695b1ce63d13f7e43a45c8.tar.gz
gcc-09fdb7014c9b121d4f695b1ce63d13f7e43a45c8.tar.bz2
re PR tree-optimization/82320 (Compile time hog w/ -O)
2017-09-26 Richard Biener <rguenther@suse.de> PR tree-optimization/82320 * tree-ssa-sccvn.c (set_ssa_val_to): Changing undef to undef isn't a change. * gcc.dg/torture/pr82320.c: New testcase. From-SVN: r253188
Diffstat (limited to 'gcc/tree-ssa-sccvn.c')
-rw-r--r--gcc/tree-ssa-sccvn.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index ca78e2d..5939749 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -3355,6 +3355,12 @@ set_ssa_val_to (tree from, tree to)
if (currval != to
&& !operand_equal_p (currval, to, 0)
+ /* Different undefined SSA names are not actually different. See
+ PR82320 for a testcase were we'd otherwise not terminate iteration. */
+ && !(TREE_CODE (currval) == SSA_NAME
+ && TREE_CODE (to) == SSA_NAME
+ && ssa_undefined_value_p (currval, false)
+ && ssa_undefined_value_p (to, false))
/* ??? For addresses involving volatile objects or types operand_equal_p
does not reliably detect ADDR_EXPRs as equal. We know we are only
getting invariant gimple addresses here, so can use