OSDN Git Service

* reload.c (find_reloads_address_1): Handle PLUS expressions resulting
[pf3gnuchains/gcc-fork.git] / gcc / ChangeLog
index 37f33bb..2ed4912 100644 (file)
@@ -1,3 +1,369 @@
+2007-02-25  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * reload.c (find_reloads_address_1): Handle PLUS expressions resulting
+       from register elimination as PRE_MODIFY / POST_MODIFY increments.
+       Do not attempt to handle MEM inside auto-inc expressions.
+       * reload1.c (eliminate_regs_1): Do not attempt to handle elimination
+       of a register modified by an auto-inc expression.  However, do handle
+       elimination of a register used as PRE_MODIFY / POST_MODIFY increment.
+       (elimination_effects): Prohibit elimination of a register modified
+       by an auto-inc expression.  Disable register elimination rules whose
+       target register is modified by an auto-inc expression with variable
+       increment.
+
+2007-02-25  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       * tree-ssa-loop-niter.c (compute_estimated_nb_iterations): Fix
+       off-by-one error.
+       (array_at_struct_end_p): New function.
+       (idx_infer_loop_bounds): Use it.
+       (estimate_numbers_of_iterations_loop): Export.
+       * predict.c (predict_loops): Use estimated_loop_iterations_int.
+       Do not use PRED_LOOP_EXIT on exits predicted by # of iterations.
+       (tree_estimate_probability): Call record_loop_exits.
+       * tree-data-ref.c (get_number_of_iters_for_loop): Replaced by ...
+       (estimated_loop_iterations, estimated_loop_iterations_int,
+       estimated_loop_iterations_tree): New functions.
+       (analyze_siv_subscript_cst_affine,
+       compute_overlap_steps_for_affine_1_2,
+       analyze_subscript_affine_affine): Use estimated_loop_iterations_int.
+       (analyze_miv_subscript): Use estimated_loop_iterations_tree.
+       * predict.def (PRED_LOOP_ITERATIONS): Update comment.
+       (PRED_LOOP_ITERATIONS_GUESSED): New.
+       * cfgloop.c (record_loop_exits): Do nothing if there are no loops.
+       * cfgloop.h (estimate_numbers_of_iterations_loop,
+       estimated_loop_iterations_int): Declare.
+
+2007-02-25  Mark Mitchell  <mark@codesourcery.com>
+
+       * doc/extend.texi: Document optional priority argument to
+       constructors and destructors.
+       * tree.c (init_priority_for_decl): Adjust GTY markers.
+       (init_ttree): Use priority-info hash functions for
+       init_priority_for_decl.
+       (tree_map_eq): Rename to ...
+       (tree_map_base_eq): ... this.
+       (tree_map_marked_p): Rename to ...
+       (tree_map_base_marked_p): ... this.
+       (tree_map_base_hash): New function.
+       (decl_init_priority_lookup): Rework.
+       (decl_fini_priority_lookup): New function.
+       (decl_priority_info): New function.
+       (decl_init_priority_insert): Use it.
+       (decl_fini_priority_insert): Likewise.
+       (decl_restrict_base_lookup): Adjust for refactoring of tree_map
+       hierarchy.
+       (decl_restrict_base_insert): Likewise.
+       (decl_debug_expr_insert): Likewise.
+       (decl_value_expr_lookup): Likewise.
+       (decl_value_expr_insert): Likewise.
+       * tree.h (priority_type): New type.
+       (decl_init_priority_lookup): Use priority_type.
+       (decl_fini_priority_lookup): New function.
+       (decl_init_priority_insert): Use priority_type.
+       (decl_fini_priority_insert): New function.
+       (DECL_HAS_INIT_PRIORITY): Tweak comments.
+       (DECL_INIT_PRIORITY): Likewise.
+       (SET_DECL_INIT_PRIORITY): Add comment.
+       (DECL_FINI_PRIORITY): New macro.
+       (SET_DECL_FINI_PRIORITY): Likewise.
+       (DEFAULT_INIT_PRIORITY): Document.
+       (MAX_INIT_PRIORITY): Likewise.
+       (MAX_RESERVED_INIT_PRIORITY): Likewise.
+       (tree_map_base): New type.
+       (tree_map_base_eq): New function.
+       (tree_map_base_hash): Likewise.
+       (tree_map_base_marked_p): Likewise.
+       (tree_map): Inherit from tree_map_base.
+       (tree_map_eq): Make it a macro.
+       (tree_map_marked_p): Likewise.
+       (tree_int_map): Inherit from tree_map_base.
+       (tree_int_map_eq): Make it a macro.
+       (tree_int_map_hash): Likewise.
+       (tree_int_map_marked_p): Likewise.
+       (tree_priority_map): New type.
+       (tree_priority_map_eq): New macro.
+       (tree_priority_map_hash): Likewise.
+       (tree_priority_map_marked_p): Likewise.
+       * varasm.c (emults_decl): Adjust for refactoring of tree_map
+       hierarchy.
+       (emutls_common_1): Likewise.
+       * lambda-code.c (replace_uses_equiv_to_x_with_y): Likewise.
+       * tree-ssa-structalias.c (heapvar_lookup): Adjust for refactoring
+       of tree_map hierarchy.
+       * tree-cfg.c (move_stmt_r): Likewise.
+       (new_label_mapper): Likewise.
+       * c-tree.h (c_expand_body): Move to ...
+       * c-common.h (c_expand_body): ... here.
+       * c-decl.c (c_expand_body): Move to ...
+       * c-common.c (c_expand_body): ... here.
+       (c_common_attribute_table): Allow 1 argument for the constructor
+       and destructor attributes.
+       (get_priority): New function.
+       (handle_constructor_attribute): Set DECL_INIT_PRIORITY.
+       (handle_destructor_attribute): Set DECL_FINI_PRIORITY.
+
+2007-02-24  Jan Hubicka  <jh@suse.cz>
+
+       PR middle-end/30509
+       * tree-inline.c (copy_bb): Produce exact copy of EH info when copying for inlining.
+
+2007-02-24  Uros Bizjak  <ubizjak@gmail.com>
+           Jan Hubicka  <jh@suse.cz>
+
+       PR target/30778
+       * i386.c (counter_mode): New function.
+       (expand_set_or_movmem_via_loop): Use it.
+       (expand_movmem_epilogue): Likewise; fix pasto.
+       (ix86_expand_movmem): Do emit guard even for constant counts.
+       (ix86_expand_setmem): Likewise.
+
+2007-02-25  Nick Clifton  <nickc@redhat.com>
+
+       * config/frv/frv.h (ASM_OUTPUT_CASE_LABEL): Delete.
+       (JUMP_TABLES_IN_TEXT_SECTION): Define.
+
+2007-02-24  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/30770
+       * config/i386/i386.md (expand_movmem_epilogue): Fix typo, mask
+       count argument with 0x10, not with 0x16.
+       (expand_setmem_epilogue): Ditto.
+
+2007-02-24  Mike Stump  <mrs@apple.com>
+
+       * config/i386/i386.c (output_pic_addr_const): Stubify optimized
+       symbols.
+
+2007-02-24  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/30951
+       * fold-const.c (fold_binary): Fold x +- CST op x for
+       EQ_EXPR and NE_EXPR.
+
+2007-02-24  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.md (muldi3): Force subregs to registers in 64-bit expander.
+
+2007-02-24  Jan Hubicka  <jh@suse.cz>
+
+       * cgraphunit.c (decide_is_function_needed): Honor
+       -fkeep-inline-functions.
+
+2007-02-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.c (fold_builtin_modf): New.
+       (fold_builtin_2): Use it.
+
+2007-02-24  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * loop-iv.c (implies_p): Detect additional cases where A implies B.
+       (determine_max_iter): Take additional LOOP arg; all callers changed.
+       Lose broken logic dealing with PLUS.  Try to limit the upper bound by
+       one using simplifications.
+       (simplify_using_initial_values): Return if the expression becomes
+       invalid due to altered regs.
+
+2007-02-23  DJ Delorie  <dj@redhat.com>
+
+       * doc/tm.h (BIGGEST_ALIGNMENT): Clarify the purpose of this macro.
+
+2007-02-23  Mike Stump  <mrs@apple.com>
+
+       * tlink.c (scan_linker_output): Parse linker messages from
+       darwin9's linker better.
+
+2007-02-23  Steve Ellcey  <sje@cup.hp.com>
+
+       PR debug/29614
+       * varpool.c (varpool_assemble_pending_decls):  Set
+       varpool_last_needed_node to null.
+
+2007-02-23  DJ Delorie  <dj@redhat.com>
+
+       * config/i386/i386.c (ix86_data_alignment): Don't specify an
+       alignment bigger than the object file can handle.
+
+2007-02-23  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/30825
+       * config/i386/i386.md (*movdi_1_rex64, zero_extendsidi2_32,
+       zero_extendsidi2_rex64): Penalize MMX register<->memory moves.
+       (*movsf_1): Penalize MMX moves.
+
+2007-02-23  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * config/bfin/bfin.md (doloop_end): Fail for loops that can iterate
+       2^32-1 or more times unless flag_unsafe_loop_optimizations.
+
+       * loop-iv.c (determine_max_iter): Moved in front of its sole user.
+
+2007-02-23  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.c (fold_builtin_logb, fold_builtin_significand): New.
+       (fold_builtin_1): Use them.
+       * fold-const.c (tree_expr_nonnegative_warnv_p): Handle
+       BUILT_IN_SIGNIFICAND.
+
+2007-02-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/i386/i386.c (bdesc_1arg): Initialize
+       IX86_BUILTIN_MOVSHDUP and IX86_BUILTIN_MOVSLDUP with
+       "__builtin_ia32_movshdup" and "__builtin_ia32_movsldup".
+       (ix86_init_mmx_sse_builtins): Remove IX86_BUILTIN_MOVSHDUP
+       and IX86_BUILTIN_MOVSLDUP.
+
+2007-02-22  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR rtl-optimization/30841
+       * fwprop.c (propagate_rtx_1): Accept a VOIDmode replacement address.
+
+2007-02-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.c (fold_builtin_frexp): New.
+       (fold_builtin_2): Use it.
+
+2007-02-22  Mark Mitchell  <mark@codesourcery.com>
+
+       * doc/invoke.texi (Spec Files): Document getenv spec function.
+
+       * gcc.c (getenv_spec_function): New function.
+       (static_spec_functions): Add it.
+       * config/vxworks.h (VXWORKS_TARGET_DIR): Remove.
+       (VXWORKS_ADDITIONAL_CPP_SPEC): Use getenv to find the VxWorks
+       header files.
+
+2007-02-22  Michael Matz  <matz@suse.de
+
+       PR c++/29433
+       * dwarf2out.c (add_AT_string): Call ggc_strdup once per string.
+       (type_tag): Use lang_hooks.dwarf_name instead of DECL_NAME.
+
+2007-02-22  Ian Lance Taylor  <iant@google.com>
+
+       PR debug/30898
+       * dwarf2out.c (concatn_mem_loc_descriptor): New static function.
+       (mem_loc_descriptor): Call it.
+
+2007-02-22  Zdenek Dvorak  <dvorakz@suse.cz>
+           Ira Rosen  <irar@il.ibm.com>
+
+       * tree-data-ref.c (ptr_ptr_may_alias_p): Take alias sets into account.
+
+2007-02-22  Ira Rosen  <irar@il.ibm.com>
+
+       PR tree-optimization/30843
+       * tree-vect-transform.c (vect_transform_loop): Remove strided scalar 
+       stores only after all the group is vectorized.
+
+2007-02-22  Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/30858
+       * tree-vectorizer.c (vect_is_simple_reduction): Check that the stmts
+       in the reduction cycle have a single use in the loop.
+       * tree-vectorizer.h (relevant): Add documentation.
+
+2007-02-20  Mike Stump  <mrs@apple.com>
+
+       * configure.ac (powerpc*-*-darwin*): #include <sys/cdefs.h>.
+       * configure: Regenerate.
+
+2007-02-21  Trevor Smigiel  <trevor_smigiel@playstation.sony.com>
+
+       Change the defaults of some parameters and options.
+       * config/spu/spu-protos.h (spu_optimization_options): Declare.
+       * config/spu/spu.c (spu_optimization_options): Add.
+       (spu_override_options): Change params in spu_optimization_options.
+       * config/spu/spu.h (OPTIMIZATION_OPTIONS): Define.
+
+       Register 127 is only 16 byte aligned when used as a frame pointer.
+       * config/spu/spu-protos.h (spu_init_expanders): Declare.
+       * config/spu/spu.c (spu_expand_prologue): Set REGNO_POINTER_ALIGN for
+       HARD_FRAME_POINTER_REGNUM.
+       (spu_legitimate_address):  Use regno_aligned_for_reload.
+       (regno_aligned_for_load):  HARD_FRAME_POINTER_REGNUM is only 16 byte
+       aligned when frame_pointer_needed is true.
+       (spu_init_expanders): New.  Set alignment of HARD_FRAME_POINTER_REGNUM
+       to 8 bits.
+       * config/spu/spu.h (INIT_EXPANDERS): Define.
+
+       Make sure shift and rotate instructions have valid immediate operands.
+       * config/spu/predicates.md (spu_shift_operand): Remove.
+       * config/spu/spu.c (print_operand): Add [efghEFGH] modifiers.
+       * config/spu/constraints.md (W, O): Extend range.
+       * config/spu/spu.md (umask, nmask): Define.
+       (ashl<mode>3, ashldi3, ashlti3_imm, shlqbybi_ti, shlqbi_ti, shlqby_ti,
+       lshr<mode>3, rotm_<mode>, lshr<mode>3_imm, rotqmbybi_<mode>,
+       rotqmbi_<mode>, rotqmby_<mode>, ashr<mode>3, rotma_<mode>,
+       rotl<mode>3, rotlti3, rotqbybi_ti, rotqby_ti, rotqbi_ti): Use
+       spu_nonmem_operand instead of spu_shift_operands.  Use new modifiers.
+       (lshr<mode>3_reg):  Fix rtl description.
+
+       Make sure mulhisi immediate operands are valid.
+       * config/spu/predicates.md (imm_K_operand): Add.
+       * config/spu/spu.md (mulhisi3_imm, umulhisi3_imm): Use imm_K_operand.
+
+       Generate constants using fsmbi and andi.
+       * config/spu/spu.c (enum immediate_class): Add IC_FSMBI2.
+       (print_operand, spu_split_immediate, classify_immediate,
+       fsmbi_const_p): Handle IC_FSMBI2.
+
+       Correctly handle a CONST_VECTOR containing symbols.
+       * config/spu/spu.c (print_operand): Handle HIGH correctly.
+       (spu_split_immediate): Split CONST_VECTORs with -mlarge-mem.
+       (immediate_load_p): Allow symbols that use 2 instructions to create.
+       (classify_immediate, spu_builtin_splats):  Don't accept a CONST_VECTOR
+       with symbols when flag_pic is set.
+       (const_vector_immediate_p): New.
+       (logical_immediate_p, iohl_immediate_p, arith_immediate_p): Don't
+       accept a CONST_VECTOR with symbols.
+       (spu_legitimate_constant_p): Use const_vector_immediate_p.  Don't
+       accept a CONST_VECTOR with symbols when flag_pic is set.  Handle HIGH
+       correctly.
+       * config/spu/spu.md (high, low): Delete.
+       (low_<mode>): Define.
+
+       Remove INTRmode and INTR_REGNUM, which didn't work.
+       * config/spu/spu.c (spu_conditional_register_usage): Remove reference
+       of INTR_REGNUM.
+       * config/spu/spu-builtins.md (spu_idisable, spu_ienable, set_intr,
+       set_intr_pic, set_intr_cc, set_intr_cc_pic, set_intr_return, unnamed
+       peephole2 pattern): Don't use INTR or 131.
+       (movintrcc): Delete.
+       * config/spu/spu.h (FIRST_PSEUDO_REGISTER, FIXED_REGISTERS,
+       CALL_USED_REGISTERS, REGISTER_NAMES, INTR_REGNUM): Remove INTR_REGNUM.
+       * config/spu/spu.md (UNSPEC_IDISABLE, UNSPEC_IENABLE): Remove.
+       (UNSPEC_SET_INTR): Add.
+       * config/spu/spu-modes.def (INTR): Remove.
+
+       More accurate warnings about run-time relocations.
+       * config/spu/spu.c (reloc_diagnostic): Test in_section.
+
+       Correctly warn about immediate arguments to specific intrinsics.
+       * config/spu/spu.c (spu_check_builtin_parm): Handle CONST_VECTORs.
+       (spu_expand_builtin_1): Call spu_check_builtin_parm before checking
+       the instruction predicate.
+
+       Fix tree check errors with latest update.
+       * config/spu/spu.c (expand_builtin_args, spu_expand_builtin_1): Use
+       CALL_EXPR_ARG.
+       (spu_expand_builtin): Use CALL_EXPR_FN.
+
+       Add missing specific intrinsics.
+       * config/spu/spu-builtins.def: Add si_bisled, si_bisledd and
+       si_bislede.
+       * config/spu/spu_internals.h: Ditto.
+
+       Fix incorrect operand modifiers.
+       * config/spu/spu-builtins.md (spu_mpy, spu_mpyu):  Remove use of %H.
+       * config/spu/spu.md (xor<mode>3):  Change %S to %J.
+
+       Optimize one case of zero_extend of a vec_select.
+       * config/spu/spu.md (_vec_extractv8hi_ze):  Add.
+
+       Accept any immediate for hbr.
+       * config/spu/spu.md (hbr):  Change s constraints to i.
+
 2007-02-21  Paul Brook  <paul@codesourcery.com>
 
        * config/arm/arm.c (thumb2_final_prescan_insn): Don't incrememnt
        intrinsics.
 
 2007-02-20  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
-            DJ Delorie <dj@redhat.com>
+           DJ Delorie <dj@redhat.com>
 
        PR other/30824
        * diagnostic.c (diagnostic_count_diagnostic): Move -Werror logic to...