diff options
author | Roger Sayle <roger@eyesopen.com> | 2004-06-26 01:43:57 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2004-06-26 01:43:57 +0000 |
commit | c520979797bed1c58f0873f11b8ec1105341fec6 (patch) | |
tree | 2a4763fc196c16c9f0738fbed472b2ddd1c0451c | |
parent | 0e60562abe8389976483f16432c90a2c8226db77 (diff) | |
download | gcc-c520979797bed1c58f0873f11b8ec1105341fec6.zip gcc-c520979797bed1c58f0873f11b8ec1105341fec6.tar.gz gcc-c520979797bed1c58f0873f11b8ec1105341fec6.tar.bz2 |
ifcvt.c (seq_contains_jump): Delete function.
* ifcvt.c (seq_contains_jump): Delete function.
(end_ifcvt_sequence): Replace call to seq_contains_jump with an
inline test for a jump instruction in the existing "insn" loop.
(block_fallthru): Document function.
From-SVN: r83697
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ifcvt.c | 32 |
2 files changed, 15 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8886dc5..9c638b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-06-25 Roger Sayle <roger@eyesopen.com> + + * ifcvt.c (seq_contains_jump): Delete function. + (end_ifcvt_sequence): Replace call to seq_contains_jump with an + inline test for a jump instruction in the existing "insn" loop. + (block_fallthru): Document function. + 2004-06-25 Philip Blundell <philb@gnu.org> PR wrong-code/15089 diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 9de5961..053424d 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -88,7 +88,6 @@ static bool life_data_ok; static int count_bb_insns (basic_block); static rtx first_active_insn (basic_block); static rtx last_active_insn (basic_block, int); -static int seq_contains_jump (rtx); static basic_block block_fallthru (basic_block); static int cond_exec_process_insns (ce_if_block_t *, rtx, rtx, rtx, rtx, int); static rtx cond_exec_get_condition (rtx); @@ -213,22 +212,7 @@ last_active_insn (basic_block bb, int skip_use_p) return insn; } -/* It is possible, especially when having dealt with multi-word - arithmetic, for the expanders to have emitted jumps. Search - through the sequence and return TRUE if a jump exists so that - we can abort the conversion. */ - -static int -seq_contains_jump (rtx insn) -{ - while (insn) - { - if (GET_CODE (insn) == JUMP_INSN) - return 1; - insn = NEXT_INSN (insn); - } - return 0; -} +/* Return the basic block reached by falling though the basic block BB. */ static basic_block block_fallthru (basic_block bb) @@ -707,7 +691,7 @@ noce_emit_move_insn (rtx x, rtx y) static rtx end_ifcvt_sequence (struct noce_if_info *if_info) { - rtx y; + rtx insn; rtx seq = get_insns (); set_used_flags (if_info->x); @@ -715,15 +699,15 @@ end_ifcvt_sequence (struct noce_if_info *if_info) unshare_all_rtl_in_chain (seq); end_sequence (); - if (seq_contains_jump (seq)) - return NULL_RTX; - - /* Make sure that all of the instructions emitted are recognizable. + /* Make sure that all of the instructions emitted are recognizable, + and that we haven't introduced a new jump instruction. As an excersise for the reader, build a general mechanism that allows proper placement of required clobbers. */ - for (y = seq; y ; y = NEXT_INSN (y)) - if (recog_memoized (y) == -1) + for (insn = seq; insn; insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == JUMP_INSN + || recog_memoized (insn) == -1) return NULL_RTX; + return seq; } |