diff options
author | Richard Biener <rguenther@suse.de> | 2017-04-10 11:27:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-04-10 11:27:05 +0000 |
commit | ba6ee9fc83ea84afad140fe6092109fad187544e (patch) | |
tree | 7e9b98ba1dfccc36f3920132c5ab18f7762c1527 /gcc/tree-ssa-loop-im.c | |
parent | 4d1a05f13808cc12c09e71e6ca3951e878184bb2 (diff) | |
download | gcc-ba6ee9fc83ea84afad140fe6092109fad187544e.zip gcc-ba6ee9fc83ea84afad140fe6092109fad187544e.tar.gz gcc-ba6ee9fc83ea84afad140fe6092109fad187544e.tar.bz2 |
re PR tree-optimization/80304 (Wrong result with do concurrent)
2017-04-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/80304
* tree-ssa-loop-im.c (ref_indep_loop_p_1): Also recurse
for safelen.
* gcc.dg/torture/pr80304.c: New testcase.
From-SVN: r246803
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
-rw-r--r-- | gcc/tree-ssa-loop-im.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index dcd941c..0d806da 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -2145,9 +2145,21 @@ ref_indep_loop_p_1 (int safelen, struct loop *loop, im_mem_ref *ref, fprintf (dump_file, "\n"); } + /* We need to recurse to properly handle UNANALYZABLE_MEM_ID. */ + struct loop *inner = loop->inner; + while (inner) + { + if (!ref_indep_loop_p_1 (safelen, inner, ref, stored_p, ref_loop)) + { + indep_p = false; + break; + } + inner = inner->next; + } + /* Avoid caching here as safelen depends on context and refs are shared between different contexts. */ - return true; + return indep_p; } else { |