aboutsummaryrefslogtreecommitdiff
path: root/gcc/ifcvt.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-06-13 11:16:31 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-06-13 11:16:31 -0700
commitb1b0700d9f8a061b20693ac3313079c5d60198aa (patch)
tree700aa5a08c3d8de7e292ab226a1186c8f38958db /gcc/ifcvt.c
parent984d2cb83ba16c299a1d30c6fd55568f6c16346c (diff)
downloadgcc-b1b0700d9f8a061b20693ac3313079c5d60198aa.zip
gcc-b1b0700d9f8a061b20693ac3313079c5d60198aa.tar.gz
gcc-b1b0700d9f8a061b20693ac3313079c5d60198aa.tar.bz2
ifcvt.c (cond_exec_get_condition): Use reversed_comparison_code.
* ifcvt.c (cond_exec_get_condition): Use reversed_comparison_code. (cond_exec_process_if_block, dead_or_predicable): Likewise. From-SVN: r43336
Diffstat (limited to 'gcc/ifcvt.c')
-rw-r--r--gcc/ifcvt.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index aaa2056..2c267d4 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -291,9 +291,14 @@ cond_exec_get_condition (jump)
reverse the condition. */
if (GET_CODE (XEXP (test_if, 2)) == LABEL_REF
&& XEXP (XEXP (test_if, 2), 0) == JUMP_LABEL (jump))
- cond = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond)),
- GET_MODE (cond), XEXP (cond, 0),
- XEXP (cond, 1));
+ {
+ enum rtx_code rev = reversed_comparison_code (cond, jump);
+ if (rev == UNKNOWN)
+ return NULL_RTX;
+
+ cond = gen_rtx_fmt_ee (rev, GET_MODE (cond), XEXP (cond, 0),
+ XEXP (cond, 1));
+ }
return cond;
}
@@ -321,6 +326,7 @@ cond_exec_process_if_block (test_bb, then_bb, else_bb, join_bb)
rtx true_prob_val; /* probability of else block */
rtx false_prob_val; /* probability of then block */
int n_insns;
+ enum rtx_code false_code;
/* Find the conditional jump to the ELSE or JOIN part, and isolate
the test. */
@@ -382,9 +388,13 @@ cond_exec_process_if_block (test_bb, then_bb, else_bb, join_bb)
the conditionally executed code. */
true_expr = test_expr;
- false_expr = gen_rtx_fmt_ee (reverse_condition (GET_CODE (true_expr)),
- GET_MODE (true_expr), XEXP (true_expr, 0),
- XEXP (true_expr, 1));
+
+ false_code = reversed_comparison_code (true_expr, test_bb->end);
+ if (false_code != UNKNOWN)
+ false_expr = gen_rtx_fmt_ee (false_code, GET_MODE (true_expr),
+ XEXP (true_expr, 0), XEXP (true_expr, 1));
+ else
+ false_expr = NULL_RTX;
#ifdef IFCVT_MODIFY_TESTS
/* If the machine description needs to modify the tests, such as setting a
@@ -414,8 +424,9 @@ cond_exec_process_if_block (test_bb, then_bb, else_bb, join_bb)
to conditional execution. */
if (then_end
- && ! cond_exec_process_insns (then_start, then_end,
- false_expr, false_prob_val, then_mod_ok))
+ && (! false_expr
+ || ! cond_exec_process_insns (then_start, then_end, false_expr,
+ false_prob_val, then_mod_ok)))
goto fail;
if (else_bb
@@ -2261,6 +2272,8 @@ dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep)
rtx cond, prob_val;
cond = cond_exec_get_condition (jump);
+ if (! cond)
+ return FALSE;
prob_val = find_reg_note (jump, REG_BR_PROB, NULL_RTX);
if (prob_val)
@@ -2268,8 +2281,10 @@ dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep)
if (reversep)
{
- cond = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond)),
- GET_MODE (cond), XEXP (cond, 0),
+ enum rtx_code rev = reversed_comparison_code (cond, jump);
+ if (rev == UNKNOWN)
+ return NULL_RTX;
+ cond = gen_rtx_fmt_ee (rev, GET_MODE (cond), XEXP (cond, 0),
XEXP (cond, 1));
if (prob_val)
prob_val = GEN_INT (REG_BR_PROB_BASE - INTVAL (prob_val));