Commit 0eac0e81 by Jan Hubicka Committed by Jan Hubicka

reg-stack.c (next_flags_user): Use current_block->end

	* reg-stack.c (next_flags_user): Use current_block->end
	(swap_rtx_condition): Look for next user if flags don't die;
	give up on CALL_INSNs; use current_block->end.

From-SVN: r39884
parent e7ca84b3
Mon Feb 19 15:51:30 CET 2001 Jan Hubicka <jh@suse.cz>
* reg-stack.c (next_flags_user): Use current_block->end
(swap_rtx_condition): Look for next user if flags don't die;
give up on CALL_INSNs; use current_block->end.
Mon Feb 19 08:27:21 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> Mon Feb 19 08:27:21 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* sibcall.c (call_ends_block_p): New function. * sibcall.c (call_ends_block_p): New function.
......
...@@ -335,22 +335,18 @@ next_flags_user (insn) ...@@ -335,22 +335,18 @@ next_flags_user (insn)
{ {
/* Search forward looking for the first use of this value. /* Search forward looking for the first use of this value.
Stop at block boundaries. */ Stop at block boundaries. */
/* ??? This really cries for BLOCK_END! */
while (1) while (insn != current_block->end)
{ {
insn = NEXT_INSN (insn); insn = NEXT_INSN (insn);
if (!insn)
return NULL_RTX;
if (INSN_P (insn) && reg_mentioned_p (ix86_flags_rtx, PATTERN (insn))) if (INSN_P (insn) && reg_mentioned_p (ix86_flags_rtx, PATTERN (insn)))
return insn; return insn;
if (GET_CODE (insn) == JUMP_INSN if (GET_CODE (insn) == CALL_INSN)
|| GET_CODE (insn) == CODE_LABEL
|| GET_CODE (insn) == CALL_INSN)
return NULL_RTX; return NULL_RTX;
} }
return NULL_RTX;
} }
/* Reorganise the stack into ascending numbers, /* Reorganise the stack into ascending numbers,
...@@ -1231,17 +1227,12 @@ swap_rtx_condition (insn) ...@@ -1231,17 +1227,12 @@ swap_rtx_condition (insn)
/* Search forward looking for the first use of this value. /* Search forward looking for the first use of this value.
Stop at block boundaries. */ Stop at block boundaries. */
/* ??? This really cries for BLOCK_END! */ while (insn != current_block->end)
while (1)
{ {
insn = NEXT_INSN (insn); insn = NEXT_INSN (insn);
if (insn == NULL_RTX)
return 0;
if (INSN_P (insn) && reg_mentioned_p (dest, insn)) if (INSN_P (insn) && reg_mentioned_p (dest, insn))
break; break;
if (GET_CODE (insn) == JUMP_INSN) if (GET_CODE (insn) == CALL_INSN)
return 0;
if (GET_CODE (insn) == CODE_LABEL)
return 0; return 0;
} }
...@@ -1264,8 +1255,19 @@ swap_rtx_condition (insn) ...@@ -1264,8 +1255,19 @@ swap_rtx_condition (insn)
if (swap_rtx_condition_1 (pat)) if (swap_rtx_condition_1 (pat))
{ {
int fail = 0;
INSN_CODE (insn) = -1; INSN_CODE (insn) = -1;
if (recog_memoized (insn) == -1) if (recog_memoized (insn) == -1)
fail = 1;
/* In case the flags don't die here, recurse to try fix
following user too. */
else if (! dead_or_set_p (insn, ix86_flags_rtx))
{
insn = next_flags_user (insn);
if (!insn || !swap_rtx_condition (insn))
fail = 1;
}
if (fail)
{ {
swap_rtx_condition_1 (pat); swap_rtx_condition_1 (pat);
return 0; return 0;
......
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