From: Jan Hubicka Date: Mon, 19 Feb 2001 14:59:42 +0000 (+0100) Subject: reg-stack.c (next_flags_user): Use current_block->end X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0eac0e81c4bfcfc7b48f4d91eafbd9c027e31ff6;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be525f1a1ba..ee58bb40e50 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Mon Feb 19 15:51:30 CET 2001 Jan Hubicka + + * 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 * sibcall.c (call_ends_block_p): New function. diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 75ffbed105b..94300c394d4 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -335,22 +335,18 @@ next_flags_user (insn) { /* Search forward looking for the first use of this value. Stop at block boundaries. */ - /* ??? This really cries for BLOCK_END! */ - while (1) + while (insn != current_block->end) { insn = NEXT_INSN (insn); - if (!insn) - return NULL_RTX; if (INSN_P (insn) && reg_mentioned_p (ix86_flags_rtx, PATTERN (insn))) return insn; - if (GET_CODE (insn) == JUMP_INSN - || GET_CODE (insn) == CODE_LABEL - || GET_CODE (insn) == CALL_INSN) + if (GET_CODE (insn) == CALL_INSN) return NULL_RTX; } + return NULL_RTX; } /* Reorganise the stack into ascending numbers, @@ -1231,17 +1227,12 @@ swap_rtx_condition (insn) /* Search forward looking for the first use of this value. Stop at block boundaries. */ - /* ??? This really cries for BLOCK_END! */ - while (1) + while (insn != current_block->end) { insn = NEXT_INSN (insn); - if (insn == NULL_RTX) - return 0; if (INSN_P (insn) && reg_mentioned_p (dest, insn)) break; - if (GET_CODE (insn) == JUMP_INSN) - return 0; - if (GET_CODE (insn) == CODE_LABEL) + if (GET_CODE (insn) == CALL_INSN) return 0; } @@ -1264,8 +1255,19 @@ swap_rtx_condition (insn) if (swap_rtx_condition_1 (pat)) { + int fail = 0; INSN_CODE (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); return 0;