OSDN Git Service

2009-09-18 Neil Vachharajani <nvachhar@google.com>
[pf3gnuchains/gcc-fork.git] / gcc / ChangeLog
index 9a4cf3f..a3602ab 100644 (file)
@@ -1,4 +1,972 @@
-2009-09-10  Jason Merrill  <jason@redhat.com>
+2009-09-18  Neil Vachharajani  <nvachhar@google.com>
+
+       * value-prof.c (interesting_stringop_to_profile_p): Added output
+       argument to indicate which parameter is the size parameter.
+       * value-prof.c (gimple_stringop_fixed_value): Use
+       INTERESTING_STRINGOP_TO_PROFILE_P to find size argument.
+       * value-prof.c (gimple_stringops_transform): Update call sites to
+       INTERESTING_STRINGOP_TO_PROFILE_P to reflect parameter change.
+       * testsuite/gcc.dg/tree-prof/val-prof-7.c: Added test case.
+
+2009-09-18  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/38288
+       From David Binderman <dcb314@hotmail.com>:
+       * gcc/config/i386/i386.c (ix86_function_regparm): Remove useless
+       local variable f.  Remove stale comments.
+       (ix86_compute_frame_layout): Remove useless local variable total_size.
+       Remove #if 0'd code.
+       (legitimate_address_p): Remove useless local variables
+       reason_rtx and reason.
+       (ix86_split_copysign_const): Remove useless local variable op1.
+       (scale_counter): Remove useless local variable piece_size_mask.
+
+2009-09-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * stmt.c (expand_asm_operands): Set REG_ATTRS on the temporary from
+       output decl.
+
+2009-09-17  Michael Haubenwallner  <michael.haubenwallner@salomon.at>
+
+       PR target/40913
+       * config/pa/t-hpux-shlib: Set soname in libgcc_s.sl.
+
+2009-09-17  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-decl.c (finish_struct): Adjust DECL_SOURCE_LOCATION of
+       TYPE_STUB_DECL.
+
+2009-09-17  Alexandre Oliva  <aoliva@redhat.com>
+
+       * dwarf2out.c (loc_descriptor): Emit DW_OP_stack_value and
+       DW_OP_implicit_value even without dwarf_version 4.
+
+2009-09-17  Jan Hubicka  <jh@suse.cz>
+
+       * dwarf2out.c: Include tree-pass.h and gimple.h.
+       (loc_list_plus_const): New function.
+       (loc_descriptor_from_tree_1): Rename to ...
+       (loc_descriptor_from_tree): ... remove original.
+       (loc_list_from_tree): New function.
+       (add_AT_location_description): Accept location list.
+       (tls_mem_loc_descriptor): Update call of loc_descriptor_from_tree.
+       (concatn_mem_loc_descriptor): Remove.
+       (mem_loc_descriptor): Handle CONCAT/CONCATN and VAR_LOCATION by
+       returning NULL.
+       (secname_for_decl): Move up.
+       (hidden_reference_p): New function; break out from ...
+       (loc_by_refernece): ... here; move up.
+       (dw_loc_list): New function.
+       (single_element_loc_list): New function.
+       (single_element_loc_list_p): New function.
+       (add_loc_descr_to_each): New function.
+       (add_loc_list): New function.
+       (loc_descr_from_tree): Make wraper of loc_list_from_tree.
+       (loc_list_from_tree): Reroganized from loc_descr_from_tree;
+       add diagnostics why expansion failed.
+       (add_location_or_const_value_attribute): Support location lists.
+       (add_bound_info): Likewise.
+       (descr_info_loc): Update call of loc_descriptor_from_tree.
+       (gen_variable_die): Work on location lists.
+       * final.c (pass_final): Add dump file.
+       * Makefile.in (dwarf2out.o): Add new dependencies.
+
+2009-09-17  Janis Johnson  <janis187@us.ibm.com>
+
+       PR c/41049
+       * real.c decimal_from_integer, decimal_integer_string): New.
+       (real_from_integer): Use them as special case for decimal float.
+       * config/dfp-bit.c (_si_to_sd, _usi_to_sd): Use default rounding.
+       (_di_to_sd, _di_to_dd, _di_to_td, _udi_to_sd, _udi_to_dd, _udi_to_td):
+       Do not append zero after the decimal point in string to convert.
+
+2009-09-17  Alexander Monakov  <amonakov@ispras.ru>
+
+       * graphite-sese-to-poly.c (pdr_add_data_dimensions): Add bounds only
+       for ARRAY_REFs.  Use array_ref_{low,up}_bound to determine bounds.
+
+2009-09-17  Martin Jambor  <mjambor@suse.cz>
+
+       * common.opt (fipa-sra): New switch.
+       * opts.c (decode_options): Turn flag_ipa_sra on for opt2.
+       * timevar.def (TV_IPA_SRA): New timevar.
+       * params.def (ipa-sra-ptr-growth-factor): New parameter.
+       * doc/invoke.texi: Document -fipa-sra and ipa-sra-ptr-growth-factor.
+       * tree-sra.c: Include cgraph.c.
+       (enum sra_mode): Added SRA_MODE_EARLY_IPA.
+       (struct access): Added fields stmt, grp_maybe_modified, grp_scalar_ptr
+       and grp_not_necessarilly_dereferenced.
+       (func_param_count): New variable.
+       (encountered_apply_args): New variable.
+       (bb_dereferences): New variable.
+       (final_bbs): New variable.
+       (no_accesses_representant): New variable.
+       (no_accesses_p): New function.
+       (dump_access): Dump the new fields.
+       (sra_initialize): Set encountered_apply_args to false.
+       (get_ssa_base_param): New function.
+       (mark_parm_dereference): New function.
+       (create_access): Caring for INIDRECT_REFs and different handling of
+       varialble length accesses in early IPA SRA.  Store the stmt - a new
+       parameter - to the new access.
+       (build_access_from_expr_1): New parameter stmt, passed to
+       create_access.  Handle INDIRECT_REFs.
+       (build_access_from_expr): Pass the current statement to
+       build_access_from_expr_1.
+       (disqualify_ops_if_throwing_stmt): Trigger only in intraprocedural
+       passes.
+       (build_accesses_from_assign): Pass the current statement to
+       build_access_from_expr_1.  Do not create assign links in IPA-SRA.
+       (scan_function): Call handle_ssa_defs on phi nodes.  Set bits in
+       final_bbs when necessary.  Check for calls to __builtin_apply_args.
+       Fixup EH info if anythng was changed.
+       (is_unused_scalar_param): New function.
+       (ptr_parm_has_direct_uses): New function.
+       (find_param_candidates): New function.
+       (mark_maybe_modified): New function.
+       (analyze_modified_params): New function.
+       (propagate_dereference_distances): New function.
+       (dump_dereferences_table): New function.
+       (analyze_caller_dereference_legality): New function.
+       (unmodified_by_ref_scalar_representative): New function.
+       (splice_param_accesses): New function.
+       (decide_one_param_reduction): New function.
+       (enum ipa_splicing_result): New type.
+       (splice_all_param_accesses): New function.
+       (get_param_index): New function.
+       (turn_representatives_into_adjustments): New function.
+       (analyze_all_param_acesses): New function.
+       (get_replaced_param_substitute): New function.
+       (get_adjustment_for_base): New function.
+       (replace_removed_params_ssa_names): New function.
+       (sra_ipa_reset_debug_stmts): New function.
+       (sra_ipa_modify_expr): New function.
+       (sra_ipa_modify_assign): New function.
+       (convert_callers): New function.
+       (modify_function): New function.
+       (ipa_sra_preliminary_function_checks): New function.
+       (ipa_early_sra): New function.
+       (ipa_early_sra_gate): New function.
+       (pass_early_ipa_sra): New variable.
+       * Makefile.in (tree-sra.o): Add cgraph.h to dependencies.
+
+2009-09-17  Michael Matz  <matz@suse.de>
+
+       PR middle-end/41347
+       * tree.c (build_type_attribute_qual_variant): Export.
+       * tree.h (build_type_attribute_qual_variant): Declare.
+       * tree-inline.c (remap_type_1): Use it to build variants with
+       the original qualifiers and attributes.
+
+2009-09-17  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * cfglayout.c (fixup_reorder_chain): Accept conditional jumps
+       without a fallthrough edge.
+
+2009-09-16  DJ Delorie  <dj@redhat.com>
+
+       * config/m32c/m32c.c (m32c_emit_epilogue): Check for R8C or M16C
+       chip and ignore the "fast_interrupt" attribute if so.
+
+2009-09-16  Richard Henderson  <rth@redhat.com>
+
+       PR middle-end/41360
+       * cfgbuild.c (find_bb_boundaries): Really re-instate 2009-09-02
+       barrier fix.
+
+2009-09-16  Richard Henderson  <rth@redhat.com>
+
+       PR target/41246
+       * tree-cfg.c (verify_gimple_call): Validate that gimple_call_chain
+       is set only if DECL_NO_STATIC_CHAIN is unset.
+       * tree-nested.c (iter_nestinfo_start, iter_nestinfo_next): New.
+       (FOR_EACH_NEST_INFO): New.
+       (walk_all_functions): Use it.
+       (finalize_nesting_tree): Likewise.
+       (unnest_nesting_tree): Likewise.
+       (free_nesting_tree): Use iter_nestinfo_start, iter_nestinfo_next.
+       (get_chain_decl, get_chain_field): Reset DECL_NO_STATIC_CHAIN.
+       (convert_gimple_call): Early out if gimple_call_chain already set.
+       (convert_all_function_calls): Iterate until no new functions
+       require a static chain.
+       (finalize_nesting_tree_1): Assert DECL_NO_STATIC_CHAIN is unset
+       when building a trampoline.  Use dump_function_to_file instead
+       of dump_function.
+       (lower_nested_functions): Open dump_file.  Validate that decls
+       that have DECL_NO_STATIC_CHAIN from the front end don't have that
+       bit reset by this pass.
+
+2009-09-16  Michael Matz  <matz@suse.de>
+
+       PR fortran/41212
+       * tree.h (struct tree_decl_common): Add decl_restricted_flag,
+       shorten decl_common_unused.
+       (DECL_RESTRICTED_P): New accessor.
+       * tree-ssa-alias.c (ptr_deref_may_alias_decl_p): Use it
+       to disambiguate marked decls and restrict pointers.
+
+2009-09-16  Richard Henderson  <rth@redhat.com>
+
+       PR middle-end/41360
+       * cfgbuild.c (find_bb_boundaries): Re-instate 2009-09-02 barrier fix.
+
+2009-09-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * integrate.c (set_block_abstract_flags): Call
+       set_decl_abstract_flags also on BLOCK_NONLOCALIZED_VARs.
+
+2009-09-16  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/34011
+       * tree-flow-inline.h (may_be_aliased): Compute readonly variables
+       as non-aliased.
+
+2009-09-16  DJ Delorie  <dj@redhat.com>
+           Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * config/sh/sh.c (output_stack_adjust): Add new argument frame_p.
+       (sh_expand_prologue): Update calls to output_stack_adjust.
+       (sh_expand_epilogue): Likewise.
+
+2009-09-15  Adam Nemet  <anemet@caviumnetworks.com>
+
+       PR bootstrap/41349
+       * reorg.c (redundant_insn): Don't count notes or DEBUG_INSNs when
+       trying to limit the extent of searches in the insn stream.
+
+2009-09-15  Nathan Froyd  <froydnj@codesourcery.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/41175
+       PR target/40677
+       * config/rs6000/rs6000.c (no_global_regs_above): Fix precedence
+       problem.
+       (SAVRES_NOINLINE_GPRS_SAVES_LR, SAVRES_NOINLINE_FPRS_SAVES_LR,
+       SAVRES_NOINLINE_FPRS_DOESNT_RESTORE_LR): New strategy bits.
+       (rs6000_savres_strategy): Always save FP registers inline if the
+       target doesn't support hardware double-precision.  Set the above
+       bits in return value when needed.
+       (rs6000_savres_routine_sym): Fix computation for cache selector.
+       Mark the generated symbol as a function.  Rename exitp argument to
+       lr.  Move code for determining the name of the symbol...
+       (rs6000_savres_routine_name): ...here.  New function.  Add cases for
+       getting the names right on AIX and 64-bit Linux.
+       (savres_routine_name): New variable.
+       (rs6000_make_savres_rtx): Rename exitp argument to lr.  Don't assert
+       lr isn't set when savep.  Use r12 resp. r1 instead of r11 depending
+       on what the target routine uses as a base register.  If savep && lr
+       describe saving of r0 into memory slot.
+       (rs6000_emit_prologue): Correct use of call_used_regs.  Fix out of
+       line calls for AIX ABI.
+       (rs6000_output_function_prologue): Use rs6000_savres_routine_name to
+       determine FP save/restore functions.
+       (rs6000_emit_stack_reset): Handle savres if sp_offset != 0 and
+       frame_reg_rtx != sp_reg_rtx.  Use gen_add3_insn instead of
+       gen_addsi3.
+       (rs6000_emit_epilogue): Adjust computation of restore_lr.
+       Duplicate restoration of LR and execute the appropriate one
+       depending on whether GPRs are being restored inline.  Set r11 from
+       offsetted frame_reg_rtx instead of sp_reg_rtx; if frame_reg_rtx is
+       r11, adjust sp_offset.  Use gen_add3_insn instead of gen_addsi3.
+       Fix out of line calls for AIX ABI.
+       * config/rs6000/rs6000.md (*return_and_restore_fpregs_aix_<mode>):
+       New insn.
+       * config/rs6000/spe.md (*save_gpregs_spe): Use explicit match for
+       register 11.
+       (*restore_gpregs_spe): Likewise.
+       (*return_and_restore_gpregs_spe): Likewise.
+       * config/rs6000/linux64.h (SAVE_FP_SUFFIX, RESTORE_FP_SUFFIX):
+       Define to empty string unconditionally.
+       * config/rs6000/sysv4.h (SAVE_FP_SUFFIX, RESTORE_FP_SUFFIX):
+       Define to empty string unconditionally.
+       (GP_SAVE_INLINE, FP_SAVE_INLINE): Handle TARGET_64BIT the same as
+       !TARGET_64BIT.
+
+2009-09-15  Jan Hubicka  <jh@suse.cz>
+
+       * doc/invoke.texi (inline-insns-auto): Drop from 60 to 50.
+       * params.def (inline-insns-auto): Likewise.
+
+2009-09-15  Martin Jambor  <mjambor@suse.cz>
+
+       * ipa-inline.c (estimate_function_body_sizes): Dump info about
+       individual statements only at TDF_DETAILS dump level.  Format
+       source for 80 characters per line.
+
+2009-09-15  Christian Bruel  <christian.bruel@st.com>
+
+       * regrename.c (do_replace): Update REG_DEAD notes.
+
+2009-09-15  Revital Eres  <eres@il.ibm.com>
+
+       * doc/tm.texi (TARGET_SUPPORT_VECTOR_MISALIGNMENT): Document.
+       * targhooks.c (default_builtin_support_vector_misalignment):
+       New builtin function.
+       * targhooks.h (default_builtin_support_vector_misalignment):
+       Declare.
+       * target.h (builtin_support_vector_misalignment):
+       New field in struct gcc_target.
+       * tree-vect-data-refs.c (vect_supportable_dr_alignment): Call
+       new builtin function.
+       * target-def.h (TARGET_SUPPORT_VECTOR_MISALIGNMENT):
+       Define.
+       * config/rs6000/rs6000.c
+       (rs6000_builtin_support_vector_misalignment): New function.
+       (TARGET_SUPPORT_VECTOR_MISALIGNMENT): Define.
+
+2009-09-15  Jie Zhang  <jie.zhang@analog.com>
+
+       * config/bfin/bfin.c (length_for_loop): Use NONDEBUG_INSN_P
+       instead of INSN_P.
+       (bfin_optimize_loop): Likewise.
+       (bfin_gen_bundles): Likewise.
+       (workaround_speculation): Likewise.
+       (find_load): Return NULL_RTX for debug_insn.
+
+2009-09-15  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/alpha/alpha.md (smaxsf3): Disable for IEEE mode.
+       (sminsf3): Ditto.
+
+2009-09-14  DJ Delorie  <dj@redhat.com>
+
+       * config/mep/mep.h (JUMP_TABLES_IN_TEXT_SECTION): Define.
+       * config/mep/mep.c (mep_emit_cbranch): Don't use BEQZ/BNEI in
+       VLIW mode.
+
+2009-09-14  Richard Henderson  <rth@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       * builtins.c (expand_builtin_synchronize): Use gimple_build_asm_vec.
+       * cfgbuild.c (make_edges): Handle asm goto.
+       * cfglayout.c (fixup_reorder_chain): Likewise.
+       * cfgrtl.c (patch_jump_insn): Likewise.
+       * gimple-pretty-print.c (dump_gimple_asm): Likewise.
+       * gimple.c (gimple_build_asm_1): Add and use nlabels parameter.
+       (gimple_build_asm_vec): Add and use labels parameter.
+       (gimple_build_asm): Remove.
+       (walk_gimple_asm): Walk labels too.
+       * gimple.def (GIMPLE_ASM): Update docs.
+       * gimple.h: Update decls.
+       (struct gimple_statement_asm): Change nc to use unsigned char;
+       add nl member.
+       (gimple_asm_nlabels): New.
+       (gimple_asm_label_op, gimple_asm_set_label_op): New.
+       * gimplify.c (gimplify_asm_expr): Copy labels from ASM_EXPR
+       into gimple_build_asm_vec.
+       * jump.c (mark_jump_label_asm): New.
+       (mark_jump_label): Use it.
+       (redirect_jump_1): Handle asm goto.
+       (invert_jump_1): Soft fail if X is null.
+       * recog.c (extract_asm_operands): New.
+       (asm_noperands): Use it; handle asm labels.
+       (decode_asm_operands): Use extract_asm_operands.
+       (asm_operand_ok): Properly handle empty string.
+       * reg-stack.c (get_asm_operands_in_out): Rename from
+       get_asm_operand_n_inputs; use extract_asm_operands; return both
+       inputs and outputs by reference; update all callers.
+       * rtl.def (ASM_OPERANDS): Add label vector as operand 6.
+       * rtl.h (ASM_OPERANDS_LABEL_VEC): New.
+       (ASM_OPERANDS_LABEL_LENGTH, ASM_OPERANDS_LABEL): New.
+       (ASM_OPERANDS_SOURCE_LOCATION): Renumber.
+       (extract_asm_operands): Declare.
+       * stmt.c (expand_asm_operands): Add and use labels parameter.
+       (check_unique_operand_names): Likewise.
+       (resolve_asm_operand_names, resolve_operand_name_1): Likewise.
+       (expand_asm_stmt): Handle asm labels.
+       * tree-cfg.c (make_gimple_asm_edges): New.
+       (make_edges): Use it.
+       (cleanup_dead_labels): Handle asm labels.
+       (is_ctrl_altering_stmt): Likewise.
+       (gimple_redirect_edge_and_branch): Likewise.
+       * tree.def (ASM_EXPR): Add 5th operand.
+       * tree.h (ASM_LABELS): New.
+       (resolve_asm_operand_names): Update decl.
+
+       * c-parser.c (c_parser_asm_statement): Parse asm goto.
+       (c_parser_asm_goto_operands): New.
+       * c-tree.h (build_asm_expr): Update decl.
+       * c-typeck.c (build_asm_expr): Add and use labels parameter.
+       * doc/extend.texi: Document asm goto.
+
+2009-09-14  Richard Henderson  <rth@redhat.com>
+
+       * except.h: Update declarations.
+       (struct pointer_map_t): Forward declare.
+       (ERT_UNKNOWN, ERT_THROW, ERT_CATCH): Remove.
+       (struct eh_landing_pad_d, eh_landing_pad): New.
+       (struct eh_catch_d, eh_catch): New.
+       (struct eh_region_d): Remove next_region_sharing_label, aka,
+       label, tree_label, landing_pad, post_landing_pad, resume,
+       may_contain_throw.  Rename region_number to index.  Remove
+       u.eh_catch, u.eh_throw.  Rename u.eh_try.eh_catch to first_catch.
+       Add u.must_not_throw, landing_pads, exc_ptr_reg, filter_reg.
+       (VEC(eh_landing_pad,gc)): New.
+       (struct eh_status): Remove last_region_number.  Add lp_array,
+       throw_stmt_table, ttype_data, ehspec_data.
+       (ehr_next, FOR_ALL_EH_REGION_AT): New.
+       (FOR_ALL_EH_REGION_FN, FOR_ALL_EH_REGION): New.
+       * except.c (lang_protect_cleanup_actions): Return tree.
+       (struct ehl_map_entry): Remove.
+       (init_eh_for_function): Push zero entries for region and lp_array.
+       (gen_eh_region): Add to region_array immediately.
+       (gen_eh_region_catch): Operate on eh_catch objects.
+       (gen_eh_landing_pad): New.
+       (get_eh_region_may_contain_throw, get_eh_region_tree_label): Remove.
+       (get_eh_region_no_tree_label, set_eh_region_tree_label): Remove.
+       (get_eh_region_from_number, get_eh_region_from_number_fn): New.
+       (get_eh_landing_pad_from_number_fn): New.
+       (get_eh_landing_pad_from_number): New.
+       (get_eh_region_from_lp_number_fn): New.
+       (get_eh_region_from_lp_number): New.
+       (expand_resx_stmt, note_eh_region_may_contain_throw): Remove.
+       (get_exception_pointer, get_exception_filter): Remove.
+       (collect_eh_region_array, can_be_reached_by_runtime): Remove.
+       (current_function_has_exception_handlers): Simplify.
+       (bring_to_root, eh_region_replaceable_by_p): Remove.
+       (replace_region, hash_type_list, hash_eh_region): Remove.
+       (eh_regions_equal_p, merge_peers, remove_unreachable_regions): Remove.
+       (label_to_region_map, num_eh_regions): Remove.
+       (get_next_region_sharing_label, must_not_throw_labels): Remove.
+       (find_exception_handler_labels): Remove.
+       (duplicate_eh_regions_0, find_prev_try): Remove.
+       (struct duplicate_eh_regions_data): New.
+       (duplicate_eh_regions_1): Rewrite.
+       (duplicate_eh_regions): Return a pointer map instead of an
+       integer offset.
+       (copy_eh_region_1, copy_eh_region, push_reachable_handler): Remove.
+       (redirect_eh_edge_to_label): Remove.
+       (eh_region_outermost): Rewrite using eh_region pointers
+       instead of integers.
+       (add_ttypes_entry): Update for ttype_data move to eh_status.
+       (add_ehspec_entry): Rewrite with VEC instead of varray.
+       (assign_filter_values): Likewise.  Export.
+       (build_post_landing_pads, connect_post_landing_pads): Remove.
+       (dw2_build_landing_pads): Rewrite to use lp_array.
+       (struct sjlj_lp_info, sjlj_find_directly_reachable_regions): Remove.
+       (sjlj_assign_call_site_values): Rewrite to use lp_array.
+       (sjlj_emit_dispatch_table, sjlj_build_landing_pads): Likewise.
+       (sjlj_mark_call_sites): Update for landing pad numbers.
+       (finish_eh_generation): Rewrite.
+       (gate_handle_eh): Do nothing for no eh tree.
+       (pass_rtl_eh): Move up near finish_eh_generation.
+       (remove_eh_landing_pad): New.
+       (remove_eh_handler): Export.
+       (remove_eh_region, remove_eh_handler_and_replace): Remove.
+       (for_each_eh_label): Rewrite to use lp_array.
+       (make_reg_eh_region_note): New.
+       (make_reg_eh_region_note_nothrow_nononlocal): New.
+       (insn_could_throw_p): New.
+       (copy_reg_eh_region_note_forward): New.
+       (copy_reg_eh_region_note_backward): New.
+       (check_handled, add_reachable_handler): Remove.
+       (reachable_next_level, foreach_reachable_handler): Remove.
+       (arh_to_landing_pad, arh_to_label, reachable_handlers): Remove.
+       (get_eh_region_and_lp_from_rtx): New.
+       (get_eh_region_from_rtx): New.
+       (can_throw_internal_1, can_throw_external_1): Remove.
+       (can_throw_internal): Use get_eh_region_from_rtx.
+       (can_throw_external): Use get_eh_region_and_lp_from_rtx.
+       (insn_nothrow_p, can_nonlocal_goto): New.
+       (expand_builtin_eh_common, expand_builtin_eh_pointer): New.
+       (expand_builtin_eh_filter, expand_builtin_eh_copy_values): New.
+       (add_action_record): Use VEC not varray.
+       (collect_one_action_chain): Update for eh_region changes.
+       (convert_to_eh_region_ranges): Make static.  Use VEC not varray.
+       Use get_eh_region_and_lp_from_rtx.
+       (gate_convert_to_eh_region_ranges): New.
+       (pass_convert_to_eh_region_ranges): Use it.
+       (push_uleb128, push_sleb128): Use VEC not varray.
+       (output_one_function_exception_table): Likewise.
+       (dump_eh_tree): Update for eh_region changes.
+       (verify_eh_tree): Likewise.
+       (verify_eh_region, default_init_unwind_resume_libfunc): Remove.
+       * tree-eh.c: Include target.h.
+       (add_stmt_to_eh_lp_fn): Rename from add_stmt_to_eh_region_fn.
+       Don't disallow GIMPLE_RESX; adjust argument check.
+       (add_stmt_to_eh_lp): Rename from add_stmt_to_eh_region.
+       (record_stmt_eh_region): Update for landing pad numbers;
+       generate a landing pad if necessary.
+       (remove_stmt_from_eh_lp): Rename from remove_stmt_from_eh_region.
+       (remove_stmt_from_eh_lp_fn): Similarly.
+       (lookup_stmt_eh_lp_fn): Rename from lookup_stmt_eh_region_fn.
+       Update for lp numbers; don't special case missing throw_stmt_table.
+       (lookup_expr_eh_lp): Similarly.
+       (lookup_stmt_eh_lp): Rename from lookup_stmt_eh_region.
+       (eh_seq, eh_region_may_contain_throw): New.
+       (struct leh_state): Add ehp_region.
+       (struct leh_tf_state): Remove eh_label.
+       (emit_post_landing_pad): New.
+       (emit_resx, emit_eh_dispatch): New.
+       (note_eh_region_may_contain_throw): New.
+       (frob_into_branch_around): Take eh_region not eh label;
+       emit eh code into eh_seq.
+       (honor_protect_cleanup_actions): Early exit for no actions.  Don't
+       handle EXC_PTR_EXPR, FILTER_EXPR.  Use gimple_build_eh_must_not_throw,
+       lower_eh_must_not_throw.  Emit code to eh_seq.
+       (lower_try_finally_nofallthru): Emit eh code to eh_seq.
+       (lower_try_finally_onedest): Likewise.
+       (lower_try_finally_copy): Likewise.
+       (lower_try_finally_switch): Likewise.
+       (lower_try_finally): Initialize ehp_region.
+       (lower_catch): Update for eh_catch objects.
+       (lower_eh_filter): Don't handle must_not_throw.
+       (lower_eh_must_not_throw): New.
+       (lower_cleanup): Don't set eh_label.
+       (lower_eh_constructs_2): Resolve eh builtins.
+       Handle GIMPLE_EH_MUST_NOT_THROW.
+       (lower_eh_constructs): Initialize eh_region_may_contain_throw.
+       Add eh_seq to the end of the function body.
+       (make_eh_dispatch_edges): New.
+       (make_eh_edge): Remove.
+       (make_eh_edges): Simplify for landing pads.
+       (redirect_eh_edge_1): New.
+       (redirect_eh_edge): Use it.
+       (redirect_eh_dispatch_edge): New.
+       (stmt_could_throw_p): Use a switch.  Allow RESX.
+       (stmt_can_throw_external): Use lookup_stmt_eh_lp.
+       (stmt_can_throw_internal): Likewise.
+       (maybe_clean_eh_stmt_fn, maybe_clean_eh_stmt): New.
+       (maybe_clean_or_replace_eh_stmt): Update for landing pads.
+       (maybe_duplicate_eh_stmt_fn, maybe_duplicate_eh_stmt): New.
+       (gate_refactor_eh): New.
+       (pass_refactor_eh): Use it.
+       (lower_resx, execute_lower_resx, pass_lower_resx): New.
+       (lower_eh_dispatch, execute_lower_eh_dispatch): New.
+       (gate_lower_ehcontrol, pass_lower_eh_dispatch): New.
+       (remove_unreachable_handlers): Rename from
+       tree_remove_unreachable_handlers; rewrite for landing pads;
+       call remove_eh_handler directly.
+       (remove_unreachable_handlers_no_lp): New.
+       (unsplit_eh, unsplit_all_eh): New.
+       (tree_empty_eh_handler_p, all_phis_safe_to_merge): Remove.
+       (cleanup_empty_eh_merge_phis, cleanup_empty_eh_move_lp): New.
+       (cleanup_empty_eh_unsplit): New.
+       (cleanup_empty_eh): Rewrite.
+       (cleanup_all_empty_eh): New.
+       (execute_cleanup_eh): Rename from cleanup_eh.  Remove unreachable
+       handlers first.  Use unsplit_all_eh, cleanup_all_empty_eh.
+       (gate_cleanup_eh): New.
+       (pass_cleanup_eh): Use it.
+       (verify_eh_edges): Move later in file.  Expect one EH edge.
+       (verify_eh_dispatch_edge): New.
+
+       * Makefile.in (FUNCTION_H): Use vecprim.h, not varray.h.
+       (gtype-desc.o): Add TARGET_H.
+       (tree.o): Use EXCEPT_H, not except.h.
+       (cfgbuild.o): Add EXPR_H.
+       (GTFILES): Add vecprim.h.
+       * builtins.c (expand_builtin): Handle BUILT_IN_EH_POINTER,
+       BUILT_IN_EH_FILTER, BUILT_IN_EH_COPY_VALUES.
+       * builtins.def (BUILT_IN_UNWIND_RESUME, BUILT_IN_EH_POINTER,
+       BUILT_IN_EH_FILTER, BUILT_IN_EH_COPY_VALUES): New.
+       * calls.c (emit_call_1): Use make_reg_eh_region_note.
+       * cfgbuild.c (control_flow_insn_p): Use can_nonlocal_goto; tidy
+       calls to can_throw_internal.
+       (rtl_make_eh_edge): Use get_eh_landing_pad_from_rtx.
+       (make_edges): Don't handle RESX; use can_nonlocal_goto.
+       * cfgexpand.c (expand_gimple_stmt_1): Don't handle RESX.
+       (expand_gimple_stmt): Use make_reg_eh_region_note.
+       (expand_debug_expr): Don't handle EXC_PTR_EXPR and FILTER_EXPR.
+       (gimple_expand_cfg): Don't call convert_from_eh_region_ranges,
+       or find_exception_handler_labels.
+       * cfgrtl.c (rtl_verify_flow_info_1): Don't handle RESX.  Assert
+       there is exacly one EH edge.  Use can_nonlocal_goto and
+       can_throw_internal.
+       * cgraphunit.c (update_call_expr): Use maybe_clean_eh_stmt_fn.
+       (cgraph_materialize_all_clones): Use maybe_clean_or_replace_eh_stmt.
+       * combine.c (can_combine_p, try_combine): Use insn_nothrow_p.
+       * cse.c (count_reg_usage, insn_live_p): Use insn_could_throw_p.
+       * dce.c (deletable_insn_p_1): Don't test may_trap_p.
+       (deletable_insn_p): Use insn_nothrow_p; reorder nonjump insn test.
+       * dse.c (scan_insn): Use insn_could_throw_p.
+       * emit-rtl.c (try_split): Use copy_reg_eh_region_note_backward.
+       * expr.c (expand_expr_real): Use make_reg_eh_region_note.
+       (expand_expr_real_1): Don't handle RESX, EXC_PTR, or FILTER_EXPR.
+       * fold-const.c (tree_expr_nonnegative_warnv_p): Don't handle
+       EXC_PTR_EXPR or FILTER_EXPR.
+       (tree_expr_nonzero_warnv_p): Likewise.
+       * function.h: Include vecprim.h, not varray.h
+       (struct rtl_eh): Remove filter, exc_ptr, built_landing_pad members;
+       move ttype_data and ehspec_data members to struct eh_status; change
+       action_record_data member to a VEC.
+       * gcse.c (hash_scan_set): Use can_throw_internal.
+       * gengtype.c (open_base_files): Add target.h to gtype-desc.c.
+       * gimple-iterator.c (gsi_replace): Use maybe_clean_or_replace_eh_stmt.
+       * gimple-low.c (lower_stmt): Handle GIMPLE_EH_MUST_NOT_THROW.
+       (block_may_fallthru): Don't handle RESX_EXPR.
+       * gimple-pretty-print.c (dump_gimple_label): Dump EH_LANDING_PAD_NR.
+       (dump_gimple_eh_must_not_throw, dump_gimple_eh_dispatch): New.
+       (dump_gimple_stmt): Dump landing pad information with TDF_EH;
+       handle GIMPLE_EH_MUST_NOT_THROW, GIMPLE_EH_DISPATCH.
+       * gimple.c (gss_for_code): Handle GIMPLE_EH_MUST_NOT_THROW,
+       GIMPLE_EH_DISPATCH, GIMPLE_RESX.
+       (gimple_size): Likewise.
+       (gimple_build_eh_dispatch, gimple_build_eh_must_not_throw): New.
+       (gimple_build_resx): Use gimple_build_with_ops.
+       (DEFTREECODE): Don't handle EXC_PTR_EXPR, FILTER_EXPR.
+       (is_gimple_val): Likewise.
+       (is_gimple_stmt): Remove RESX_EXPR.
+       * gimple.def (GIMPLE_EH_MUST_NOT_THROW, GIMPLE_EH_DISPATCH): New.
+       (GIMPLE_RESX): Reorder with other EH constructs.
+       * gimple.h (struct gimple_statement_eh_mnt): New.
+       (struct gimple_statement_eh_ctrl): Rename from gimple_statement_resx.
+       (gimple_eh_filter_must_not_throw): Remove.
+       (gimple_eh_filter_set_must_not_throw): Remove.
+       (gimple_eh_must_not_throw_fndecl): New.
+       (gimple_eh_dispatch_region, gimple_eh_dispatch_set_region): New.
+       (is_gimple_resx): New.
+       * gimplify.c (gimplify_expr): Don't handle EXC_PTR_EXPR, RESX_EXPR.
+       Don't copy EH_FILTER_MUST_NOT_THROW.
+       * gsstruct.def (GSS_EH_MNT, GSS_EHCONTROL): New.
+       * ipa-inline.c (estimate_function_body_sizes): Don't try to
+       handle must_not_throw_labels specially.
+       * ipa-pure-const.c (check_call): Update debug statement for LP.
+       * ipa-type-escape.c (check_operand): Don't handle EXC_PTR or FILTER.
+       * ipa-utils.c (get_base_var): Likewise.
+       * libfunc.h (LTI_unwind_resume, unwind_resume_libfunc): Remove.
+       * lower-subreg.c (move_eh_region_note): Remove.
+       (resolve_simple_move): Use copy_reg_eh_region_note_forward.
+       * omp-low.c (new_omp_context): Update for eh_lp_nr.
+       (create_task_copyfn): Likewise.
+       (maybe_catch_exception): Use gimple_build_eh_filter.
+       * optabs.c (emit_libcall_block): Update test for no-nonlocal-goto
+       REG_EH_REGION.  Use make_reg_eh_region_note_nothrow_nononlocal.
+       * passes.c (init_optimization_passes): Add pass_lower_eh_dispatch
+       and pass_lower_resx.
+       * print-tree.c (print_node): Dump EH_LANDING_PAD_NR.
+       * recog.c (peephole2_optimize): Use copy_reg_eh_region_note_backward,
+       can_throw_internal, can_nonlocal_goto.
+       * reload1.c (fixup_eh_region_note): Use insn_could_throw_p,
+       copy_reg_eh_region_note_forward.
+       (emit_input_reload_insns): Use copy_reg_eh_region_note_forward.
+       (emit_output_reload_insns): Likewise.
+       (copy_eh_notes): Remove.
+       * rtl.def (RESX): Remove.
+       * rtl.h: Update declarations.
+       * sese.c (graphite_copy_stmts_from_block): Use maybe_duplicate_eh_stmt.
+       * tree-cfg.c (make_edges): Handle GIMPLE_EH_DISPATCH.
+       (update_eh_label): Remove.
+       (cleanup_dead_labels_eh): New.
+       (cleanup_deal_labels): Use it instead of update_eh_label.
+       (gimple_merge_blocks): Update landing pad data structure when
+       removing a landing pad label.
+       (remove_useless_stmts_tc): Remove gimple_eh_filter_must_not_throw
+       test; handle GIMPLE_EH_MUST_NOT_THROW.
+       (is_ctrl_altering_stmt): Handle GIMPLE_EH_DISPATCH.
+       (verify_gimple_assign_single): Don't handle EXC_PTR or FILTER_EXPR.
+       (verify_types_in_gimple_stmt): Handle GIMPLE_EH_DISPATCH.
+       (verify_stmt): Likewise.  Verify landing pads.
+       (gimple_redirect_edge_and_branch): Handle GIMPLE_EH_DISPATCH.
+       (gimple_duplicate_bb): Use maybe_duplicate_eh_stmt.
+       (struct move_stmt_d): Add eh_map.
+       (move_stmt_eh_region_nr, move_stmt_eh_region_tree_nr): New.
+       (move_stmt_r): Remap eh region numbers in builtin calls,
+       resx and eh_dispatch.
+       (move_block_to_fn): Remove eh_offset parameter.  Use
+       maybe_duplicate_eh_stmt_fn.
+       (find_outermost_region_in_block): Operate on eh_region pointers
+       instead of region numbers.
+       (move_sese_region_to_fn): Expect eh_map instead of eh_offset from
+       duplicate_eh_regions.
+       * tree-cfgcleanup.c (tree_forwarder_block_p): Move entry block edge
+       test earlier.  Disallow EH landing pads.
+       * tree-cfa.c (create_tree_common_ann): Don't set ann->rn.
+       * tree-flow.h: Update declarations.
+       (struct tree_ann_common_d): Replace rn with lp_nr.
+       * tree-inline.c (copy_tree_body_r): Don't handle RESX_EXPR.
+       (remap_eh_region_nr, remap_eh_region_tree_nr): New.
+       (remap_gimple_stmt): Remap eh region numbers in builtin calls,
+       resx and eh_dispatch.
+       (copy_bb): Use maybe_duplicate_eh_stmt_fn.
+       (copy_edges_for_bb): Use make_eh_dispatch_edges.
+       (copy_cfg_body): Expect eh_map instead of eh_region_offset
+       from duplicate_eh_regions.
+       (estimate_num_insns): Don't handle EXC_PTR_EXPR or FILTER_EXPR;
+       update RESX; handle EH_DISPATCH.
+       (expand_call_inline): Set eh_lp_nr, not eh_region.
+       (maybe_inline_call_in_expr): Likewise.
+       * tree-inline.h (struct copy_body_data): Replace eh_region with
+       eh_lp_nr, eh_region_offset with eh_map.
+       * tree-optimize.c (execute_fixup_cfg): Use maybe_clean_eh_stmt.
+       * tree-pass.h (pass_lower_eh_dispatch, pass_lower_resx): New.
+       * tree-pretty-print.c (dump_generic_node): Don't handle
+       EXC_PTR_EXPR, FILTER_EXPR, RESX_EXPR.
+       * tree-sra.c (scan_function): Use maybe_clean_eh_stmt.
+       * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Don't handle
+       EXC_PTR_EXPR, FILTER_EXPR.
+       * tree-ssa-operands.c (get_expr_operands): Likewise.
+       * tree-ssa-propagate.c (valid_gimple_rhs_p): Likewise.
+       * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.
+       (ao_ref_init_from_vn_reference): Likewise.
+       * tree-ssa-sink.c (statement_sink_location): Likewise.
+       * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
+       (mark_virtual_phi_result_for_renaming): Export.  Tidy.
+       * tree-ssa-pre.c (get_or_alloc_expr_for): Don't handle
+       EXC_PTR_EXPR, FILTER_EXPR.
+       (is_exception_related): Remove.
+       (compute_avail): Don't call it.
+       * tree-ssa-structalias.c: Remove VEC definitions for int and unsigned.
+       * tree.c (find_decls_types_in_eh_region): Update for eh_region changes.
+       (find_decls_types_in_node): Use FOR_ALL_EH_REGION_FN.
+       (build_common_builtin_nodes): Add enable_cxa_end_cleanup parameter.
+       Build EH builtins.
+       (build_resx): Remove.
+       * tree.def (EXC_PTR_EXPR, FILTER_EXPR, RESX_EXPR): Remove.
+       * tree.h: Update declarations.
+       (EH_FILTER_MUST_NOT_THROW): Remove.
+       (struct tree_label_decl): Add eh_landing_pad_nr.
+       (EH_LANDING_PAD_NR): New.
+       * value-prof.c (gimple_ic): Tidy variable names.  Update for
+       landing pad numbers.
+       (gimple_stringop_fixed_value): Tidy variable names.  Assert
+       that neither call stmt can throw.
+       * vecprim.h (uchar): New.
+       (VEC(uchar,heap), VEC(uchar,gc)): New.
+
+       * c-common.c (c_define_builtins): Update call to
+       build_common_builtin_nodes.
+       * c-parser.c (c_parse_file): Don't call
+       default_init_unwind_resume_libfunc.
+
+2009-09-14  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * config/mips/mips-protos.h (mips_cfun_has_cprestore_slot_p): Declare.
+       (mips_cprestore_address_p): Likewise.
+       (mips_save_gp_to_cprestore_slot): Likewise.
+       (mips_restore_gp): Rename to...
+       (mips_restore_gp_from_cprestore_slot): ...this.
+       (mips_must_initialize_gp_p): Declare.
+       (mips_emit_save_slot_move): Likewise.
+       (mips_output_load_label): Return nothing.
+       (mips_eh_uses): Declare.
+       * config/mips/mips.h (TARGET_SPLIT_CALLS): Require epilogue_completed.
+       (TARGET_CPRESTORE_DIRECTIVE): New macro.
+       (TARGET_ABSOLUTE_JUMPS): Likewise.
+       (EH_USES): Likewise.
+       (FIRST_PSEUDO_REGISTER): Update comment.
+       (MIPS_ABSOLUTE_JUMP): New macro, extracted from...
+       (MIPS_CALL): ...here.
+       (REGISTER_NAMES): Add $cprestore.
+       * config/mips/mips.c (machine_function): Remove has_gp_insn_p.
+       Add load_label_length, has_inflexible_gp_insn_p,
+       has_flexible_gp_insn_p, must_initialize_gp_p and
+       must_restore_gp_when_clobbered_p.
+       (mips_expand_call): Don't generate split instructions here.
+       (mips_split_call): Update the call to mips_restore_gp after
+       the above name change.
+       (mips16_cfun_returns_in_fpr_p): Move earlier in file.
+       (mips_find_gp_ref): New function.
+       (mips_insn_has_inflexible_gp_ref_p): Likewise.
+       (mips_cfun_has_inflexible_gp_ref_p): Likewise.
+       (mips_insn_has_flexible_gp_ref_p): Likewise.
+       (mips_cfun_has_flexible_gp_ref_p): Likewise.
+       (mips_function_has_gp_insn): Delete.
+       (mips_global_pointer): Drop the df_regs_ever_live_p check.
+       Use the new functions above.  Only return INVALID_REGNUM
+       for TARGET_ABSOLUTE_JUMPS.
+       (mips_must_initialize_gp_p): New function.
+       (mips_get_cprestore_base_and_offset): New function, extracted from...
+       (mips_cprestore_slot): ...here.  Take a bool parameter.
+       (mips_cfun_has_cprestore_slot_p): New function.
+       (mips_cprestore_address_p): Likewise.
+       (mips_save_gp_to_cprestore_slot): Likewise.
+       (mips_restore_gp): Rename to...
+       (mips_restore_gp_from_cprestore_slot): ...this.  Assert
+       epilogue_completed.  Update the call to mips_cprestore_slot.
+       Test cfun->machine->must_restore_gp_when_clobbered_p.
+       (mips_direct_save_slot_move_p): New function.
+       (mips_emit_save_slot_move): Likewise.
+       (mips_output_cplocal): Test mips_must_initialize_gp_p () instead
+       of cfun->machine->global_pointer.
+       (mips_output_function_prologue): Check mips_must_initialize_gp_p ().
+       (mips_save_reg): Use mips_emit_save_slot_move.
+       (mips_expand_prologue): Set must_initialize_gp_p.
+       Use mips_cfun_has_cprestore_slot_p.  Use gen_potential_cprestore
+       for all cprestore saves.  Emit a use_cprestore instruction after
+       setting up the cprestore slot.
+       (mips_restore_reg): Use mips_emit_save_slot_move.
+       (mips_process_load_label): New function.
+       (mips_load_label_length): Likewise.
+       (mips_output_load_label): Don't return asm: output it here instead.
+       Use mips_process_load_label.
+       (mips_adjust_insn_length): Adjust the length of branch instructions
+       that have length MAX_PIC_BRANCH_LENGTH.
+       (mips_output_conditional_branch): Update the call to
+       mips_output_load_label.  Assume the branch target is OPERANDS[0]
+       rather than OPERANDS[1].  Use MIPS_ABSOLUTE_JUMP for absolute jumps.
+       (mips_output_order_conditional_branch): Swap the meaning of
+       OPERANDS[0] and OPERANDS[1].
+       (mips_variable_issue): Don't count ghost instructions.
+       (mips_expand_ghost_gp_insns): New function.
+       (mips_reorg): Rerun mips_reorg_process_insns if it returns true.
+       (mips_output_mi_thunk): Set must_initialize_gp_p.
+       (mips_eh_uses): New function.
+       * config/mips/predicates.md (cprestore_save_slot_operand)
+       (cprestore_load_slot_operand): New predicates.
+       * config/mips/mips.md (UNSPEC_POTENTIAL_CPRESTORE): New unspec.
+       (UNSPEC_MOVE_GP): Likewise.
+       (UNSPEC_CPRESTORE, UNSPEC_RESTORE_GP, UNSPEC_EH_RETURN)
+       (UNSPEC_CONSTTABLE_INT, UNSPEC_CONSTTABLE_FLOAT): Bump to make room.
+       (CPRESTORE_SLOT_REGNUM): New register.
+       (MAX_PIC_BRANCH_LENGTH): New constant.
+       (jal_macro): Use MIPS_ABSOLUTE_JUMPS.
+       (length): Use MAX_PIC_BRANCH_LENGTH as a placeholder for PIC long
+       branches.  Fix commentary.
+       (loadgp_newabi_<mode>): Change from unspec_volatile to unspec.
+       Only split if mips_must_initialize_gp_p; expand to nothing otherwise.
+       Change type to "ghost".
+       (loadgp_absolute_<mode>): Likewise.
+       (loadgp_rtp_<mode>): Likewise.
+       (copygp_mips16): Likewise.
+       (loadgp_blockage): Remove redundant mode attribute.
+       (potential_cprestore): New instruction.
+       (cprestore): Turn into an unspec set.
+       (use_cprestore): New instruction.
+       (*branch_fp): Swap operands 0 and 1.  Remove redundant mode attribute.
+       (*branch_fp_inverted): Likewise.
+       (*branch_order<mode>): Likewise.
+       (*branch_order<mode>_inverted): Likewise.
+       (*branch_equality<mode>): Likewise.
+       (*branch_equality<mode>_inverted): Likewise.
+       (*branch_bit<bbv><mode>): Likewise.
+       (*branch_bit<bbv><mode>_inverted): Likewise.
+       (*branch_equality<mode>_mips16): Remove redundant mode.
+       (jump): Turn into a define_expand.
+       (*jump_absolute): New instruction.
+       (*jump_pic): Likewise.
+       (*jump_mips16): Rename previously-unnamed pattern.  Remove
+       redundant mode attribute.
+       (restore_gp): Split on epilogue_completed rather than
+       reload_completed.  Change type to "ghost".
+       (move_gp<mode>): New instruction.
+       * config/mips/mips-dsp.md (mips_bposge): Swap operands 0 and 1.
+       Remove redundant mode attribute.
+       * config/mips/mips-ps-3d.md (bc1any4t): Likewise.
+       (bc1any4f, bc1any2t, bc1any2f): Likewise.
+       (*branch_upper_lower, *branch_upper_lower_inverted): Likewise.
+
+2009-09-14  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/41210
+       * config/rs6000/rs6000.c (rs6000_function_value): V2DF and V2DI
+       are returned in the same register (vs34 or v2) that Altivec vector
+       types are returned in.
+       (rs6000_libcall_value): Ditto.
+
+       PR target/41331
+       * config/rs6000/rs6000.c (rs6000_emit_move): Use gen_add3_insn
+       instead of explicit addsi3/adddi3 calls.
+       (rs6000_split_multireg_move): Ditto.
+       (rs6000_emit_allocate_stack): Ditto.
+       (rs6000_emit_prologue): Ditto.
+       (rs6000_output_mi_thunk): Ditto.
+
+       * config/rs6000/rs6000.md (bswapdi*): Don't assume the pointer
+       size is 64 bits if we can use 64-bit registers.
+
+2009-09-14  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * config/bfin/bfin.c (bfin_longcall_p): Don't use short calls for weak
+       symbols.
+
+       From Jie Zhang <jie.zhang@analog.com>:
+       * config/bfin/bfin.c (bfin_expand_prologue): Ask do_link to
+       save FP and RETS with saveall attribute.
+       (bfin_expand_epilogue): Ask do_unlink to restore FP and RETS
+       with saveall attribute.
+
+       * config/bfin/bfin.c (bfin_expand_builtin,
+       case BFIN_BUILTIN_MULT_1X32X32): Force constants to registers for the
+       operands.
+
+       From Jie Zhang <jie.zhang@analog.com>:
+       * config/bfin/bfin.c (bfin_expand_builtin): Initialize icodes
+       before use in two places.
+       * config/bfin/bfin.md (AREG): Define mode iterator.
+       (reload_in, reload_out): Use mode iterator AREG.
+
+2009-09-14  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/41350
+       * dwarf2out.c (dwarf2out_begin_prologue): Adjust non-CFI asm
+       EH personality path.
+
+2009-09-13  Richard Guenther  <rguenther@suse.de>
+           Rafael Avila de Espindola  <espindola@google.com>
+
+       * langhooks-def.h (LANG_HOOKS_EH_RUNTIME_TYPE): Define.
+       (LANG_HOOKS_EH_PERSONALITY): Likewise.
+       (LANG_HOOKS_INITIALIZER): Adjust.
+       (lhd_pass_through_t): Declare.
+       * langhooks.h (struct lang_hooks): Add eh_runtime_type and
+       eh_personality.
+       * langhooks.c (lhd_pass_through_t): New function.
+       * dwarf2out.c (output_call_frame_info, dwarf2out_do_cfi_startproc,
+       dwarf2out_begin_prologue): Use personality from current_function_decl.
+       * expr.h (get_personality_function): Declare.
+       * expr.c (get_personality_function): New function.
+       (build_personality_function): Likewise.
+       * libfuncs.h (libfunc_index): Remove LTI_eh_personality.
+       (eh_personality_libfunc): Remove.
+       * optabs.c (build_libfunc_function): New function split out from ...
+       (init_one_libfunc): ... here.
+       * tree.h (DECL_FUNCTION_PERSONALITY): New.
+       (tree_function_decl): Add personality.
+       (lhd_gcc_personality): Declare.
+       (build_personality_function): Likewise.
+       * tree.c (gcc_eh_personality_decl): New.
+       (lhd_gcc_personality): New function.
+       * except.h (lang_eh_runtime_type): Remove.
+       (enum eh_personality_kind): New.
+       (build_personality_function): Declare.
+       (function_needs_eh_personality): Declare.
+       * except.c (lang_eh_runtime_type): Remove.
+       (function_needs_eh_personality): New function.
+       (add_type_for_runtime): Call lang_hooks.type_for_runtime instead.
+       (sjlj_emit_function_enter, output_function_exception_table):
+       Use personality from current_function_decl.
+       * tree-eh.c (lower_eh_constructs): Set DECL_FUNCTION_PERSONALITY.
+       * tree-inline.c (tree_can_inline_p): Do not inline across different
+       EH personalities.
+       (expand_call_inline): Likewise.  Adjust the callers EH personality.
+       (tree_function_versioning): Copy DECL_FUNCTION_PERSONALITY.
+       * cgraph.c (cgraph_add_new_function): Set DECL_FUNCTION_PERSONALITY.
+       * Makefile.in (cgraph.o): Add $(EXCEPT_H) dependency.
+       (c-parser.o): Likewise
+       * c-tree.h (c_eh_initialized_p): Remove.
+       (c_maybe_initialize_eh): Likewise.
+       * c-decl.c (finish_decl): Don't call c_maybe_initialize_eh.
+       (finish_decl): Don't call c_maybe_initialize_eh.
+       (c_eh_initialized_p): Remove.
+       (c_maybe_initialize_eh): Likewise.
+       * c-parser.c (c_parser_omp_construct): Likewise.
+       (c_parse_file): Initialize exception handling.
+
+2009-09-13  Kai Tietz  <kai.tietz@onevision.com>
+
+       * config.gcc (tm_file): Remove i386/biarch32.h
+       for i?86-w64-mingw* case.
+       (i?86-*-mingw* andx86_64-*-mingw*): Add multilib
+       support.
+       * config.host: Set for x64 mingw the option
+       use_long_long_for_widest_fast_int to yes.
+
+2009-09-13  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree.h (DECL_IGNORED_P): Document further effect for FUNCTION_DECL.
+       * dbxout.c (dbxout_function_end): Do not test DECL_IGNORED_P.
+       (dbxout_begin_function): Likewise.
+       * final.c (dwarf2_debug_info_emitted_p): New predicate.
+       (final_start_function): Do not emit debug info if DECL_IGNORED_P is
+       set on the function.
+       (final_end_function): Likewise.
+       (final_scan_insn): Likewise.
+       (rest_of_handle_final): Likewise.
+       * varasm.c (assemble_start_function): Likewise.
+       * config/rs6000/xcoff.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
+
+2009-09-12  Jason Merrill  <jason@redhat.com>
 
        * dbgcnt.c (dbg_cnt_process_single_pair): constify.
        * opts.c (common_handle_option): constify.
 2009-09-10  Hariharan Sandanagobalane  <hariharan@picochip.com>
 
        * final.c (shorten_branches) : Ignore DEBUG_INSN_P instructions
