mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-27 22:54:51 +08:00
ifcvt.c (seq_contains_jump): New.
* ifcvt.c (seq_contains_jump): New. (noce_try_store_flag_constants): Use it to fail conversion. (noce_try_store_flag_inc, noce_try_store_flag_mask): Likewise. From-SVN: r34179
This commit is contained in:
parent
0519ce3019
commit
4e4017cbe5
@ -1,3 +1,9 @@
|
||||
2000-05-25 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* ifcvt.c (seq_contains_jump): New.
|
||||
(noce_try_store_flag_constants): Use it to fail conversion.
|
||||
(noce_try_store_flag_inc, noce_try_store_flag_mask): Likewise.
|
||||
|
||||
2000-05-25 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* except.h (can_throw): Declare it.
|
||||
|
31
gcc/ifcvt.c
31
gcc/ifcvt.c
@ -73,6 +73,7 @@ static sbitmap *post_dominators;
|
||||
static int count_bb_insns PARAMS ((basic_block));
|
||||
static rtx first_active_insn PARAMS ((basic_block));
|
||||
static int last_active_insn_p PARAMS ((basic_block, rtx));
|
||||
static int seq_contains_jump PARAMS ((rtx));
|
||||
|
||||
static int cond_exec_process_insns PARAMS ((rtx, rtx, rtx, rtx, int));
|
||||
static rtx cond_exec_get_condition PARAMS ((rtx));
|
||||
@ -173,6 +174,24 @@ last_active_insn_p (bb, insn)
|
||||
|
||||
return GET_CODE (insn) == JUMP_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 (insn)
|
||||
rtx insn;
|
||||
{
|
||||
while (insn)
|
||||
{
|
||||
if (GET_CODE (insn) == JUMP_INSN)
|
||||
return 1;
|
||||
insn = NEXT_INSN (insn);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Go through a bunch of insns, converting them to conditional
|
||||
execution format if possible. Return TRUE if all of the non-note
|
||||
@ -637,6 +656,10 @@ noce_try_store_flag_constants (if_info)
|
||||
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
if (seq_contains_jump (seq))
|
||||
return FALSE;
|
||||
|
||||
emit_insns_before (seq, if_info->cond_earliest);
|
||||
|
||||
return TRUE;
|
||||
@ -691,6 +714,10 @@ noce_try_store_flag_inc (if_info)
|
||||
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
if (seq_contains_jump (seq))
|
||||
return FALSE;
|
||||
|
||||
emit_insns_before (seq, if_info->cond_earliest);
|
||||
|
||||
return TRUE;
|
||||
@ -738,6 +765,10 @@ noce_try_store_flag_mask (if_info)
|
||||
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
|
||||
if (seq_contains_jump (seq))
|
||||
return FALSE;
|
||||
|
||||
emit_insns_before (seq, if_info->cond_earliest);
|
||||
|
||||
return TRUE;
|
||||
|
Loading…
Reference in New Issue
Block a user