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 ().

Reply via email to