-        introduced by the VTA branch merge.
+       introduced by the VTA branch merge.
 
 2009-09-10  Uros Bizjak  <ubizjak@gmail.com>
 
 2009-09-10  Hariharan Sandanagobalane  <hariharan@picochip.com>
 
        * config/picochip/picochip.c : Ignore DEBUG_INSN_P instructions
-        introduced by the VTA branch merge.
+       introduced by the VTA branch merge.
 
 2009-09-10  Uros Bizjak  <ubizjak@gmail.com>
 
 2009-09-06  Dmitry Gorbachev  <d.g.gorbachev@gmail.com>
 
        PR c++/41214
-        * unwind-dw2.c (uw_init_context_1): Mark noinline.
+       * unwind-dw2.c (uw_init_context_1): Mark noinline.
        * config/ia64/unwind-ia64.c (uw_init_context_1): Likewise.
        * config/xtensa/unwind-dw2-xtensa.c (uw_init_context_1): Likewise.
 
        this_is_library_file but for the %T constructor.
        (end_going_arg): If this_is_linker_script is set then locate the
        script and insert a --script switch before it
-        (do_spec_2): Initialise this_is_linker_script.
-        (do_spec_1): Likewise.  Handle %T construct.
-        (eval_spec_function): Preserve this_is_linker_script.
+       (do_spec_2): Initialise this_is_linker_script.
+       (do_spec_1): Likewise.  Handle %T construct.
+       (eval_spec_function): Preserve this_is_linker_script.
        * doc/invoke.texi: Document %T construct in spec files.
        * config/m32c/m32c.h (LIB_SPEC): Use it.