OSDN Git Service

PR rtl-optimization/51051
[pf3gnuchains/gcc-fork.git] / gcc / ChangeLog
index fabb1da..a7fb9ea 100644 (file)
@@ -1,3 +1,235 @@
+2011-11-16  Alan Modra  <amodra@gmail.com>
+
+       PR rtl-optimization/51051
+       PR bootstrap/51086
+       * function.c (thread_prologue_and_epilogue_insns): Guard
+       emitting return with single_succ_p test.
+
+2011-11-15  Joern Rennecke  <joern.rennecke@embecosm.com>
+
+       * config/epiphany/epiphany.md (mov<mode>cc): Fix code to
+       get mode from CMP_OP1 if CMP_OP0 is VOIDmode.
+
+2011-11-15  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/sse.md (vec_pack_trunc_v2df): Optimize sequence for AVX.
+       (vec_pack_sfix_trunc_v2df): Ditto.
+       (vec_pack_sfix_v2df): Ditto.
+       (vec_pack_sfix_trunc_v4df): Generate fix_truncv4dfv4si2 and
+       avx_vec_concatv8si patterns.
+       (vec_pack_sfix_v4df): Generate avx_cvtpd2dq256 and
+       avx_vec_concatv8si patterns.
+
+2011-11-15  Torvald Riegel  <triegel@redhat.com>
+
+       * c-parser.c (c_parser_transaction_expression): Require parentheses
+       when parsing transaction expressions.
+
+2011-11-15  Tristan Gingold  <gingold@adacore.com>
+
+       * incpath.c (get_added_cpp_dirs): New function.
+       * incpath.h (get_added_cpp_dirs): Declare.
+       * config/vms/vms-c.c (vms_c_register_includes): New function.
+       (vms_std_modules): New variable.
+       * config/vms/vms.h (TARGET_EXTRA_INCLUDES): Define.
+       (vms_c_register_includes): Declare.
+
+2011-11-15  Tristan Gingold  <gingold@adacore.com>
+
+       * c-family/c-pragma.h (pragma_extern_prefix): Declare.
+       * c-family/c-pragma.c (pragma_extern_prefix): Make it public.
+       * config/vms/vms-c.c (saved_extern_prefix): New variable.
+       (vms_pragma_extern_prefix): New function.
+       (vms_c_register_pragma): Register vms_pragma_extern_prefix.
+
+2011-11-15  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/49868
+       * config/avr/avr.h (ADDR_SPACE_PGM): New address spaces.
+       (REGISTER_TARGET_PRAGMAS): New define.
+       * config/avr/avr-protos.h (avr_mem_pgm_p): New.
+       (avr_load_libgcc_p): New.
+       (avr_register_target_pragmas): New.
+       (asm_output_external_libcall): Remove.
+       (avr_log_t): Add field "progmem".  Order alphabetically.
+       * config/avr/avr-log.c (avr_log_set_avr_log): Set avr_log.progmem.
+       * config/avr/avr-c.c (langhooks.h): New include.
+       (avr_register_target_pragmas): New function. Register address
+       space __pgm.
+       (avr_cpu_cpp_builtins): Add built-in define __PGM.
+
+       * config/avr/avr.c: Include "c-family/c-common.h".
+       (TARGET_LEGITIMATE_ADDRESS_P): Remove define.
+       (TARGET_LEGITIMIZE_ADDRESS): Remove define.
+       (TARGET_ADDR_SPACE_SUBSET_P): Define to...
+       (avr_addr_space_subset_p): ...this new static function.
+       (TARGET_ADDR_SPACE_CONVERT): Define to...
+       (avr_addr_space_convert): ...this new static function.
+       (TARGET_ADDR_SPACE_ADDRESS_MODE): Define to...
+       (avr_addr_space_address_mode): ...this new static function.
+       (TARGET_ADDR_SPACE_POINTER_MODE): Define to...
+       (avr_addr_space_pointer_mode): ...this new static function.
+       (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Define to...
+       (avr_addr_space_legitimate_address_p): ...this new static function.
+       (TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Define to...
+       (avr_addr_space_legitimize_address): ...this new static function.
+       (avr_mode_code_base_reg_class): Handle address spaces.
+       (avr_regno_mode_code_ok_for_base_p): Ditto.
+       (lpm_addr_reg_rtx, lpm_reg_rtx, all_regs_rtx): New static variables.
+       (avr_option_override): Initialize them.
+       (output_reload_in_const): Use all_regs_rtx. Fix signedness of loop
+       variables.
+       (avr_pgm_segment): New static function.
+       (avr_decl_pgm_p, avr_mem_pgm_p): New static functions.
+       (avr_out_lpm, avr_out_lpm_no_lpmx): New static functions.
+       (output_movqi, output_movhi, output_movsisf, avr_out_movpsi): Call
+       avr_out_lpm to handle loads from progmem.
+       (avr_load_libgcc_p): New static function.
+       (avr_progmem_p): Test if decl is in flash.
+       (avr_pgm_pointer_const_p): New static function.
+       (avr_nonconst_pointer_addrspace): New static function.
+       (avr_pgm_check_var_decl): New static function.
+       (avr_insert_attributes): Use it.  Change error message to report
+       cause (progmem or address space) when code wants to write to flash.
+       (avr_section_type_flags): Unset section flag SECTION_BSS for
+       data in progmem.
+
+       * config/avr/predicates.md (nop_general_operand): New predicate.
+       (nox_general_operand): New predicate.
+       * config/avr/avr.md (LPM_REGNO): New define_constant.
+       (load<mode>_libgcc): New expander.
+       (*load.<mode>.libgcc): New insn.
+       (mov<mode>): Handle loads from non-generic AS.
+       (movmemhi): Ditto.  Propagate address space information to newly
+       created MEM.
+       (movqi_insn, *movhi, *movpsi, *movsi, *movsf): Change predicate #1
+       to nox_general_operand.
+       (ashrqi3, ashrhi3, ashrsi3): Change predicate #1 to
+       nop_general_operand.
+       (ashlqi3, *ashlqi3, ashlhi3, ashlsi3): Ditto.
+       (lshrqi3, *lshrqi3, lshrhi3, lshrsi3): Ditto.
+       (split-lpmx): New split.
+       (*ashlhi3_const, *ashlsi3_const, *ashrhi3_const, *ashrsi3_const,
+       *lshrhi3_const, *lshrsi3_const): Indent, unquote C.
+
+2011-11-15  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+       * ipa-cp.c (ipa_value_from_jfunc): Make global.
+       (ipa_cst_from_jfunc): Remove, use ipa_value_from_jfunc instead.
+       (get_indirect_edge_target): Rename, make global.
+       (devirtualization_time_bonus, estimate_local_effects,)
+       (ipcp_discover_new_direct_edges): Update.
+       * ipa-inline-analysis.c (evaluate_conditions_for_edge):
+       Generalize to also handle types.  Rename to ...
+       (evaluate_properties_for_edge): Use instead of
+       evaluate_conditions_for_edge.
+       (estimate_edge_devirt_benefit): New function.
+       (estimate_calls_size_and_time): Use it.
+       (estimate_node_size_and_time, estimate_ipcp_clone_size_and_time,)
+       (inline_merge_summary): Update.
+       (do_estimate_edge_time, do_estimate_edge_growth): Update.  Calculate
+       parameter information at the call site and pass it on to subroutines.
+       * tree-inline.c (estimate_num_insns): Distinguish between direct and
+       indirect calls.
+       (init_inline_once): Set size and time costs or indirect calls.
+       * tree-inline.h (eni_weights): Add indirect_call_cost.
+
+2011-11-15  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/51005
+       * tree-ssa-tail-merge.c (delete_basic_block_same_succ): Rename to
+       mark_basic_block_deleted.
+       (update_worklist): Inline purge_bbs.
+       (purge_bbs, unlink_virtual_phi, update_vuses, vop_at_entry)
+       (delete_block_update_dominator_info): Remove.
+       (replace_block_by): Remove update_vops parameter.  Partially evaluate
+       for update_vops == false.
+       (apply_clusters): Remove update_vops parameter.  Remove update_vops
+       argument in replace_block_by call.
+       (update_debug_stmts): Remove MAY_HAVE_DEBUG_STMTS test.
+       (tail_merge_optimize): Remove update_vops argument to apply_clusters.
+       Remove call to purge_bbs.  Add calls to calculate_dominance_info and
+       free_dominance_info.  Add MAY_HAVE_DEBUG_STMTS  before calling
+       update_debug_stmts.  Mark vop var for renaming, if necessary.
+
+2011-11-15  Bernd Schmidt  <bernds@codesourcery.com>
+
+       PR rtl-optimization/51051
+       * cfgrtl.c (cfg_layout_can_merge_blocks_p): Return FALSE if the
+       move would cause fallthrough into the exit block.
+
+2011-11-14  Richard Henderson  <rth@redhat.com>
+
+       * config/rs6000/rs6000.c (emit_load_locked): Assert the mode is
+       handled.
+       (emit_store_conditional): Likewise.
+       (rs6000_pre_atomic_barrier, rs6000_post_atomic_barrier): New.
+       (rs6000_adjust_atomic_subword): New.
+       (rs6000_mask_atomic_subword, rs6000_finish_atomic_subword): New.
+       (rs6000_expand_atomic_op): Rename from rs6000_emit_sync; rewrite
+       for pre-reload expansion.
+       (rs6000_split_compare_and_swap, rs6000_split_compare_and_swapqhi,
+       rs6000_expand_compare_and_swapqhi): Merge into ...
+       (rs6000_expand_atomic_compare_and_swap): ... here.  New function.
+       rs6000_split_lock_test_and_set; expand immediately.  Handle
+       QImode and HImode.
+       * config/rs6000/rs6000.md (UNSPEC_LWSYNC): Move and rename
+       from UNSPECV_LWSYNC.
+       * config/rs6000/sync.md (fetchopsi_constr, fetchopdi_constr): Remove.
+       (mem_thread_fence): New.
+       (hwsync): Rename from memory_barrier.
+       (*hwsync): Rename from *sync_internal.
+       (lwsync, *lwsync): Mirror hwsync implementation.
+       (isync): Don't reference memory.
+       (loadsync): New.
+       (atomic_load<INT>, atomic_store<INT>): New.
+       (ATOMIC): New mode iterator.
+       (load_locked<ATOMIC>): Rename from load_locked_<GPR>.
+       (store_conditional<ATOMIC>): Rename from store_conditional_<GPR>.
+       (sync_compare_and_swap<GPR>): Remove.
+       (sync_compare_and_swaphi, sync_compare_and_swapqi): Remove.
+       (sync_compare_and_swapqhi_internal): Remove.
+       (sync_lock_test_and_set<GPR>): Remove.
+       (sync_<FETCHOP><INT1>): Remove.
+       (*sync_<FETCHOP>si_internal, *sync_<FETCHOP>di_internal): Remove.
+       (sync_nand<INT1>, *sync_nand<GPR>_internal): Remove.
+       (sync_old_<FETCHOP><GPR>): Remove.
+       (*sync_old_<FETCHOP>si_internal): Remove.
+       (*sync_old_<FETCHOP>di_internal): Remove.
+       (sync_old_nand<INT1>): Remove.
+       (*sync_old_nand<GPR>_internal): Remove.
+       (sync_new_<FETCHOP><GPR>): Remove.
+       (*sync_new_<FETCHOP>si_internal): Remove.
+       (*sync_new_<FETCHOP>di_internal): Remove.
+       (sync_new_nand<INT1>): Remove.
+       (*sync_new_nand<GPR>_internal): Remove.
+       (*atomic_andsi, *atomic_anddi): Remove.
+       (*sync_addshort_internal, *sync_subshort_internal): Remove.
+       (*sync_andsi_internal, *sync_boolsi_internal): Remove.
+       (*sync_boolcshort_internal): Remove.
+       (sync_lock_release<INT1>): Remove.
+       (atomic_compare_and_swap<INT1>): New.
+       (atomic_exchange<INT1>): New.
+       (atomic_<FETCHOP><INT1>, atomic_nand<INT1>): New.
+       (atomic_fetch_<FETCHOP><INT1>, atomic_fetch_nand<INT1>): New.
+       (atomic_<FETCHOP>_fetch<INT1>, atomic_nand_fetch<INT1>): New.
+
+2011-11-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/sse.md (round<mode>2): Use register_operand for
+       operand 1 predicate.
+       (round<mode>2_sfix): Ditto.
+       (round<mode>2_vec_pack_sfix): Ditto for operand 1 and operand 2.
+
+2011-11-14  Nathan Sidwell  <nathan@acm.org>
+
+       * gcov.c (canonicalize_name): Protect use of S_ISLNK.
+
+2011-11-14  Jan Hubicka  <jh@suse.cz>
+
+       PR target/51126
+       * config/i386/i386.c (core cost model): Correct pasto.
+
 2011-11-14  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/sse.md (round<mode>2_sfix): New expander.