From 7445d57efd4ca54d05b9c03f78e826d630f19ba5 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Mon, 23 Jun 2014 17:25:18 -0400 Subject: [PATCH 071/236] except.*: Use rtx_insn (also touches function.h) gcc/ * except.h (sjlj_emit_function_exit_after): Strengthen param "after" from rtx to rtx_insn *. This is only called with result of get_last_insn (in function.c) so type-change should be self-contained. * function.h (struct rtl_eh): Strengthen field "ehr_label" from rtx to rtx_code_label *, and field "sjlj_exit_after" from rtx to rtx_insn *. These fields are only used from except.c so this type-change should be self-contained to this patch. * except.c (emit_to_new_bb_before): Strengthen param "seq" and local "last" from rtx to rtx_insn *. (dw2_build_landing_pads): Likewise for local "seq". (sjlj_mark_call_sites): Likewise for locals "insn", "before", p". (sjlj_emit_function_enter): Strengthen param "dispatch_label" from rtx to rtx_code_label *. Strengthen locals "fn_begin", "seq" from rtx to rtx_insn *. (sjlj_emit_function_exit_after): Strengthen param "after" from rtx to rtx_insn *. (sjlj_emit_function_exit): Likewise for locals "seq", "insn". (sjlj_emit_dispatch_table): Likewise for locals "seq", "seq2". (sjlj_build_landing_pads): Replace NULL_RTX with NULL when referring to an insn. Strengthen local "dispatch_label" from rtx to rtx_code_label *. (set_nothrow_function_flags): Strengthen local "insn" from rtx to rtx_insn *. (expand_eh_return): Strengthen local "around_label" from rtx to rtx_code_label *. (convert_to_eh_region_ranges): Strengthen locals "iter", "last_action_insn", "first_no_action_insn", "first_no_action_insn_before_switch", "last_no_action_insn_before_switch", from rtx to rtx_insn *. --- gcc/except.c | 53 +++++++++++++++++++++++++++++------------------------ gcc/except.h | 2 +- gcc/function.h | 4 ++-- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/gcc/except.c b/gcc/except.c index ec712a9..1a26b08 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -959,9 +959,9 @@ assign_filter_values (void) first instruction of some existing BB and return the newly produced block. */ static basic_block -emit_to_new_bb_before (rtx seq, rtx insn) +emit_to_new_bb_before (rtx_insn *seq, rtx insn) { - rtx last; + rtx_insn *last; basic_block bb; edge e; edge_iterator ei; @@ -1030,7 +1030,7 @@ dw2_build_landing_pads (void) for (i = 1; vec_safe_iterate (cfun->eh->lp_array, i, &lp); ++i) { basic_block bb; - rtx seq; + rtx_insn *seq; edge e; if (lp == NULL || lp->post_landing_pad == NULL) @@ -1119,7 +1119,8 @@ static void sjlj_mark_call_sites (void) { int last_call_site = -2; - rtx insn, mem; + rtx_insn *insn; + rtx mem; for (insn = get_insns (); insn ; insn = NEXT_INSN (insn)) { @@ -1127,7 +1128,7 @@ sjlj_mark_call_sites (void) eh_region r; bool nothrow; int this_call_site; - rtx before, p; + rtx_insn *before, *p; /* Reset value tracking at extended basic block boundaries. */ if (LABEL_P (insn)) @@ -1180,9 +1181,10 @@ sjlj_mark_call_sites (void) /* Construct the SjLj_Function_Context. */ static void -sjlj_emit_function_enter (rtx dispatch_label) +sjlj_emit_function_enter (rtx_code_label *dispatch_label) { - rtx fn_begin, fc, mem, seq; + rtx_insn *fn_begin, *seq; + rtx fc, mem; bool fn_begin_outside_block; rtx personality = get_personality_function (current_function_decl); @@ -1260,7 +1262,7 @@ sjlj_emit_function_enter (rtx dispatch_label) the call to unwind_sjlj_unregister_libfunc if needed. */ void -sjlj_emit_function_exit_after (rtx after) +sjlj_emit_function_exit_after (rtx_insn *after) { crtl->eh.sjlj_exit_after = after; } @@ -1268,7 +1270,7 @@ sjlj_emit_function_exit_after (rtx after) static void sjlj_emit_function_exit (void) { - rtx seq, insn; + rtx_insn *seq, *insn; start_sequence (); @@ -1295,7 +1297,8 @@ sjlj_emit_dispatch_table (rtx dispatch_label, int num_dispatch) enum machine_mode unwind_word_mode = targetm.unwind_word_mode (); enum machine_mode filter_mode = targetm.eh_return_filter_mode (); eh_landing_pad lp; - rtx mem, seq, fc, before, exc_ptr_reg, filter_reg; + rtx mem, fc, before, exc_ptr_reg, filter_reg; + rtx_insn *seq; rtx first_reachable_label; basic_block bb; eh_region r; @@ -1353,7 +1356,8 @@ sjlj_emit_dispatch_table (rtx dispatch_label, int num_dispatch) for (i = 1; vec_safe_iterate (cfun->eh->lp_array, i, &lp); ++i) if (lp && lp->post_landing_pad) { - rtx seq2, label; + rtx_insn *seq2; + rtx label; start_sequence (); @@ -1467,7 +1471,7 @@ sjlj_build_landing_pads (void) num_dispatch = sjlj_assign_call_site_values (); if (num_dispatch > 0) { - rtx dispatch_label = gen_label_rtx (); + rtx_code_label *dispatch_label = gen_label_rtx (); int align = STACK_SLOT_ALIGNMENT (sjlj_fc_type_node, TYPE_MODE (sjlj_fc_type_node), TYPE_ALIGN (sjlj_fc_type_node)); @@ -1495,7 +1499,7 @@ sjlj_build_landing_pads (void) align); sjlj_mark_call_sites (); - sjlj_emit_function_enter (NULL_RTX); + sjlj_emit_function_enter (NULL); sjlj_emit_function_exit (); } @@ -1962,7 +1966,7 @@ can_nonlocal_goto (const_rtx insn) static unsigned int set_nothrow_function_flags (void) { - rtx insn; + rtx_insn *insn; crtl->nothrow = 1; @@ -2262,7 +2266,7 @@ expand_builtin_eh_return (tree stackadj_tree ATTRIBUTE_UNUSED, void expand_eh_return (void) { - rtx around_label; + rtx_code_label *around_label; if (! crtl->eh.ehr_label) return; @@ -2479,18 +2483,19 @@ add_call_site (rtx landing_pad, int action, int section) static unsigned int convert_to_eh_region_ranges (void) { - rtx insn, iter; + rtx insn; + rtx_insn *iter; rtx_note *note; action_hash_type ar_hash; int last_action = -3; - rtx last_action_insn = NULL_RTX; + rtx_insn *last_action_insn = NULL; rtx last_landing_pad = NULL_RTX; - rtx first_no_action_insn = NULL_RTX; + rtx_insn *first_no_action_insn = NULL; int call_site = 0; int cur_sec = 0; rtx section_switch_note = NULL_RTX; - rtx first_no_action_insn_before_switch = NULL_RTX; - rtx last_no_action_insn_before_switch = NULL_RTX; + rtx_insn *first_no_action_insn_before_switch = NULL; + rtx_insn *last_no_action_insn_before_switch = NULL; int saved_call_site_base = call_site_base; vec_alloc (crtl->eh.action_record_data, 64); @@ -2559,8 +2564,8 @@ convert_to_eh_region_ranges (void) gcc_assert (last_action != -3 || (last_action_insn == last_no_action_insn_before_switch)); - first_no_action_insn_before_switch = NULL_RTX; - last_no_action_insn_before_switch = NULL_RTX; + first_no_action_insn_before_switch = NULL; + last_no_action_insn_before_switch = NULL; call_site_base++; } /* If we'd not seen a previous action (-3) or the previous @@ -2575,7 +2580,7 @@ convert_to_eh_region_ranges (void) note = emit_note_before (NOTE_INSN_EH_REGION_BEG, first_no_action_insn); NOTE_EH_HANDLER (note) = call_site; - first_no_action_insn = NULL_RTX; + first_no_action_insn = NULL; } note = emit_note_after (NOTE_INSN_EH_REGION_END, @@ -2609,7 +2614,7 @@ convert_to_eh_region_ranges (void) { first_no_action_insn_before_switch = first_no_action_insn; last_no_action_insn_before_switch = last_action_insn; - first_no_action_insn = NULL_RTX; + first_no_action_insn = NULL; gcc_assert (last_action == -1); last_action = -3; } diff --git a/gcc/except.h b/gcc/except.h index bab13e1..f09b0e9 100644 --- a/gcc/except.h +++ b/gcc/except.h @@ -252,7 +252,7 @@ typedef tree (*duplicate_eh_regions_map) (tree, void *); extern struct pointer_map_t *duplicate_eh_regions (struct function *, eh_region, int, duplicate_eh_regions_map, void *); -extern void sjlj_emit_function_exit_after (rtx); +extern void sjlj_emit_function_exit_after (rtx_insn *); extern eh_region gen_eh_region_cleanup (eh_region); extern eh_region gen_eh_region_try (eh_region); diff --git a/gcc/function.h b/gcc/function.h index 575de1b..14d1b2c 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -144,10 +144,10 @@ typedef struct call_site_record_d *call_site_record; struct GTY(()) rtl_eh { rtx ehr_stackadj; rtx ehr_handler; - rtx ehr_label; + rtx_code_label *ehr_label; rtx sjlj_fc; - rtx sjlj_exit_after; + rtx_insn *sjlj_exit_after; vec *action_record_data; -- 1.8.5.3