re PR target/13256 (strict_low_part mistreated in delay slots)
authorHans-Peter Nilsson <hp@axis.com>
Fri, 5 Dec 2003 11:53:56 +0000 (11:53 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Fri, 5 Dec 2003 11:53:56 +0000 (11:53 +0000)
PR target/13256
* resource.h (enum mark_resource_type): Remove member MARK_DEST.
The only user changed as follows:
* resource.c (mark_set_resources) <case SET>: Always recurse for
SET_SRC (x).
<case SIGN_EXTRACT, case ZERO_EXTRACT>: Always recurse on
operands.
<case STRICT_LOW_PART>: Delete, deferring to default code.

From-SVN: r74328

gcc/ChangeLog
gcc/resource.c
gcc/resource.h

index 1105644..4f79d5e 100644 (file)
@@ -1,3 +1,14 @@
+2003-12-05  Hans-Peter Nilsson  <hp@axis.com>
+
+       PR target/13256
+       * resource.h (enum mark_resource_type): Remove member MARK_DEST.
+       The only user changed as follows:
+       * resource.c (mark_set_resources) <case SET>: Always recurse for
+       SET_SRC (x).
+       <case SIGN_EXTRACT, case ZERO_EXTRACT>: Always recurse on
+       operands.
+       <case STRICT_LOW_PART>: Delete, deferring to default code.
+
 2003-12-05  Waldek Hebisch <hebisch@math.uni.wroc.pl>
 
        * stmt.c (expand_nl_goto_receiver): Copy hard register clobbers
index 2aab94c..8e3bf8d 100644 (file)
@@ -616,7 +616,7 @@ find_dead_or_set_registers (rtx target, struct resources *res,
 /* Given X, a part of an insn, and a pointer to a `struct resource',
    RES, indicate which resources are modified by the insn. If
    MARK_TYPE is MARK_SRC_DEST_CALL, also mark resources potentially
-   set by the called routine.  If MARK_TYPE is MARK_DEST, only mark SET_DESTs
+   set by the called routine.
 
    If IN_DEST is nonzero, it means we are inside a SET.  Otherwise,
    objects are being referenced instead of set.
@@ -716,8 +716,7 @@ mark_set_resources (rtx x, struct resources *res, int in_dest,
                           || GET_CODE (SET_SRC (x)) != CALL),
                          mark_type);
 
-      if (mark_type != MARK_DEST)
-       mark_set_resources (SET_SRC (x), res, 0, MARK_SRC_DEST);
+      mark_set_resources (SET_SRC (x), res, 0, MARK_SRC_DEST);
       return;
 
     case CLOBBER:
@@ -747,12 +746,9 @@ mark_set_resources (rtx x, struct resources *res, int in_dest,
 
     case SIGN_EXTRACT:
     case ZERO_EXTRACT:
-      if (! (mark_type == MARK_DEST && in_dest))
-       {
-         mark_set_resources (XEXP (x, 0), res, in_dest, MARK_SRC_DEST);
-         mark_set_resources (XEXP (x, 1), res, 0, MARK_SRC_DEST);
-         mark_set_resources (XEXP (x, 2), res, 0, MARK_SRC_DEST);
-       }
+      mark_set_resources (XEXP (x, 0), res, in_dest, MARK_SRC_DEST);
+      mark_set_resources (XEXP (x, 1), res, 0, MARK_SRC_DEST);
+      mark_set_resources (XEXP (x, 2), res, 0, MARK_SRC_DEST);
       return;
 
     case MEM:
@@ -799,13 +795,6 @@ mark_set_resources (rtx x, struct resources *res, int in_dest,
        }
       return;
 
-    case STRICT_LOW_PART:
-      if (! (mark_type == MARK_DEST && in_dest))
-       {
-         mark_set_resources (XEXP (x, 0), res, 0, MARK_SRC_DEST);
-         return;
-       }
-
     case UNSPEC_VOLATILE:
     case ASM_INPUT:
       /* Traditional asm's are always volatile.  */
index b738a0c..96eff6e 100644 (file)
@@ -37,8 +37,7 @@ struct resources
 enum mark_resource_type
 {
   MARK_SRC_DEST = 0,
-  MARK_SRC_DEST_CALL = 1,
-  MARK_DEST = 2
+  MARK_SRC_DEST_CALL = 1
 };
 
 extern void mark_target_live_regs (rtx, rtx, struct resources *);