Commit 73fb6466 by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

re PR target/13256 (strict_low_part mistreated in delay slots)

	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
parent b64de1fe
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
......
......@@ -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. */
......
......@@ -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 *);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment