aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-im.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
-rw-r--r--gcc/tree-ssa-loop-im.c14
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
{