* except.c (EH_RETURN_STACKADJ_RTX): Do not define.
(EH_RETURN_HANDLER_RTX): Likewise.
(expand_builtin_eh_return): Do not copy stack adjustment
if EH_RETURN_STACKADJ_RTX is not defined.
(expand_eh_return): Likewise. Also, do not pass stack
adjustment as argument to the eh_return pattern.
* except.h (MUST_USE_SJLJ_EXCEPTIONS): Do not define just
because EH_RETURN_STACKADJ_RTX is not defined.
* unwind-dw.c (uw_update_context_1): If EH_RETURN_STACKADJ_RTX
is not defined, treat stack pointer like a regular register.
(uw_init_context_1): Set up fake initial stack pointer register.
(uw_install_context_1): Do not compute stack adjustment if
EH_RETURN_STACKADJ_RTX is not defined.
* config/i386/i386.md ("eh_return"): Remove first argument.
* config/mips/mips.md ("eh_return"): Likewise.
* config/rs6000/rs6000.md ("eh_return"): Likewise.
* config/sh/sh.md ("eh_return"): Likewise.
* config/s390/s390.h (EH_RETURN_STACKADJ_RTX): Remove.
From-SVN: r66672
* Makefile.in (calls.o): Depend on except.h.
* calls.c: Include except.h.
(emit_call_1): Call note_eh_region_may_contain_throw if
appropriate.
* except.c (eh_region): Add may_contain_throw.
(expand_eh_region_end_cleanup): Do not include handler code when
it cannot be reached.
(note_eh_region_may_contain_throw): New function.
* except.h (note_eh_region_may_contain_throw): New function.
* call.c (build_over_call): Use build_cxx_call.
(build_cxx_call): New method, split out of build_over_call.
* cp-tree.h (language_function): Add can_throw.
(build_cxx_call): Declare it.
* decl.c (finish_function): If a function does not contain any
calls to functions that can throw an exception, indicate that
fact.
* decl2.c (mark_used): Do not defer the instantiation of
functions, if the current function does not throw.
* optimize.c (maybe_clone_body): Copy TREE_NOTHROW to the clones.
* pt.c (instantiate_decl): Make sure import_export_decl is called
before emitting things.
* rtti.c (throw_bad_cast): Use build_cxx_call.
(build_dynamic_cast_1): Likewise.
* typeck.c (build_function_call): Likewise.
* g++.dg/template/recurse.C: Adjust location of error messages.
From-SVN: r65929
* except.c (resolve_fixup_regions): Avoid dereferencing null pointer
to region, possible after integration of function with unreachable
regions that were optimized away.
From-SVN: r65631
PR c++/8805
* except.c (eh_region_u_cleanup): Add prev_try.
(expand_eh_region_end_cleanup): Set it.
(reachable_handlers): Use it to skip over cleanup blocks.
PR c++/8805
* g++.dg/eh/cleanup1.C: New test.
From-SVN: r64465
* varasm.c (default_exception_section): Move to...
* except.c (default_exception_section): ... here. Make
.gcc_except_table read-only if it is not expected to have any
dynamic relocations and linker handles it.
* dwarf2out.c (default_eh_frame_section): Make .eh_frame read-only
if it is not expected to have any dynamic relocations and linker
handles it.
* configure.in (HAVE_LD_RO_RW_SECTION_MIXING): Check what ld does
when linking read-only and read-write sections together.
* configure, config.in: Rebuilt.
* crtstuff.c (EH_FRAME_SECTION_CONST): Define.
(__EH_FRAME_BEGIN__, __FRAME_END__): Add it.
From-SVN: r59507
2002-09-24 Eric Christopher <echristo@redhat.com>
* except.c (expand_builtin_extract_return_address): Handle case
where Pmode != ptr_mode.
From-SVN: r57552
2002-08-24 Stuart Hastings <stuart@apple.com>
* function.h (struct function): Add flag
all_throwers_are_sibcalls.
* except.c (set_nothrow_function_flags): Replaces
nothrow_function_p. Set new flag.
* except.h (set_nothrow_function_flags): Replaces
nothrow_function_p.
* dwarf2out.c (struct dw_fde_struct): Add flag
all_throwers_are_sibcalls.
(output_call_frame_info): Test it.
(dwarf2out_begin_prologue) Propagate it from cfun to
dw_fde_struct.
* toplev.c (rest_of_compilation): Update calls to
nothrow_function_p.
From-SVN: r56561
2002-06-05 David S. Miller <davem@redhat.com>
Delete SEQUENCE rtl usage outside of reorg and ssa passes.
* rtl.h (gen_sequence, emit_insns, emit_insns_before,
emit_insns_before_scope, emit_insns_after,
emit_insns_after_scope): Delete declaration.
* ada/misc.c (insert_code_for): Use emit_insn* instead of
emit_insns_foo.
* config/alpha/alpha.c (alpha_set_memflags_1): Abort on SEQUENCE.
(alpha_set_memflags): Fix comment.
(set_frame_related_p): Use get_insns instead of gen_sequence.
* config/alpha/alpha.md (setjmp receiver splitter): Avoid
emitting no insns.
* config/arm/arm.c (arm_finalize_pic): Use get_insns instead of
gen_sequence.
(arm_gen_load_multiple, arm_gen_store_multiple): Likewise.
* config/fr30/fr30.c (fr30_move_double): Likewise.
* config/i386/i386.c (ix86_expand_int_movcc, ix86_expand_movstr):
Likewise.
* config/ia64/ia64.c (spill_restore_mem): Likewise.
* config/ia64/ia64.md (conditional move spliiter): Avoid emitting
no insns.
* config/m32r/m32r.c (gen_split_move_double): Use get_insns
instead of gen_sequence.
* config/mips/mips.c (embedded_pic_fnaddr_reg): Likewise.
(mips_expand_prologue, mips16_gp_pseudo_reg): Likewise.
* config/sh/sh.c (sh_need_epilogue): Likewise.
* config/sparc/sparc.md (current_function_calls_alloca, flat): New
attributes.
(setjmp pattern and split): Use them to avoid splitter which emits
no RTL.
* genattrtab.c (main): Emit include of function.h
* config/stormy16/stormy16.c (xstormy16_split_cbranch): Use
get_insns instead of gen_sequence.
* config/cris/cris.c (cris_split_movdx): Likewise.
* emit-rtl.c (emit_insns*): Kill.
(try_split): Expect insn list instead of SEQUENCE.
(make_jump_insn_raw, make_call_insn_raw): Fix comments.
(emit_*insn*): Reimplement to work with INSN lists and PATTERNs.
Make them abort if a SEQUENCE is given and RTL checking is
enabled.
(emit_*_scope): Don't forget to set scope on final insn.
(gen_sequence): Move from here...
* ssa.c (gen_sequence): To here as private function.
* builtins.c (expand_builtin_apply_args): Use emit_insn_foo, fix
comments.
(expand_builtin_return, expand_builtin_mathfn): Likewise.
(expand_builtin_strlen): Use get_insns instead of gen_sequence.
(expand_builtin_saveregs): Use emit_insn_foo, fix comments.
(expand_builtin_expect_jump): Use get_insns and fix comments.
* calls.c (try_to_integrate): Use emit_insn_foo.
(expand_call, emit_library_call_value_1): Likewise.
* expr.c (emit_queue): Handle insn lists instead of SEQUENCE.
(emit_move_insn_1): Use get_insns instead of gen_sequence.
(expand_expr): Use emit_insn_foo.
* cfgrtl.c (commit_one_edge_insertion): Use emit_insn_foo.
* except.c (build_post_landing_pads): Likewise.
* flow.c (attempt_auto_inc): Likewise.
* stmt.c (expand_fixup, fixup_gotos, expand_nl_handler_label,
expand_nl_goto_receivers, expand_decl_cleanup): Likewise.
* function.c (fixup_var_refs_insn): Use get_insns instead of
gen_sequence.
(fixup_var_refs_1): Likewise and expect insn list from gen_foo.
(fixup_memory_subreg): Use get_insns instead of gen_sequence.
(fixup_stack_1, purge_addressof_1, expand_main_function,
get_arg_pointer_save_area): Likewise.
(optimize_bit_field, instantiate_virtual_regs_1, assign_parms,
expand_function_end): Use emit_insn_foo.
(record_insns, keep_stack_depressed): Work with insn list instead
of SEQUENCE, fix comments.
* ifcvt.c (noce_emit_store_flag, noce_try_store_flag,
noce_try_store_flag_constants, noce_try_store_flag_inc,
noce_try_store_flag_mask, noce_emit_cmove, noce_try_cmove_arith,
noce_try_minmax, noce_try_abs): Use emit_insn_foo.
(noce_process_if_block): Use get_insns instead of gen_sequence.
* optabs.c (add_equal_note): Work with insn list, fix comments.
(expand_binop): Expect insn list from GEN_FCN(), use emit_insn_foo.
(expand_unop, expand_complex_abs, expand_unop_insn,
expand_no_conflict_block): Likewise.
(gen_move_insn): Use get_insns instead of gen_sequence.
(gen_cond_trap): Likewise.
* integrate.c (copy_rtx_and_substitute): Likewise.
(emit_initial_value_sets): Use emit_insn_foo.
* reload1.c (emit_output_reload_insns, emit_reload_insns): Likewise.
(fixup_abnormal_edges): Avoid losing REG_NOTES more intelligently
now that RTL generators give insn lists.
* sibcall.c (replace_call_placeholder): Use emit_insn_foo.
* doloop.c (doloop_modify, doloop_modify_runtime): Use get_insns
instead of gen_sequence.
(doloop_optimize): Work with insn lists instead of SEQUENCE rtl.
* explow.c (emit_stack_save, emit_stack_restore): Use get_insns
instead of gen_sequence.
* loop.c (move_movables, emit_prefetch_instructions,
gen_add_mult, check_dbra_loop, gen_load_of_final_value):
Likewise.
(loop_regs_update): Work with insn list instead of SEQUENCE rtl.
(product_cheap_p): Likewise, and add commentary about RTL wastage
here.
* lcm.c (optimize_mode_switching): Use get_insns instead of
gen_sequence.
* profile.c (gen_edge_profiler): Likewise.
* regmove.c (copy_src_to_dest): Likewise.
* reg-stack.c (compensate_edge): Likewise and fix comment.
* gcse.c (process_insert_insn): Likewise.
(insert_insn_end_bb): Work with insn list instead of SEQUENCE rtl.
* jump.c (delete_prior_computation): Update comment.
* genemit.c (gen_expand, gen_split, main): Use get_insns instead
of gen_sequence, update comments to match.
* recog.c (peephole2_optimize): Work with insn lists instead of
SEQUENCE rtl.
* sched-vis.c (print_pattern): Abort on SEQUENCE.
* unroll.c (unroll_loop, find_splittable_givs, final_giv_value):
Use get_insns instead of gen_sequence.
(copy_loop_body): Likewise and don't emit dummy NOTE.
* genrecog.c: Don't mention SEQUENCE rtl in comments.
* combine.c (try_combine): Expect insn lists from split generator.
* reorg.c (relax_delay_slots): Emit SEQUENCE into insn list by
hand.
From-SVN: r54497
2002-05-23 David S. Miller <davem@redhat.com>
* basic-block.h (CLEANUP_NO_INSN_DEL): Define it.
* cfgcleanup.c (cleanup_cfg): If it is set do not
attempt to delete trivially dead insns.
* except.c (finish_eh_generation): Pass it to cleanup_cfg.
* toplev.c (rest_of_compilation): Document non-trivial aspect
the RTL before optimize_save_area_alloca is run.
From-SVN: r53789
* except.c (current_function_has_exception_handlers): New.
* except.h: Declare it.
* sibcall.c (optimize_sibling_and_tail_recursive_call): Use it.
Combine tests that disable all sibcalls for the function.
From-SVN: r51054
* except.c (remove_unreachable_regions): New.
(free_eh_status): Clear exception_handler_labels.
(convert_from_eh_region_ranges): Call remove_unreachable_regions.
(find_exception_handler_labels): Don't add the same label more than
once.
(remove_exception_handler_label): Don't die if
find_exception_handler_labels hasn't been called for the current
function yet.
From-SVN: r48845
2001-12-11 Roger Sayle <roger@eyesopen.com>
* except.c (reachable_next_level): Handle ERT_UNKNOWN to avoid
compiler warning about enumeration values not being handled.
From-SVN: r47926
* except.c: Support for catching a list of types with a single handler
(struct eh_region): Change type and filter to lists for catch regions.
(mark_eh_region): Mark the filter list for GC also.
(expand_start_catch): Always build a list if argument not NULL and
register each type of the list through add_type_for_runtime.
(duplicate_eh_region_1): Change type into type_list for catch regions.
(assign_filter_values): Assign a filter to each type associated with a
catch region. Assign filter for NULL types in a unique entry in the
filter list.
(build_post_landing_pads): Emit compare and jump for each filter of
the list associated with a catch region.
(reachable_next_level): When the type thrown is known, stop the search
as soon as one type within a catch list matches. Also, a handler is
potentially reachable only if at least one of the types it catches
has not been previously caught.
(collect_one_action_chain): Retrieve the filter for a NULL type list
from the first filter list entry. For non NULL type lists, add an
action record for every filter assigned.
* except.h: Reflect changes in comment before expand_start_catch.
From-SVN: r47087
* builtins.c (expand_builtin_setjmp): Only call convert_memory_address
if needed.
(expand_builtin_longjmp, expand_builtin_alloca): Likewise.
* except.c (expand_builtin_frob_return_addr): Likewise.
(expand_builtin_eh_return): Likewise.
* stmt.c (expand_computed_goto): Likewise.
* explow.c (memory_address): Likewise.
(allocate_dynamic_stack_space): Clean up predicate testing.
(probe_stack_range): Convert SIZE to Pmode.
* calls.c (rtx_for_function_call): Only call convert_memory_address
if needed.
Pass function call operand as ptr_mode, not Pmode.
* expr.c (expand_assignment): Clean up calls to convert_memory
address by only doing so when needed and making offsets Pmode.
(store_constructor, expand_expr, expand_expr_unaligned): Likewise.
* function.c (assign_parms): Ensure address in MEM for RESULT_DECL
is in Pmode, not ptr_mode.
From-SVN: r46448
* except.c (dw2_build_landing_pads): New local
clobbers_hard_regs. Emit an ASM_INPUT as a scheduling
barrier after clobbers. Fixes c++/4012.
From-SVN: r45667
* except.c (TYPE_HASH): Delete.
* objc/objc-act.c (HASHFUNCTION): Cast to size_t, not
HOST_WIDE_INT.
* tree.c (TYPE_HASH): Delete.
* tree.h (TYPE_HASH): Define.
ch:
* tree.c (TYPE_HASH): Moved to ../tree.h.
cp:
* decl.c: Cast argument to size_t, not HOST_WIDE_INT, in calls to
GNU_xref_start_scope and GNU_xref_end_scope.
* tree.c (TYPE_HASH): Moved to ../tree.h.
From-SVN: r45004
* expr.h: Split out optab- and libfunc-related code to...
* optabs.h, libfuncs.h: ... these new headers.
* Makefile.in (CONFIG_H, EXPR_H): Take out insn-codes.h.
(OPTABS_H): New.
(various .o rules): Add $(OPTABS_H) and/or libfuncs.h to
dependencies.
* mkconfig.sh: Don't include insn-codes.h from config.h.
* reload.h: Use #ifdef GCC_INSN_CODES_H to decide whether
enum insn_code is available. Move reload_in_optab and
reload_out_optab array declarations to optabs.h.
* regmove.c (gen_add3_insn): Move to optabs.c, export from
there, prototype in expr.h.
* gencodes.c: Cleanup: zap global variables, don't use
printf where puts will do, don't bother defining MAX_INSN_CODE
which nothing uses, let CODE_FOR_nothing get its value implicitly.
* genemit.c, genopinit.c: Include optabs.h in generated file.
* genoutput.c: Include insn-codes.h in generated file.
* builtins.c, caller-save.c, combine.c, doloop.c, explow.c,
expmed.c, expr.c, function.c, ifcvt.c, loop.c, optabs.c, profile.c,
reload1.c, simplify-rtx.c, stmt.c, unroll.c, config/alpha/alpha.c,
config/arm/arm.c, config/c4x/c4x.c, config/clipper/clipper.c,
config/i386/i386.c, config/ia64/ia64.c, config/mn10300/mn10300.c,
config/pj/pj.c, config/sh/sh.c, config/sparc/sparc.c:
Include optabs.h.
* builtins.c, calls.c, dwarf2out.c, except.c, expr.c, function.c,
optabs.c, stmt.c, config/c4x/c4x.c, config/clipper/clipper.c,
config/m88k/m88k.c, config/sparc/sparc.c:
Include libfuncs.h.
* reload.c: Include expr.h and optabs.h before reload.h.
* config/alpha/alpha.c: Include tree.h before reload.h.
* config/pa/pa.c: Include expr.h, optabs.h, libfuncs.h,
and reload.h in that order.
* config/sparc/sparc.c: Include debug.h.
* recog.c: Include insn-codes.h.
cp:
* Make-lang.in (cp/except.o): Add libfuncs.h to dependencies.
* except.c: Include libfuncs.h.
java:
* Make-lang.in (java/decl.o): Update dependencies.
* decl.c: Include libfuncs.h, don't include toplev.h.
From-SVN: r44858
* except.c (collect_one_action_chain): Add an explicit cleanup
action if regions surrounding a catch were encoded entirely
within the call-site entry.
* g++.dg/eh/filter1.C, g++.dg/eh/filter2.C: New tests.
From-SVN: r44616
* integrate.c (copy_insn_list): handle
NOTE_INSN_DELETED_LABEL, as if it were CODE_LABEL.
(copy_rtx_and_substitute): Likewise; behave to NOTE_INSN_DELETED_LABEL
identically as to CODE_LABEL.
* fold-const (fold): Convert A/B/C to A/(B*C) and
A/(B/C) to (A/B)*C
* except.c (connect_post_landing_pads): Delete the RESX insns.
From-SVN: r44193
* basic-block.h (CLEANUP_PRE_SIBCALL): New constant.
* except.c (finish_eh_generation): Update call of cleanup_cfg;
do rebuild_jump_labels instead of jump_optimize
* sibcall.c (optimize_sibling_and_tail_recursive_call): Likewise.
* toplev.c (rest_of_compulation): Likewise for -Wreturn_type.
* flow.c (try_optimize_cfg): Remove unneeded code_labels.
* flow.c: Include timevar.h
(find_basic_block): Push/pop timevar;
(cleanup_cfg): Likewise.
* timevar.def (TV_CFG, TV_CLEANUP_CFG): New.
* Makefile: Add dependencies on timevar.h
* integrate.c (save_for_inline): Kill all BASIC_BLOCK notes.
(copy_insn_list): Avoid killing of BASIC_BLOCK notes.
* rtl.h (delete_trivially_dead_insns): Add new parameter.
* toplev.c (rest_of_compilation): Update calls.
* cse.c (set_live_p, insn_live_p, dead_libcall_p): Break out from ...
(delete_trivially_dead_insns): ... here; accept new argument
preserve_basic_blocks; preserve basic blocks if set.
* reg-stack.c (stack_regs_mentioned): Return 0 if
stack_regs_mentioned_data is not initialized.
(reg_to_stack): Make stack_regs_mentioned survive after the
reg-stack is completted; do not call cleanup_cfg.
* toplev.c (rest_of_compilation): Do cleanup_cfg before bb-reorder;
make cleanup_cfg after bb-reorder to output to debug file.
From-SVN: r44056
* except.c (dw2_build_landing_pads): Use word_mode, not Pmode,
as ncessary.
(expand_eh_return): Convert between word_mode and Pmode.
* unwind-dw2.c (extract_cie_info): Do not assume words and pointers
are the same size.
(execute_stack_op): Likewise.
(execute_cfa_program): Likewise.
(uw_frame_state_for): Likewise.
(uw_update_context_1): Likewise.
* unwind.inc (_Unwind_Reason_Code): Likewise.
* config/mips/mips.h (EH_RETURN_DATA_REGNO): Define.
(EH_RETURN_STACKADJ_RTX): Likewise.
* config/mips/mips.c (compute_frame_size): Make space for saving
EH return registers.
(mips_expand_epilogue): Handle EH stack adjustments.
* config/mips/mips.md (eh_return): New pattern.
(eh_set_lr_si): Likewise.
(eh_set_lr_di): Likewise.
Add splitter to perform EH return after reload.
From-SVN: r42332
* except.h (protect_cleanup_actions): Remove it.
(lang_protect_cleanup_actions): Declare it.
* except.c (protect_cleanup_actions): Remove it.
(lang_protect_cleanup_actions): New variable.
(init_eh): Don't make protect_cleanup_actions a GC root.
(expand_eh_region_and_cleanup): Call
lang_protect_cleanup_actions.
(output_function_exception_table): Remove unused `align'
variable.
* varasm.c (assemble_external): Abort if we have not yet
opened the assembly output file.
* except.c (cp_protect_cleanup_actions): New function.
(init_exception_processing): Don't set protect_cleanup_actions
here. Do set lang_protect_cleanup_actions.
From-SVN: r42218
* except.c (eh_data_format_name): Move to ...
* dwarf2asm.c: ... here. Use designated initializers if available.
(dw2_asm_output_encoded_addr_rtx): Accept varargs commentary.
* dwarf2asm.h: Update declarations.
* dwarf2out.c (output_cfi) [DW_CFA_set_loc]: If for_eh, mind
ASM_PREFERRED_EH_DATA_FORMAT.
(output_call_frame_info): Likewise. Use 'L' augmentation for
the LSDA encoding.
* unwind-dw2-fde.h (struct fde_vector): New.
(struct old_object): Rename from struct object.
(struct object): New.
(__register_frame_info_bases): Declare.
(__register_frame_info_table_bases): Declare.
(struct dwarf_fde): Remove explicit pc_begin/pc_range members.
* unwind-dw2-fde.c (objects): Remove.
(unseen_objects, seen_objects): New.
(__register_frame_info_bases): New.
(__register_frame_info): Use it.
(__register_frame_info_table_bases): New.
(__register_frame_info_table): Use it.
(__deregister_frame_info): Rewrite for changed object struct.
(base_from_object, get_cie_encoding, get_fde_encoding): New.
(fde_unencoded_compare): Rename from fde_compare; uninline.
(fde_single_encoding_compare, fde_mixed_encoding_compare): New.
(start_fde_sort): Adjust for new definition of fde_vector.
(fde_insert): Likewise.
(end_fde_sort): Likewise. Select comparison function based
on properties of the object.
(fde_split): Take object and fde_compare_t arguments.
(frame_heapsort, fde_merge): Likewise.
(classify_object_over_fdes): Rename from count_fdes. Handle
encoded pointers. Collect encoding, mixed_encoding, and pc_begin
for the object.
(add_fdes): Handle encoded pointers.
(init_object): Rename from frame_init. Update for new struct object.
(linear_search_fdes): Rename from search_fdes. Handle encoded
pointers.
(binary_search_unencoded_fdes): Broken out from _Unwind_Find_FDE.
(binary_search_single_encoding_fdes): New.
(binary_search_mixed_encoding_fdes): New.
(search_object): New.
(_Unwind_Find_FDE): Update for new struct object. Fill in
the dwarf_eh_bases.
* unwind-dw2.c: Include unwind-pe.h. Constify all pointers
iterating over EH data.
(_Unwind_FrameState): Remove saw_lsda, addr_encoding. Add
fde_encoding, lsda_encoding.
(read_uleb128, read_sleb128): Remove.
(read_encoded_pointer): Remove. All callers use read_encoded_value.
(extract_cie_info): Set lsda_encoding from 'L' augmentation.
(uw_frame_state_for): Don't set bases.func. Handle encoded fde
pointers.
* unwind-pe.h: Add "struct" to _Unwind_Context references.
From-SVN: r42176
* dwarf2asm.c (size_of_encoded_value): New function.
* dwarf2asm.h: Declare it.
* except.c (output_function_exception_table): Align the TType
array only as wide as the encoding.
From-SVN: r42028
* except.c (sjlj_mark_call_sites): Do not search for assignments to
non-argumment registers that are mentioned in CALL_INSN_FUNCTION_USAGE.
From-SVN: r41896
* except.c (expand_eh_region_start): Don't start a new block.
(expand_eh_region_end): Don't end a block.
* stmt.c (expand_end_bindings): Don't end EH blocks.
(expand_decl_cleanup): Starting an EH region won't change the block.
(mark_block_as_eh_region, mark_block_as_not_eh_region): Lose.
(is_eh_region): Lose.
* tree.h: Adjust.
From-SVN: r41647
2001-04-26 Andrew Haley <aph@redhat.com>
* except.c (expand_eh_region_end_cleanup): Force pending stack
adjust before emitting label that branches around cleanup code.
From-SVN: r41598
* except.c (reachable_handlers): Step out one level from a RESX.
* except.c (struct eh_region): Rename 'last' to 'resume'.
(mark_eh_region, duplicate_eh_region_1): Adjust.
(expand_eh_region_end_cleanup): Remember the jump, not the barrier.
(build_post_landing_pads): Likewise.
(expand_end_catch, expand_eh_region_end_allowed): Don't set it.
(expand_eh_region_end_must_not_throw): Likewise.
(connect_post_landing_pads): Thread (only) regions with non-deleted
resume insns.
* except.c (expand_eh_region_end_cleanup): Save the EH return data
registers around the cleanup.
(get_exception_filter): New fn.
(finish_eh_generation): Use it.
From-SVN: r41528