(subst_constants): Do substitute in address of MEM dest.
authorRichard Stallman <rms@gnu.org>
Sat, 19 Sep 1992 05:33:47 +0000 (05:33 +0000)
committerRichard Stallman <rms@gnu.org>
Sat, 19 Sep 1992 05:33:47 +0000 (05:33 +0000)
From-SVN: r2162

gcc/integrate.c

index ca915434a630e74ea104cfa42ae84ceada235187..424f9a6ede6bc353a9470f67d1d4c83c6e98535b 100644 (file)
@@ -2346,7 +2346,8 @@ subst_constants (loc, insn, map)
        src = SET_SRC (x);
 
        while (GET_CODE (*dest_loc) == ZERO_EXTRACT
-              || GET_CODE (*dest_loc) == SIGN_EXTRACT
+              /* By convention, we always use ZERO_EXTRACT in the dest.  */
+/*            || GET_CODE (*dest_loc) == SIGN_EXTRACT */
               || GET_CODE (*dest_loc) == SUBREG
               || GET_CODE (*dest_loc) == STRICT_LOW_PART)
          {
@@ -2358,6 +2359,10 @@ subst_constants (loc, insn, map)
            dest_loc = &XEXP (*dest_loc, 0);
          }
 
+       /* Do substitute in the address of a destination in memory.  */
+       if (GET_CODE (*dest_loc) == MEM)
+         subst_constants (&XEXP (*dest_loc, 0), insn, map);
+
        /* Check for the case of DEST a SUBREG, both it and the underlying
           register are less than one word, and the SUBREG has the wider mode.
           In the case, we are really setting the underlying register to the