* alias.c (nonoverlapping_memrefs_p): Handle DECL_RTL being a CONCAT.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Mon, 12 Nov 2001 10:15:03 +0000 (10:15 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 12 Nov 2001 10:15:03 +0000 (05:15 -0500)
From-SVN: r46938

gcc/ChangeLog
gcc/alias.c

index 7b641c45288bcd3163e43b84c00c79f3a97632b3..60f3e46fbb4923d764fa36e51416fdf81be948f6 100644 (file)
@@ -1,3 +1,7 @@
+Mon Nov 12 05:18:42 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * alias.c (nonoverlapping_memrefs_p): Handle DECL_RTL being a CONCAT.
+
 2001-11-12  Kazu Hirata  <kazu@hxi.com>
 
        * config/h8300/h8300.c (shift_alg_qi): New.
index 2e03a068a55de314e3d84bd63b43c7fdfc584937..45e82643ad7bacd7ce0c5795b797fd81ba1b76ef 100644 (file)
@@ -1780,21 +1780,22 @@ nonoverlapping_memrefs_p (x, y)
   rtlx = DECL_RTL (MEM_DECL (x));
   rtly = DECL_RTL (MEM_DECL (y));
 
-  /* If either RTL is a REG, they can't overlap unless they are the same
-     because we never reuse that part of the stack frame used for locals for
-     spilled pseudos.  */
-  if ((REG_P (rtlx) || REG_P (rtly)) && ! rtx_equal_p (rtlx, rtly))
+  /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
+     can't overlap unless they are the same because we never reuse that part
+     of the stack frame used for locals for spilled pseudos.  */
+  if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
+      && ! rtx_equal_p (rtlx, rtly))
     return 1;
 
   /* Get the base and offsets of both decls.  If either is a register, we
      know both are and are the same, so use that as the base.  The only
      we can avoid overlap is if we can deduce that they are nonoverlapping
      pieces of that decl, which is very rare.  */
-  basex = REG_P (rtlx) ? rtlx : XEXP (rtlx, 0);
+  basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
 
-  basey = REG_P (rtly) ? rtly : XEXP (rtly, 0);
+  basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
 
@@ -1809,10 +1810,10 @@ nonoverlapping_memrefs_p (x, y)
              || (CONSTANT_P (basey) && REG_P (basex)
                  && REGNO (basex) <= LAST_VIRTUAL_REGISTER));
 
-  sizex = (REG_P (rtlx) ? GET_MODE_SIZE (GET_MODE (rtlx))
+  sizex = (GET_CODE (rtlx) != MEM ? GET_MODE_SIZE (GET_MODE (rtlx))
           : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
           : -1);
-  sizey = (REG_P (rtly) ? GET_MODE_SIZE (GET_MODE (rtly))
+  sizey = (GET_CODE (rtly) != MEM ? GET_MODE_SIZE (GET_MODE (rtly))
           : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
           -1);