summaryrefslogtreecommitdiff
path: root/gcc/ifcvt.c
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-06 21:50:47 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-06 21:50:47 +0000
commit6bc02093c0f3fd324b8ab0732a24059e233bc215 (patch)
tree002fe8f401ebeb12dbd0037128fbc763942657be /gcc/ifcvt.c
parent1f445250410fd24b8185675685c85d401fb9538d (diff)
downloadgcc-6bc02093c0f3fd324b8ab0732a24059e233bc215.tar.gz
* 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". git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84172 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ifcvt.c')
-rw-r--r--gcc/ifcvt.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 0be64727d35..03efaba2ebb 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -579,6 +579,8 @@ struct noce_if_info
rtx insn_a, insn_b;
rtx x, a, b;
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);
@@ -1730,8 +1732,11 @@ noce_try_sign_mask (struct noce_if_info *if_info)
if (GET_MODE (m) != mode)
return FALSE;
- /* This is only profitable if T is cheap. */
- if (rtx_cost (t, SET) >= COSTS_N_INSNS (2))
+ /* This is only profitable if T is cheap, or T is unconditionally
+ 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;
start_sequence ();
@@ -1983,6 +1988,7 @@ noce_process_if_block (struct ce_if_block * ce_info)
if_info.x = x;
if_info.a = a;
if_info.b = b;
+ if_info.b_unconditional = else_bb == 0;
/* Try optimizations in some approximation of a useful order. */
/* ??? Should first look to see if X is live incoming at all. If it