aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-sccvn.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-08-29 06:47:14 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-08-29 06:47:14 +0000
commite37f7da9c4b77aac0690c190206b286b9c82becd (patch)
tree208e7818f50e91587a3afe639d1449e2bde8a351 /gcc/tree-ssa-sccvn.c
parentefc601240c12628df7ec467ac07a322306f80b71 (diff)
downloadgcc-e37f7da9c4b77aac0690c190206b286b9c82becd.zip
gcc-e37f7da9c4b77aac0690c190206b286b9c82becd.tar.gz
gcc-e37f7da9c4b77aac0690c190206b286b9c82becd.tar.bz2
re PR tree-optimization/87126 (ICE on valid code at -Os and above on x86_64-linux-gnu: in vn_reference_insert, at tree-ssa-sccvn.c:2698)
2018-08-29 Richard Biener <rguenther@suse.de> PR tree-optimization/87126 * tree-ssa-sccvn.c (vn_reference_insert): Remove assert. * gcc.dg/tree-ssa/pr87126.c: New testcase. From-SVN: r263944
Diffstat (limited to 'gcc/tree-ssa-sccvn.c')
-rw-r--r--gcc/tree-ssa-sccvn.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 2556b0c..aaac430 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -2696,7 +2696,17 @@ vn_reference_insert (tree op, tree result, tree vuse, tree vdef)
but save a lookup if we deal with already inserted refs here. */
if (*slot)
{
- gcc_assert (operand_equal_p ((*slot)->result, vr1->result, 0));
+ /* We cannot assert that we have the same value either because
+ when disentangling an irreducible region we may end up visiting
+ a use before the corresponding def. That's a missed optimization
+ only though. See gcc.dg/tree-ssa/pr87126.c for example. */
+ if (dump_file && (dump_flags & TDF_DETAILS)
+ && !operand_equal_p ((*slot)->result, vr1->result, 0))
+ {
+ fprintf (dump_file, "Keeping old value ");
+ print_generic_expr (dump_file, (*slot)->result);
+ fprintf (dump_file, " because of collision\n");
+ }
free_reference (vr1);
obstack_free (&vn_tables_obstack, vr1);
return;