The following fixes a fortran testcase involving safelen where store motion needs to be disabled for unanalyzable refs (we don't know how to transform them). But the safelen case missed to recurse (because that's only necessary for unanalyzable mems).
Bootstrap / regtest on x86_64-unknown-linux-gnu. I'll try to come up with a testcase later. Richard. 2017-04-10 Richard Biener <rguent...@suse.de> PR tree-optimization/80304 * tree-ssa-loop-im.c (ref_indep_loop_p_1): Also recurse for safelen. Index: gcc/tree-ssa-loop-im.c =================================================================== --- gcc/tree-ssa-loop-im.c (revision 246797) +++ gcc/tree-ssa-loop-im.c (working copy) @@ -2145,9 +2145,21 @@ ref_indep_loop_p_1 (int safelen, struct 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 {