http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47575
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2011.02.01 16:25:49 CC| |rakdver at gcc dot gnu.org Ever Confirmed|0 |1 --- Comment #1 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-02-01 16:25:49 UTC --- Something like Index: tree-ssa-loop-im.c =================================================================== --- tree-ssa-loop-im.c (revision 169487) +++ tree-ssa-loop-im.c (working copy) @@ -2329,7 +2329,10 @@ can_sm_ref_p (struct loop *loop, mem_ref base = get_base_address (ref->mem); if ((tree_could_trap_p (ref->mem) || (DECL_P (base) && TREE_READONLY (base))) - && !ref_always_accessed_p (loop, ref, true)) + && (!ref_always_accessed_p (loop, ref, true)) + || (TREE_CODE (base) == MEM_REF + && ptr_deref_may_alias_global_p (TREE_OPERAND (base, 0)) + && !loop->exits->e)) return false; /* And it must be independent on all other memory references minus introducing a new predicate loop_has_no_exit_p ().