Commit 7b5effb4 by Roger Sayle Committed by Roger Sayle

ifcvt.c (struct noce_if_info): Add a Boolean b_unconditional field.


	* ifcvt.c (struct noce_if_info): Add a Boolean b_unconditional field.
	(noce_try_sign_mask): Tweak rtx_cost check if t is evaluated anyway.
	(noce_process_if_block): Initialize if_info.b_unconditional if insn_b
	is currently executed unconditionally, i.e. not in "else_bb".

From-SVN: r84172
parent 97b62d47
2004-07-06 Roger Sayle <roger@eyesopen.com>
* ifcvt.c (struct noce_if_info): Add a Boolean b_unconditional field.
(noce_try_sign_mask): Tweak rtx_cost check if t is evaluated anyway.
(noce_process_if_block): Initialize if_info.b_unconditional if insn_b
is currently executed unconditionally, i.e. not in "else_bb".
2004-07-06 Steven Bosscher <stevenb@suse.de> 2004-07-06 Steven Bosscher <stevenb@suse.de>
* config/alpha/alpha.c (alpha_use_dfa_pipeline_interface): Remove. * config/alpha/alpha.c (alpha_use_dfa_pipeline_interface): Remove.
......
...@@ -579,6 +579,8 @@ struct noce_if_info ...@@ -579,6 +579,8 @@ struct noce_if_info
rtx insn_a, insn_b; rtx insn_a, insn_b;
rtx x, a, b; rtx x, a, b;
rtx jump, cond, cond_earliest; rtx jump, cond, cond_earliest;
/* True if "b" was originally evaluated unconditionally. */
bool b_unconditional;
}; };
static rtx noce_emit_store_flag (struct noce_if_info *, rtx, int, int); static rtx noce_emit_store_flag (struct noce_if_info *, rtx, int, int);
...@@ -1730,8 +1732,11 @@ noce_try_sign_mask (struct noce_if_info *if_info) ...@@ -1730,8 +1732,11 @@ noce_try_sign_mask (struct noce_if_info *if_info)
if (GET_MODE (m) != mode) if (GET_MODE (m) != mode)
return FALSE; return FALSE;
/* This is only profitable if T is cheap. */ /* This is only profitable if T is cheap, or T is unconditionally
if (rtx_cost (t, SET) >= COSTS_N_INSNS (2)) executed/evaluated in the original insn sequence. */
if (rtx_cost (t, SET) >= COSTS_N_INSNS (2)
&& (!if_info->b_unconditional
|| t != if_info->b))
return FALSE; return FALSE;
start_sequence (); start_sequence ();
...@@ -1983,6 +1988,7 @@ noce_process_if_block (struct ce_if_block * ce_info) ...@@ -1983,6 +1988,7 @@ noce_process_if_block (struct ce_if_block * ce_info)
if_info.x = x; if_info.x = x;
if_info.a = a; if_info.a = a;
if_info.b = b; if_info.b = b;
if_info.b_unconditional = else_bb == 0;
/* Try optimizations in some approximation of a useful order. */ /* Try optimizations in some approximation of a useful order. */
/* ??? Should first look to see if X is live incoming at all. If it /* ??? Should first look to see if X is live incoming at all. If it
......
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