diff --git a/gcc/cselib.cc b/gcc/cselib.cc
index 930357409bc54..c6628abf2a989 100644
--- a/gcc/cselib.cc
+++ b/gcc/cselib.cc
@@ -2623,6 +2623,14 @@ cselib_invalidate_mem (rtx mem_rtx)
   rtx mem_addr;
 
   mem_addr = canon_rtx (get_addr (XEXP (mem_rtx, 0)));
+  /* Resolve MEM_ADDR to a VALUE_RTX, so that canon_anti_dependence can compare
+     offsets from the same base, even for SP-based addresses.  */
+  if ((v = cselib_lookup (mem_addr, GET_MODE (mem_addr),
+			  0, GET_MODE (mem_rtx))))
+    {
+      mem_addr = v->val_rtx;
+      mem_rtx = replace_equiv_address_nv (mem_rtx, mem_addr);
+    }
   mem_rtx = canon_rtx (mem_rtx);
 
   vp = &first_containing_mem;
