gcse.c (compute_ld_motion_mems): If a non-simple MEM is found in a REG_EQUAL note...
authorJulian Brown <julian@codesourcery.com>
Sat, 18 May 2013 03:48:18 +0000 (03:48 +0000)
committerJeff Law <law@gcc.gnu.org>
Sat, 18 May 2013 03:48:18 +0000 (21:48 -0600)
       * gcse.c (compute_ld_motion_mems): If a non-simple MEM is
       found in a REG_EQUAL note, invalidate it.

From-SVN: r199049

gcc/ChangeLog
gcc/gcse.c

index 4536e62..d6eab5f 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-17  Julian Brown  <julian@codesourcery.com>
+
+       * gcse.c (compute_ld_motion_mems): If a non-simple MEM is
+       found in a REG_EQUAL note, invalidate it.
+
 2013-05-17   Easwaran Raman  <eraman@google.com>
 
        * tree-ssa-reassoc.c (find_insert_point): New function.
index 07043f7..e485985 100644 (file)
@@ -3894,6 +3894,8 @@ compute_ld_motion_mems (void)
                {
                  rtx src = SET_SRC (PATTERN (insn));
                  rtx dest = SET_DEST (PATTERN (insn));
+                 rtx note = find_reg_equal_equiv_note (insn);
+                 rtx src_eq;
 
                  /* Check for a simple LOAD...  */
                  if (MEM_P (src) && simple_mem (src))
@@ -3910,6 +3912,15 @@ compute_ld_motion_mems (void)
                      invalidate_any_buried_refs (src);
                    }
 
+                 if (note != 0 && REG_NOTE_KIND (note) == REG_EQUAL)
+                   src_eq = XEXP (note, 0);
+                 else
+                   src_eq = NULL_RTX;
+
+                 if (src_eq != NULL_RTX
+                     && !(MEM_P (src_eq) && simple_mem (src_eq)))
+                   invalidate_any_buried_refs (src_eq);
+
                  /* Check for stores. Don't worry about aliased ones, they
                     will block any movement we might do later. We only care
                     about this exact pattern since those are the only