src = conforming_compare (insn);
if (src)
{
+ enum machine_mode src_mode = GET_MODE (src);
+
/* Eliminate a compare that's redundant with the previous. */
if (last_cmp_valid
+ && src_mode == last_cmp->orig_mode
&& rtx_equal_p (last_cmp->in_a, XEXP (src, 0))
&& rtx_equal_p (last_cmp->in_b, XEXP (src, 1)))
{
last_cmp->prev_clobber = last_clobber;
last_cmp->in_a = XEXP (src, 0);
last_cmp->in_b = XEXP (src, 1);
- last_cmp->orig_mode = GET_MODE (SET_DEST (single_set (insn)));
+ last_cmp->orig_mode = src_mode;
VEC_safe_push (comparison_struct_p, heap, all_compares, last_cmp);
/* It's unusual, but be prepared for comparison patterns that
/* Look to see if the flags register is live outgoing here, and
incoming to any successor not part of the extended basic block. */
- if (bitmap_bit_p (&DF_LIVE_BB_INFO (bb)->out, targetm.flags_regnum))
+ if (bitmap_bit_p (df_get_live_out (bb), targetm.flags_regnum))
{
edge e;
edge_iterator ei;
FOR_EACH_EDGE (e, ei, bb->succs)
{
basic_block dest = e->dest;
- if (bitmap_bit_p (&DF_LIVE_BB_INFO (dest)->in,
+ if (bitmap_bit_p (df_get_live_in (bb),
targetm.flags_regnum)
&& !single_pred_p (dest))
{
Note that this function may start a change group. */
static rtx
-maybe_select_cc_mode (struct comparison *cmp, rtx a, rtx b)
+maybe_select_cc_mode (struct comparison *cmp, rtx a ATTRIBUTE_UNUSED,
+ rtx b ATTRIBUTE_UNUSED)
{
enum machine_mode sel_mode;
const int n = cmp->n_uses;
static unsigned int
execute_compare_elim_after_reload (void)
{
- df_set_flags (DF_DEFER_INSN_RESCAN);
- df_live_add_problem ();
df_analyze ();
gcc_checking_assert (all_compares == NULL);
VEC_free (comparison_struct_p, heap, all_compares);
all_compares = NULL;
-
- df_analyze ();
}
return 0;
TODO_df_finish
| TODO_df_verify
| TODO_verify_rtl_sharing
- | TODO_dump_func
| TODO_ggc_collect /* todo_flags_finish */
}
};