+2014-11-03 Zhenqiang Chen <zhenqiang.chen@arm.com>
+
+ * ifcvt.c (noce_emit_cmove, noce_get_alt_condition, noce_get_condition):
+ Allow CC mode if HAVE_cbranchcc4.
+
2014-11-02 Richard Sandiford <richard.sandiford@arm.com>
* config/arc/arc.c (write_ext_corereg_1): Delete.
end_sequence ();
}
- /* Don't even try if the comparison operands are weird. */
+ /* Don't even try if the comparison operands are weird
+ except that the target supports cbranchcc4. */
if (! general_operand (cmp_a, GET_MODE (cmp_a))
|| ! general_operand (cmp_b, GET_MODE (cmp_b)))
- return NULL_RTX;
+ {
+#if HAVE_cbranchcc4
+ if (GET_MODE_CLASS (GET_MODE (cmp_a)) != MODE_CC
+ || cmp_b != const0_rtx)
+#endif
+ return NULL_RTX;
+ }
#if HAVE_conditional_move
unsignedp = (code == LTU || code == GEU
rtx cond, set;
rtx_insn *insn;
int reverse;
+ int allow_cc_mode = false;
+#if HAVE_cbranchcc4
+ allow_cc_mode = true;
+#endif
+
/* If target is already mentioned in the known condition, return it. */
if (reg_mentioned_p (target, if_info->cond))
}
cond = canonicalize_condition (if_info->jump, cond, reverse,
- earliest, target, false, true);
+ earliest, target, allow_cc_mode, true);
if (! cond || ! reg_mentioned_p (target, cond))
return NULL;
{
rtx cond, set, tmp;
bool reverse;
+ int allow_cc_mode = false;
+#if HAVE_cbranchcc4
+ allow_cc_mode = true;
+#endif
if (! any_condjump_p (jump))
return NULL_RTX;
/* Otherwise, fall back on canonicalize_condition to do the dirty
work of manipulating MODE_CC values and COMPARE rtx codes. */
tmp = canonicalize_condition (jump, cond, reverse, earliest,
- NULL_RTX, false, true);
+ NULL_RTX, allow_cc_mode, true);
/* We don't handle side-effects in the condition, like handling
REG_INC notes and making sure no duplicate conditions are emitted. */