+2006-03-23 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
+
+ * haifa-sched.c (choose_ready): Fix type of the local variable.
+ Move local variables. Add comment.
+ (check_reg_live): Change signature. Make callable from debugger.
+ * sched-int.h (check_reg_live): Update signature.
+ * sched-ebb.c (check_reg_live): Update parameters.
+ * sched-rgn.c (check_reg_live): Ditto.
+ (region_head_or_leaf_p): Check pointer before dereferencing.
+ * config/ia64/ia64.c (ia64_set_sched_flags): Disable data speculation
+ before reload on optimization levels below 1.
+
+2006-03-23 Richard Henderson <rth@redhat.com>
+
+ * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject
+ tls symbols.
+
+ PR target/26347
+ * config/alpha/predicates.md (local_symbolic_operand): Reject
+ weak symbols.
+
+2006-03-23 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR tree-opt/26795
+ * tree-ssa-pre.c (create_value_expr_from): Don't reject
+ expressions which have overflowed constants.
+
+2006-03-23 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * cse.c (cse_end_of_basic_block): Do not check for LOOP_END note.
+
+2006-03-23 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * cfgloopmanip.c (create_loop_notes): Removed.
+ * final.c (final_scan_insn): Do not handle loop notes.
+ * jump.c (squeeze_notes): Ditto.
+ * cfglayout.c (skip_insns_after_block,
+ duplicate_insn_chain): Ditto.
+ * cfgcleanup.c (rest_of_handle_jump2): Do not call
+ create_loop_notes.
+ * cfgloop.h (create_loop_notes): Declaration removed.
+
+2006-03-23 Richard Sandiford <richard@codesourcery.com>
+
+ * varasm.c (output_constant_pool): Restore fnname and fndecl
+ arguments.
+ (assemble_start_function): Adjust call accordingly.
+ (assemble_end_function): Likewise.
+
+2006-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR mudflap/26790
+ * tree-mudflap.c (mudflap_finish_file): Skip erroneous objects.
+
+ PR mudflap/26789
+ * tree-mudflap.c (mf_xform_derefs_1): Return early on error_mark_node.
+
+2006-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR driver/22600
+ * system.h (ICE_EXIT_CODE): New macro.
+ * diagnostic.c (diagnostic_count_diagnostic): Exit with ICE_EXIT_CODE.
+ (diagnostic_action_after_output): Likewise.
+ * gcc.c (fatal_ice): New function.
+ (execute): Use it instead of fatal.
+ (fancy_abort): Likewise.
+ * doc/invoke.texi (-pass-exit-codes): Document return code for ICEs.
+
+2006-03-22 Jeff Law <law@redhat.com>
+
+ * loop-unroll.c (analyze_iv_to_split_insn): Handle
+ iv_analyze_result returning false.
+
+2006-03-22 Jie Zhang <jie.zhang@analog.com>
+
+ * config/bfin/bfin.h (ASM_FORMAT_PRIVATE_NAME): Remove.
+
+2006-03-22 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/26084
+ * except.c (duplicate_eh_regions_0): New.
+ (duplicate_eh_region_1): Duplicate the children of the node as
+ well as the node itself. Link them up properly.
+ (duplicate_eh_region_2): Merge into ...
+ (duplicate_eh_regions): ... here. Take copy_region argument, and
+ copy only a sub-tree if asked. Simplify copying and fixup.
+ (eh_region_outer_p): New.
+ * except.h (duplicate_eh_regions): Update decl.
+ (eh_region_outer_p): Declare.
+ * omp-low.c (lower_omp_single): Fix eh region placement wrt OMP_RETURN.
+ (lower_omp_master): Likewise.
+ (lower_omp_ordered): Likewise.
+ * tree-cfg.c (struct move_stmt_d): Add new_label_map.
+ (move_stmt_r): Use it to remap labels. Handle recursion vs
+ remap_decls_p properly.
+ (move_block_to_fn): Pass in new_label_map. Remap RESX_EXPR.
+ (find_outermost_region_in_block): New.
+ (new_label_mapper): New.
+ (move_sese_region_to_fn): Copy eh information to the new function
+ properly.
+ * tree-inline.c (copy_cfg_body): Update for new duplicate_eh_regions
+ argument.
+ * tree-pretty-print.c (dump_generic_node): Dump RESX_EXPR region
+ number.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+
+ * doc/md.texi (-mshared): Mention that -mshared code can be linked
+ into shared libraries.
+
+2006-03-22 Richard Sandiford <richard@codesourcery.com>
+
+ * doc/md.texi: Refer to i386/constraints.md instead of
+ i386/predicates.md.
+ * config/i386/constraints.md: New file, extracted from...
+ * config/i386/predicates.md: ...here.
+ * config/i386/i386.md: Include constraints.md.
+
+2006-03-21 Jason Merrill <jason@redhat.com>
+
+ * builtins.c (expand_builtin_fork_or_exec): Fix pasto.
+
+ PR middle-end/20297
+ * expr.c (init_block_move_fn): Force default visibility.
+ (init_block_clear_fn): Likewise.
+ * builtins.c (expand_builtin_fork_or_exec): Likewise.
+ * targhooks.c (default_external_stack_protect_fail): Likewise.
+
+2006-03-21 Richard Sandiford <richard@codesourcery.com>
+
+ * config/mips/predicates.md (const_call_insn_operand): Allow direct
+ calls to locally-defined functions if TARGET_ABSOLUTE_ABICALLS.
+ * config/mips/mips.md (jal_macro): Test TARGET_ABSOLUTE_ABICALLS.
+ Use TARGET_OLDABI instead of !TARGET_NEWABI.
+ (loadgp): Use mips_current_loadgp_style.
+ (loadgp_noshared): New pattern.
+ (sibcall_internal): Use MIPS_CALL.
+ (sibcall_value_internal): Likewise.
+ (sibcall_value_multiple_internal): Likewise.
+ (call_internal): Likewise.
+ (call_value_internal): Likewise.
+ (call_value_multiple_internal): Likewise.
+ (call_split): Use MIPS_CALL and add an 'S' constraint.
+ (call_value_split): Likewise.
+ (call_value_multiple_split): Likewise.
+ * config/mips/mips.opt (-mabicalls): Tweak docstring.
+ (-mshared): New option.
+ * config/mips/mips-protos.h (mips_loadgp_style): New enum.
+ (mips_current_loadgp_style): Declare.
+ * config/mips/mips.c (mips_classify_symbol): Avoid using
+ SYMBOL_GOT_LOCAL if TARGET_ABSOLUTE_ABICALLS. Use SYMBOL_GENERAL
+ rather than SYMBOL_GOT_GLOBAL for locally-binding symbols if
+ TARGET_ABSOLUTE_ABICALLS.
+ (override_options): Adjust comments. Improve the warning that is
+ issued when -mabicalls and -G are used together.
+ (mips_file_start): Remove comment.
+ (mips_current_loadgp_style): New function.
+ (mips_gnu_local_gp): New variable.
+ (mips_emit_loadgp): Use mips_current_loadgp_style. Handle
+ LOADGP_ABSOLUTE.
+ (mips_output_function_prologue): Use mips_current_laodgp_style.
+ (mips_expand_prologue): Call mips_emit_loadgp before emitting
+ the cprestore instruction.
+ (mips_extra_live_on_entry): Fix reversed test. Don't make $25
+ live for TARGET_ABSOLUTE_ABICALLS.
+ * config/mips/mips.h (TARGET_ABSOLUTE_ABICALLS): New macro.
+ (ASM_SPEC): Pass down -mshared and -mno-shared.
+ (MIPS_CALL): New macro.
+ * config/mips/netbsd.h (TARGET_OS_CPP_BUILTINS): Remove __ABICALLS__
+ definition.
+ * doc/invoke.texi (-mabicalls): Update documentation.
+ (-mshared): Document.
+
+2006-03-21 Steve Ellcey <sje@cup.hp.com>
+
+ * config/ia64/unwind-hpux.c: New file.
+ * config/ia64/t-hpux: Add unwind-hpux.c to libgcc.
+
+2006-03-21 Steve Ellcey <sje@cup.hp.com>
+
+ PR libgomp/26384
+ * config/pa/pa64-hpux.h (LIB_SPEC): Fix for -mt and -pthread options.
+
+2006-03-21 Jeff Law <law@redhat.com>
+
+ * tree-vrp.c (extract_range_from_unary_expr): Derive ranges for
+ type conversions of a VR_VARYING source to a wider type.
+
+2006-03-21 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * config.gcc (i[34567]86-*-solaris2*): Add config/sol2-10.h to
+ tm_file on Solaris 10 and later.
+ (sparc64-*-solaris2*): Likewise.
+ (sparc-*-solaris2*): Likewise.
+ * config/sol26.h: Rename to config/sol2-6.h.
+ * config/sol2-10.h: New file.
+
+2006-03-21 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR tree-opt/26781
+ * tree-ssa-pre.c (create_component_ref_by_pieces):
+ Handle STRING_CST.
+
+2006-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/26690
+ * tree.c (get_callee_fndecl): If CALL is error_mark_node,
+ return it immediately.
+
+2006-03-21 Michael Matz <matz@suse.de>
+
+ * genautomata.c (<struct state>, num_out_arcs, presence_signature):
+ New members.
+ (remove_arc, add_arc): Update num_out_arcs member.
+ (set_out_arc_insns_equiv_num): Returns nothing instead of number
+ of out arcs.
+ (cache_presence): New function.
+ (compare_states_for_equiv): New function.
+ (state_is_differed): Don't take number of outargs, adjust callers.
+ Use new invariant for speeding up.
+ (init_equiv_class): Create initial classes based on sorted
+ input.
+ (partition_equiv_class): Don't track out_arcs_num.
+ (evaluate_equiv_classes): Call cache_presence on all states and
+ sort them.
+
+2006-03-21 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/bfin-protos.h (bfin_dsp_memref_p): Declare.
+ * config/bfin/bfin.c (bfin_dsp_memref_p): New function.
+ (bfin_valid_reg_p): Test for pseudos explicitly and use only
+ REGNO_MODE_CODE_OK_FOR_BASE_P. New args MODE and OUTER_CODE; all
+ callers changed.
+ * config/bfin/bfin.h (PREG_P): Use P_REGNO_P.
+ (IREG_P, P_REGNO_P, I_REGNO_P): New macros.
+ (enum reg_class, REG_CLASS_CONTENTS): Add IPREGS.
+ (BASE_REG_CLASS, REG_OK_FOR_BASE_P, REG_OK_FOR_INDEX_P,
+ REGNO_OK_FOR_BASE_STRICT_P, REGNO_OK_FOR_BASE_NONSTRICT_P): Delete
+ macros.
+ (IREG_POSSIBLE_P, MODE_CODE_BASE_REG_CLASS,
+ REGNO_MODE_CODE_OK_FOR_BASE_P): New macros.
+ (REGNO_REG_CLASS): ARGP is in PREGS.
+ * config/bfin/bfin.md (movhi_insn): Allow for addresses containing
+ IREGS.
+ (zero_extendhisi2, extendhisi2): Likewise; changed to define_and_split
+ to deal with those addresses.
+ * addresses.h: New file.
+ * caller-save.c: Include "addresses.h".
+ (init_caller_save): Use new base_reg_class function.
+ * rtl-factoring.c: Include "addresses.h".
+ (recompute_gain_for_pattern_seq): Use new function ok_for_base_p_1.
+ * recog.c: Include "addresses.h".
+ (preprocess_constraints): Use new base_reg_class function.
+ * regrename.c: Include "addresses.h".
+ (scan_rtx_address): Use new regno_ok_for_base_p and base_reg_class
+ functions. Keep track of a new var INDEX_CODE to compute valid
+ classes.
+ (replace_oldest_value_addr): Likewise.
+ (replace_oldest_value_mem): Use base_reg_class.
+ * reload.c: Include "addresses.h".
+ (REGNO_MODE_OK_FOR_BASE_P, REG_MODE_OK_FOR_BASE_P): Delete macros.
+ (find_reloads): Use new base_reg_class function.
+ (find_reloads_address): Likewise; also use regno_ok_for_base_p.
+ (find_reloads_address_1): Likewise. New args OUTER_CODE and INDEX_CODE;
+ all callers and prototype changed.
+ * reload1.c: Include "addresses.h".
+ (maybe_fix_stack_asms): Use base_reg_class.
+ * regclass.c: Include "addresses.h".
+ (ok_for_index_p_nonstrict, ok_for_base_p_nonstrict): New functions.
+ (init_reg_autoinc): Use new base_reg_class function.
+ (record_reg_classes): Likewise.
+ (record_address_regs): Delete arg CLASS; add args CONTEXT, MODE,
+ OUTER_CODE and INDEX_CODE. All callers and prototype changed.
+ Use new args to compute necessary class.
+
+ * Makefile.in (regclass.o, reload.o, reload1.o, caller-save.o, recog.o,
+ regrename.o, rtl-factoring.o): Update dependencies.
+ * doc/tm.texi (MODE_CODE_BASE_REG_CLASS): Document.
+ (REGNO_MODE_CODE_OK_FOR_BASE_P): Likewise.
+ (REG_OK_FOR_BASE_P, REG_MODE_OK_FOR_BASE_P, REG_MODE_OK_FOR_REG_BASE_P,
+ REG_OK_FOR_INDEX_P): Delete documentation.
+
+2006-03-21 Alexey Starovoytov <alexey.starovoytov@sun.com>
+
+ * config.gcc (sparc-*-solaris2*): Change the default CPU setting
+ from V7 to V9 for Solaris 7 and above.
+
+2006-03-21 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * doc/invoke.texi: Document new flag -fargument-noalias-anything.
+ * tree-ssa-alias.c (may_alias_p): If flag_argument_noalias > 2,
+ argument pointers may not alias any other storage.
+ * common.opt: Define option -fargument-noalias-anything.
+ * tree-ssa-structalias.c (intra_create_variable_infos): Fortran
+ alias semantics is specified by flag_argument_noalias > 2.
+
+2006-03-20 Jeff Law <law@redhat.com>
+
+ * tree-pass.h (pass_phi_only_copy_prop): Delete.
+ (pass_phi_only_cprop): Declare.
+ * passes.c (init_optimization_passes): Replace pass_phi_only_copy_prop
+ with phi_only_cprop
+ * tree-ssa-dom.c (degenerate_phi_result): New function.
+ (remove_stmt_or_phi, get_lhs_or_phi_result): Likewise.
+ (get_rhs_or_phi_arg, propagate_rhs_into_lhs): Likewise.
+ (eliminate_const_or_copy, eliminate_degenerate_phis_1): Likewise.
+ (eliminate_degenerate_phis): Likewise.
+ (pass_phi_only_cprop): New pass descriptor.
+ * tree-ssa-copy.c (init_copy_prop): Lose PHIS_ONLY argument and
+ support code. Callers updated.
+ (execute_copy_prop, do_copy_prop): Likewise and corresponding changes.
+ (store_copy_prop): Likewise.
+ (do_phi_only_copy_prop, pass_phi_only_copy_prop): Remove.
+
+2006-03-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/21764
+ * c-pragma.c (visstack): Move out of handle_pragma_visibility.
+ (push_visibility, pop_visibility): Likewise.
+ * c-pragma.h: Declare them.
+
+2006-03-20 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * config/sh/sh.c (untangle_mova): Initialize n_addr and n_target.
+
+ * config/sh/sh.c (find_regmode_weight): Change the type of the first
+ parameter and use get_ebb_head_tail.
+ (sh_md_init_global): Adjust uses of find_regmode_weight.
+
+2006-03-20 Steven Bosscher <stevenb.gcc@gmail.com>
+
+ * function.h (struct function) <x_tail_recursion_reentry>:
+ Rename to x_stack_check_probe_note.
+ (tail_recursion_reentry): Rename to stack_check_probe_note.
+ * function.c: Replace tail_recursion_reentry with
+ stack_check_probe_note everywhere.
+ (expand_function_start): Only emit a note for
+ stack_check_probe_note with -fstack-protect.
+ * stmt.c (expand_case): Don't emit NOTE_INSN_DELETED notes.
+
+ * emit-rtl.c (remove_unnecessary_notes): Remove.
+ (pass_remove_unnecessary_notes): Remove.
+ * rtl.h (remove_unnecessary_notes): Remove prototype.
+ * final.c (final_start_function): Don't call remove_unnecessary_notes.
+ * tree-pass.h (pass_remove_unnecessary_notes): Remove.
+ * passes.c (pass_remove_unnecessary_notes): Don't run it.
+
+2006-03-20 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR tree-opt/26629
+ * tree-ssa-pre (phi_translate): Handle ARRAY_REF's operands.
+ (valid_in_set): Handle ARRAY_REF.
+ Change "if min_variant or VH" to asserts.
+ (create_component_ref_by_pieces): Handle ARRAY_REF.
+ (create_expression_by_pieces): Likewise.
+ (can_PRE_operation): ARRAY_REFs can now be PRE'd.
+
+2006-03-20 David Edelsohn <edelsohn@gnu.org>
+
+ * genpreds.c (write_insn_extra_address_constraint): Argument `c'
+ is operand of switch, not str[0].
+
+2006-03-20 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (rs6000_handle_option): Use
+ TARGET_NO_FP_IN_TOC inside #ifdef TARGET_USES_SYSV4_OPT too.
+
+2006-03-19 David Edelsohn <edelsohn@gnu.org>
+
+ * genpreds.c (write_tm_preds_h): Add semicolon and newline at
+ end of insn_extra_address_constraint declaration.
+
+2006-03-19 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.opt (no-fp-in-toc): Use Var not Mask.
+ (no-sum-in-toc): Same.
+ * config/rs6000/rs6000.c (rs6000_handle_option): Use new
+ variables.
+ * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Set
+ NO_FP_IN_TOC for -fPIC instead of mask.
+
+ * config/rs6000/t-aix43 (T_ADAFLAGS): Delete.
+ (BOOT_LDFLAGS): Delete.
+ (LDFLAGS): Delete.
+ * config/rs6000/t-aix52: Same.
+
+ * config/rs6000/rs6000.md (store_multiple_power): Delete.
+ (stmsi[345678]_power): New.
+
+2006-03-17 Steve Ellcey <sje@cup.hp.com>
+
+ * config/ia64/ia64.opt: Add empty line to end of file.
+
2006-03-17 Richard Guenther <rguenther@suse.de>
PR middle-end/26721
2006-03-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
- * config/ia64/ia64.c (stops_p): Added explicit initialization.
- (ia64_first_cycle_multipass_dfa_lookahead_guard_spec,
- ia64_h_i_d_extended, ia64_set_sched_flags, ia64_speculate_insn,
- ia64_needs_block_p, ia64_gen_check, ia64_sched_init_global,
+ * config/ia64/ia64.c (stops_p): Added explicit initialization.
+ (ia64_first_cycle_multipass_dfa_lookahead_guard_spec,
+ ia64_h_i_d_extended, ia64_set_sched_flags, ia64_speculate_insn,
+ ia64_needs_block_p, ia64_gen_check, ia64_sched_init_global,
ia64_sched_finish_global): New static functions to implement
hooks from gcc_target.sched.
(spec_check_no, max_uid, pending_data_specs): New static variables.
- (ia64_mode_to_int, ia64_gen_spec_insn, ia64_spec_check_p,
+ (ia64_mode_to_int, ia64_gen_spec_insn, ia64_spec_check_p,
ia64_spec_check_src_p): New static functions.
- (ia64_adjust_cost): Renamed to ia64_adjust_cost_2.
- (TARGET_SCHED_ADJUST_COST): Removed.
- (TARGET_SCHED_ADJUST_COST_2, TARGET_SCHED_INIT_GLOBAL,
+ (ia64_adjust_cost): Renamed to ia64_adjust_cost_2.
+ (TARGET_SCHED_ADJUST_COST): Removed.
+ (TARGET_SCHED_ADJUST_COST_2, TARGET_SCHED_INIT_GLOBAL,
TARGET_SCHED_FINISH_GLOBAL, TARGET_SCHED_H_I_D_EXTENDED,
TARGET_SCHED_SPECULATE_INSN, TARGET_SCHED_NEEDS_BLOCK_P,
TARGET_SCHED_GEN_CHECK,
TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC,
- TARGET_SCHED_SET_SCHED_FLAGS): New macros.
- (update_set_flags, group_barrier_needed, set_src_needs_barrier):
+ TARGET_SCHED_SET_SCHED_FLAGS): New macros.
+ (update_set_flags, group_barrier_needed, set_src_needs_barrier):
Fixed to handle speculation checks.
- (rtx_needs_barrier): Fixed to handle speculative loads and
- their checks.
- (ia64_variable_issue): Added code to count speculative loads and their
- checks.
- (ia64_first_cycle_multipass_dfa_lookahead_guard): Fixed to handle
- speculative loads.
- (enum SPEC_MODES, enum SPEC_GEN_LD_MAP, SPEC_GEN_CHECK_OFFSET):
- New enumerations.
- (SPEC_GEN_EXTEND_OFFSET, SPEC_N, SPEC_GEN_CHECK_MUTATION_OFFSET):
- New constants.
- (ia64_ld_address_bypass_p): Fixed to handle speculative loads.
+ (rtx_needs_barrier): Fixed to handle speculative loads and
+ their checks.
+ (ia64_variable_issue): Added code to count speculative loads and their
+ checks.
+ (ia64_first_cycle_multipass_dfa_lookahead_guard): Fixed to handle
+ speculative loads.
+ (enum SPEC_MODES, enum SPEC_GEN_LD_MAP, SPEC_GEN_CHECK_OFFSET):
+ New enumerations.
+ (SPEC_GEN_EXTEND_OFFSET, SPEC_N, SPEC_GEN_CHECK_MUTATION_OFFSET):
+ New constants.
+ (ia64_ld_address_bypass_p): Fixed to handle speculative loads.
(ia64_reorg): Reset stops_p to NULL after it is freed.
- * config/ia64/ia64.md (UNSPEC_LDA, UNSPEC_LDS, UNSPEC_LDSA,
+ * config/ia64/ia64.md (UNSPEC_LDA, UNSPEC_LDS, UNSPEC_LDSA,
UNSPEC_LDCCLR, UNSPEC_CHKACLR, UNSPEC_CHKS): New constants.
- (itanium_class): chk_s renamed to chk_s_i. New constants: chk_s_f,
- chk_a.
- (data_speculative, control_speculative, check_load): New attributes.
- (mov<mode>_advanced, mov<mode>_speculative,
- mov<mode>_speculative_advanced, zero_extend<mode>di2_advanced,
- zero_extend<mode>di2_speculative,
- zero_extend<mode>di2_speculative_advanced): New patterns for
- data and control speculative loads.
- (mov<mode>_clr, zero_extend<mode>di2_clr): New patterns for
- check loads.
- (advanced_load_check_clr_<mode>, speculation_check_<mode>):
- New pattern for data and control speculation checks.
+ (itanium_class): chk_s renamed to chk_s_i. New constants: chk_s_f,
+ chk_a.
+ (data_speculative, control_speculative, check_load): New attributes.
+ (mov<mode>_advanced, mov<mode>_speculative,
+ mov<mode>_speculative_advanced, zero_extend<mode>di2_advanced,
+ zero_extend<mode>di2_speculative,
+ zero_extend<mode>di2_speculative_advanced): New patterns for
+ data and control speculative loads.
+ (mov<mode>_clr, zero_extend<mode>di2_clr): New patterns for
+ check loads.
+ (advanced_load_check_clr_<mode>, speculation_check_<mode>):
+ New pattern for data and control speculation checks.
(MODE, MODE_FOR_EXTEND, output_a, output_s, output_sa, output_c_clr,
ld_reg_constr, ldc_reg_constr, chk_reg_constr, mem_constr,
reg_pred_prefix, ld_class, chka_class, chks_class, attr_yes):
Auxiliary definitions for the patterns.
- * config/ia64/itanium1.md (1_fldc, 1_fldpc, 1_ldc, 1_chk_s_f, 1_chk_a,
- 1b_fldc, 1b_fldpc, 1b_ldc, 1b_chk_s_f, 1b_chk_a): New resource
- constraints.
+ * config/ia64/itanium1.md (1_fldc, 1_fldpc, 1_ldc, 1_chk_s_f, 1_chk_a,
+ 1b_fldc, 1b_fldpc, 1b_ldc, 1b_chk_s_f, 1b_chk_a): New resource
+ constraints.
(1_fld, 1_fldp, 1_ld, 1b_fld, 1b_fldp, 1b_ld): Add a condition
- for speculation.
- (1_chk_s, 1b_chk_s): Renamed to 1_chk_s_i, 1b_chk_s_i.
- * config/ia64/itanium2.md (2_flda, 2_fldc, 2_fldpc, 2_ldc, 2_chk_s_f,
+ for speculation.
+ (1_chk_s, 1b_chk_s): Renamed to 1_chk_s_i, 1b_chk_s_i.
+ * config/ia64/itanium2.md (2_flda, 2_fldc, 2_fldpc, 2_ldc, 2_chk_s_f,
2_chk_a, 2b_flda, 2b_fldc, 2b_fldpc, 2b_ldc, 2b_chk_s_f, 2b_chk_a):
New resource constraints.
(2_fld, 2_fldp, 2_ld, 2b_fld, 2b_fldp, 2b_ld): Add a condition
- for speculation.
- (2_chk_s, 2b_chk_s): Renamed to 2_chk_s_i, 2b_chk_s_i.
- * config/ia64/ia64.opt (msched-br-data-spec, msched-ar-data-spec,
- msched-control-spec, msched-br-in-data-spec, msched-ar-in-data-spec,
- msched-in-control-spec, msched-ldc, msched-control-ldc,
- msched-spec-verbose, msched-prefer-non-data-spec-insns,
- msched-prefer-non-control-spec-insns,
+ for speculation.
+ (2_chk_s, 2b_chk_s): Renamed to 2_chk_s_i, 2b_chk_s_i.
+ * config/ia64/ia64.opt (msched-br-data-spec, msched-ar-data-spec,
+ msched-control-spec, msched-br-in-data-spec, msched-ar-in-data-spec,
+ msched-in-control-spec, msched-ldc, msched-control-ldc,
+ msched-spec-verbose, msched-prefer-non-data-spec-insns,
+ msched-prefer-non-control-spec-insns,
msched-count-spec-in-critical-path): New flags to tune speculative
scheduling.
* doc/invoke.texi (msched-br-data-spec, msched-ar-data-spec,
- msched-control-spec, msched-br-in-data-spec, msched-ar-in-data-spec,
- msched-in-control-spec, msched-ldc, msched-control-ldc,
- msched-spec-verbose, msched-prefer-non-data-spec-insns,
- msched-prefer-non-control-spec-insns,
+ msched-control-spec, msched-br-in-data-spec, msched-ar-in-data-spec,
+ msched-in-control-spec, msched-ldc, msched-control-ldc,
+ msched-spec-verbose, msched-prefer-non-data-spec-insns,
+ msched-prefer-non-control-spec-insns,
msched-count-spec-in-critical-path): Document new flags.
2006-03-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
- * target.h (struct spec_info_def): New opaque declaration.
- (struct gcc_target.sched): New fields: adjust_cost_2, h_i_d_extended,
- speculate_insn, needs_block_p, gen_check,
- first_cycle_multipass_dfa_lookahead_guard_spec, set_sched_flags.
- * target-def.h (TARGET_SCHED_ADJUST_COST_2,
- TARGET_SCHED_H_I_D_EXTENDED, TARGET_SCHED_SPECULATE_INSN,
- TARGET_SCHED_NEEDS_BLOCK_P, TARGET_SCHED_GEN_CHECK,
- TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC,
- TARGET_SCHED_SET_SCHED_FLAGS): New macros to initialize fields in
- gcc_target.sched.
- (TARGET_SCHED): Use new macros.
- * rtl.h (copy_DEPS_LIST_list): New prototype.
- * sched-int.h (struct sched_info): Change signature of new_ready field,
+ * target.h (struct spec_info_def): New opaque declaration.
+ (struct gcc_target.sched): New fields: adjust_cost_2, h_i_d_extended,
+ speculate_insn, needs_block_p, gen_check,
+ first_cycle_multipass_dfa_lookahead_guard_spec, set_sched_flags.
+ * target-def.h (TARGET_SCHED_ADJUST_COST_2,
+ TARGET_SCHED_H_I_D_EXTENDED, TARGET_SCHED_SPECULATE_INSN,
+ TARGET_SCHED_NEEDS_BLOCK_P, TARGET_SCHED_GEN_CHECK,
+ TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC,
+ TARGET_SCHED_SET_SCHED_FLAGS): New macros to initialize fields in
+ gcc_target.sched.
+ (TARGET_SCHED): Use new macros.
+ * rtl.h (copy_DEPS_LIST_list): New prototype.
+ * sched-int.h (struct sched_info): Change signature of new_ready field,
adjust all initializations. New fields: add_remove_insn,
- begin_schedule_ready, add_block, advance_target_bb, fix_recovery_cfg,
+ begin_schedule_ready, add_block, advance_target_bb, fix_recovery_cfg,
region_head_or_leaf_p.
- (struct spec_info_def): New structure declaration.
- (spec_info_t): New typedef.
- (struct haifa_insn_data): New fields: todo_spec, done_spec, check_spec,
- recovery_block, orig_pat.
- (glat_start, glat_end): New variables declaraions.
- (TODO_SPEC, DONE_SPEC, CHECK_SPEC, RECOVERY_BLOCK, ORIG_PAT):
+ (struct spec_info_def): New structure declaration.
+ (spec_info_t): New typedef.
+ (struct haifa_insn_data): New fields: todo_spec, done_spec, check_spec,
+ recovery_block, orig_pat.
+ (glat_start, glat_end): New variables declaraions.
+ (TODO_SPEC, DONE_SPEC, CHECK_SPEC, RECOVERY_BLOCK, ORIG_PAT):
New access macros.
- (enum SCHED_FLAGS): New constants: SCHED_RGN, SCHED_EBB,
- DETACH_LIFE_INFO, USE_GLAT.
- (enum SPEC_SCHED_FLAGS): New enumeration.
- (NOTE_NOTE_BB_P): New macro.
- (extend_dependency_caches, xrecalloc, unlink_bb_notes, add_block,
- attach_life_info, debug_spec_status, check_reg_live): New functions.
- (get_block_head_tail): Change signature to get_ebb_head_tail, adjust
- all uses in ddg.c, modulo-sched.c, haifa-sched.c, sched-rgn.c,
- sched-ebb.c
+ (enum SCHED_FLAGS): New constants: SCHED_RGN, SCHED_EBB,
+ DETACH_LIFE_INFO, USE_GLAT.
+ (enum SPEC_SCHED_FLAGS): New enumeration.
+ (NOTE_NOTE_BB_P): New macro.
+ (extend_dependency_caches, xrecalloc, unlink_bb_notes, add_block,
+ attach_life_info, debug_spec_status, check_reg_live): New functions.
+ (get_block_head_tail): Change signature to get_ebb_head_tail, adjust
+ all uses in ddg.c, modulo-sched.c, haifa-sched.c, sched-rgn.c,
+ sched-ebb.c
(get_dep_weak, ds_merge): Prototype functions from sched-deps.c .
- * ddg.c (get_block_head_tail): Adjust all uses.
- * modulo-sched.c (get_block_head_tail): Adjust all uses.
+ * ddg.c (get_block_head_tail): Adjust all uses.
+ * modulo-sched.c (get_block_head_tail): Adjust all uses.
(sms_sched_info): Initialize new fields.
(contributes_to_priority): Removed.
- * haifa-sched.c (params.h): New include.
+ * haifa-sched.c (params.h): New include.
(get_block_head_tail): Adjust all uses.
- (ISSUE_POINTS): New macro.
- (glat_start, glat_end): New global variables.
- (spec_info_var, spec_info, added_recovery_block_p, nr_begin_data,
+ (ISSUE_POINTS): New macro.
+ (glat_start, glat_end): New global variables.
+ (spec_info_var, spec_info, added_recovery_block_p, nr_begin_data,
nr_be_in_data, nr_begin_control, nr_be_in_control, bb_header,
old_last_basic_block, before_recovery, current_sched_info_var,
rgn_n_insns, luid): New static variables.
- (insn_cost1): New function. Move logic from insn_cost to here.
- (find_insn_reg_weight1): New function. Move logic from
- find_insn_reg_weight to here.
- (reemit_notes, move_insn, max_issue): Change signature.
- (move_insn1): Removed.
- (extend_h_i_d, extend_ready, extend_global, extend_all, init_h_i_d,
- extend_bb): New static functions to support extension of scheduler's
- data structures.
- (generate_recovery_code, process_insn_depend_be_in_spec,
- begin_speculative_block, add_to_speculative_block,
- init_before_recovery, create_recovery_block, create_check_block_twin,
- fix_recovery_deps): New static functions to support
- generation of recovery code.
- (fix_jump_move, find_fallthru_edge, dump_new_block_header,
- restore_bb_notes, move_block_after_check, move_succs): New static
- functions to support ebb scheduling.
- (init_glat, init_glat1, attach_life_info1, free_glat): New static
- functions to support handling of register live information.
- (associate_line_notes_with_blocks, change_pattern, speculate_insn,
+ (insn_cost1): New function. Move logic from insn_cost to here.
+ (find_insn_reg_weight1): New function. Move logic from
+ find_insn_reg_weight to here.
+ (reemit_notes, move_insn, max_issue): Change signature.
+ (move_insn1): Removed.
+ (extend_h_i_d, extend_ready, extend_global, extend_all, init_h_i_d,
+ extend_bb): New static functions to support extension of scheduler's
+ data structures.
+ (generate_recovery_code, process_insn_depend_be_in_spec,
+ begin_speculative_block, add_to_speculative_block,
+ init_before_recovery, create_recovery_block, create_check_block_twin,
+ fix_recovery_deps): New static functions to support
+ generation of recovery code.
+ (fix_jump_move, find_fallthru_edge, dump_new_block_header,
+ restore_bb_notes, move_block_after_check, move_succs): New static
+ functions to support ebb scheduling.
+ (init_glat, init_glat1, attach_life_info1, free_glat): New static
+ functions to support handling of register live information.
+ (associate_line_notes_with_blocks, change_pattern, speculate_insn,
sched_remove_insn, clear_priorities, calc_priorities, bb_note,
add_jump_dependencies): New static functions.
- (check_cfg, has_edge_p, check_sched_flags): New static functions for
+ (check_cfg, has_edge_p, check_sched_flags): New static functions for
consistancy checking.
(debug_spec_status): New function to call from debugger.
(priority): Added code to handle speculation checks.
(schedule_insn): Added code to handle speculation checks.
(unlink_other_notes, rm_line_notes, restore_line_notes, rm_other_notes):
Fixed to handle ebbs.
- (move_insn): Added code to handle ebb scheduling.
+ (move_insn): Added code to handle ebb scheduling.
(max_issue): Added code to use ISSUE_POINTS of instructions.
- (choose_ready): Added code to choose between speculative and
- non-speculative instructions.
- (schedule_block): Added code to handle ebb scheduling and scheduling of
- speculative instructions.
- (sched_init): Initialize new variables.
- (sched_finish): Free new variables. Print statistics.
- (try_ready): Added code to handle speculative instructions.
- * lists.c (copy_DEPS_LIST_list): New function.
- * sched-deps.c (extend_dependency_caches): New function. Move logic
- from create_dependency_caches to here.
+ (choose_ready): Added code to choose between speculative and
+ non-speculative instructions.
+ (schedule_block): Added code to handle ebb scheduling and scheduling of
+ speculative instructions.
+ (sched_init): Initialize new variables.
+ (sched_finish): Free new variables. Print statistics.
+ (try_ready): Added code to handle speculative instructions.
+ * lists.c (copy_DEPS_LIST_list): New function.
+ * sched-deps.c (extend_dependency_caches): New function. Move logic
+ from create_dependency_caches to here.
(get_dep_weak, ds_merge): Make global.
- * genattr.c (main): Code to output prototype for
- dfa_clear_single_insn_cache.
- * genautomata.c (DFA_CLEAR_SINGLE_INSN_CACHE_FUNC_NAME): New macros.
- (output_dfa_clean_insn_cache_func): Code to output
- dfa_clear_single_insn_cache function.
- * sched-ebb.c (target_n_insns): Remove. Adjust all users to use
+ * genattr.c (main): Code to output prototype for
+ dfa_clear_single_insn_cache.
+ * genautomata.c (DFA_CLEAR_SINGLE_INSN_CACHE_FUNC_NAME): New macros.
+ (output_dfa_clean_insn_cache_func): Code to output
+ dfa_clear_single_insn_cache function.
+ * sched-ebb.c (target_n_insns): Remove. Adjust all users to use
n_insns.
- (can_schedule_ready_p, fix_basic_block_boundaries, add_missing_bbs):
- Removed.
- (n_insns, dont_calc_deps, ebb_head, ebb_tail, last_bb):
- New static variables.
- (begin_schedule_ready, add_remove_insn, add_block1, advance_target_bb,
+ (can_schedule_ready_p, fix_basic_block_boundaries, add_missing_bbs):
+ Removed.
+ (n_insns, dont_calc_deps, ebb_head, ebb_tail, last_bb):
+ New static variables.
+ (begin_schedule_ready, add_remove_insn, add_block1, advance_target_bb,
fix_recovery_cfg, ebb_head_or_leaf_p): Implement hooks from
struct sched_info.
- (ebb_sched_info): Initialize new fields.
+ (ebb_sched_info): Initialize new fields.
(get_block_head_tail): Adjust all uses.
(compute_jump_reg_dependencies): Fixed to use glat_start.
(schedule_ebb): Code to remove unreachable last block.
- (schedule_ebbs): Added code to update register live information.
- * sched-rgn.c (region_sched_info): Initialize new fields.
+ (schedule_ebbs): Added code to update register live information.
+ * sched-rgn.c (region_sched_info): Initialize new fields.
(get_block_head_tail): Adjust all uses.
(last_was_jump): Removed. Adjust users.
- (begin_schedule_ready, add_remove_insn, insn_points, extend_regions,
+ (begin_schedule_ready, add_remove_insn, insn_points, extend_regions,
add_block1, fix_recovery_cfg, advance_target_bb, region_head_or_leaf_p):
Implement new hooks.
- (check_dead_notes1): New static function.
- (struct region): New fields: dont_calc_deps, has_real_ebb.
- (RGN_DONT_CALC_DEPS, RGN_HAS_REAL_EBB): New access macros.
- (BB_TO_BLOCK): Fixed to handle EBBs.
- (EBB_FIRST_BB, EBB_LAST_BB): New macros.
- (ebb_head): New static variable.
- (debug_regions, contributes_to_priority): Fixed to handle EBBs.
- (find_single_block_regions, find_rgns, find_more_rgns): Initialize
+ (check_dead_notes1): New static function.
+ (struct region): New fields: dont_calc_deps, has_real_ebb.
+ (RGN_DONT_CALC_DEPS, RGN_HAS_REAL_EBB): New access macros.
+ (BB_TO_BLOCK): Fixed to handle EBBs.
+ (EBB_FIRST_BB, EBB_LAST_BB): New macros.
+ (ebb_head): New static variable.
+ (debug_regions, contributes_to_priority): Fixed to handle EBBs.
+ (find_single_block_regions, find_rgns, find_more_rgns): Initialize
new fields.
(compute_dom_prob_ps): New assertion.
- (check_live_1, update_live_1): Fixed to work with glat_start instead of
- global_live_at_start.
+ (check_live_1, update_live_1): Fixed to work with glat_start instead of
+ global_live_at_start.
(init_ready_list): New assertions.
(can_schedule_ready_p): Split update code to begin_schedule_ready.
(new_ready): Add support for BEGIN_CONTROL speculation.
- (schedule_insns): Fixed code that updates register live information
- to handle EBBs.
- (schedule_region): Fixed to handle EBBs.
+ (schedule_insns): Fixed code that updates register live information
+ to handle EBBs.
+ (schedule_region): Fixed to handle EBBs.
(init_regions): Use extend_regions and check_dead_notes1.
- * params.def (PARAM_MAX_SCHED_INSN_CONFLICT_DELAY,
- PARAM_SCHED_SPEC_PROB_CUTOFF): New parameters.
+ * params.def (PARAM_MAX_SCHED_INSN_CONFLICT_DELAY,
+ PARAM_SCHED_SPEC_PROB_CUTOFF): New parameters.
* doc/tm.texi (TARGET_SCHED_ADJUST_COST_2, TARGET_SCHED_H_I_D_EXTENDED,
TARGET_SCHED_SPECULATE_INSN, TARGET_SCHED_NEEDS_BLOCK_P,
TARGET_SCHED_GEN_CHECK,
TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC,
TARGET_SCHED_SET_SCHED_FLAGS): Document.
- * doc/invoke.texi (max-sched-insn-conflict-delay,
+ * doc/invoke.texi (max-sched-insn-conflict-delay,
sched-spec-prob-cutoff): Document.
2006-03-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
- * sched-int.h (struct haifa_insn_data): New fields: resolved_deps,
+ * sched-int.h (struct haifa_insn_data): New fields: resolved_deps,
inter_tick, queue_index.
(struct sched_info): Change signature of init_ready_list field.
Adjust all initializations.
(gather_region_statistics, print_region_statistics): New static
functions.
* params.def (PARAM_MAX_SCHED_EXTEND_REGIONS_ITERS): New parameter.
- * doc/invoke.texi (max-sched-extend-regions-iters): Document.
+ * doc/invoke.texi (max-sched-extend-regions-iters): Document.
2006-03-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
- Andrey Belevantsev <abel@ispras.ru>
+ Andrey Belevantsev <abel@ispras.ru>
* ddg.c (build_intra_loop_deps): Adjust add_forward_dependence call.
- * lists.c (unused_deps_list): New variable.
+ * lists.c (unused_deps_list): New variable.
(free_list): Add assertions to verify the proper distinguishing
- between INSN_LISTs and DEPS_LISTs.
- (find_list_elem, remove_list_elem, remove_list_node): New static
+ between INSN_LISTs and DEPS_LISTs.
+ (find_list_elem, remove_list_elem, remove_list_node): New static
functions.
- (alloc_DEPS_LIST, free_DEPS_LIST, free_DEPS_LIST_node,
- remove_free_INSN_LIST_elem, remove_free_DEPS_LIST_elem,
- remove_free_INSN_LIST_node, remove_free_DEPS_LIST_node): New functions.
- (alloc_INSN_LIST): Assert that the list we're working on is indeed
+ (alloc_DEPS_LIST, free_DEPS_LIST, free_DEPS_LIST_node,
+ remove_free_INSN_LIST_elem, remove_free_DEPS_LIST_elem,
+ remove_free_INSN_LIST_node, remove_free_DEPS_LIST_node): New functions.
+ (alloc_INSN_LIST): Assert that the list we're working on is indeed
an INSN_LIST.
- (free_INSN_LIST_node): Likewise.
+ (free_INSN_LIST_node): Likewise.
* modulo-sched.c (current_sched_info): Initialize flags field.
* reg-notes.def: Exchange DEP_ANTI and DEP_OUTPUT.
* rtl.def (DEPS_LIST): Define.
- * rtl.h: Declare new functions from lists.c.
- * sched-deps.c (spec_dependency_cache): New static variable.
- (maybe_add_or_update_back_dep_1, add_back_dep): New static functions.
- (add_dependence): Change return type to void. Move the logic to ...
- (add_or_update_back_dep_1): ... here. Handle speculative dependencies.
- (delete_all_dependences): Add comment about forward_dependency_cache.
+ * rtl.h: Declare new functions from lists.c.
+ * sched-deps.c (spec_dependency_cache): New static variable.
+ (maybe_add_or_update_back_dep_1, add_back_dep): New static functions.
+ (add_dependence): Change return type to void. Move the logic to ...
+ (add_or_update_back_dep_1): ... here. Handle speculative dependencies.
+ (delete_all_dependences): Add comment about forward_dependency_cache.
Handle spec_dependency_cache. Handle DEPS_LISTs.
- (fixup_sched_groups): Clarify the change of priority of output
- and anti dependencies.
- (sched_analyze_2): Adjust add_dependence calls to create data
+ (fixup_sched_groups): Clarify the change of priority of output
+ and anti dependencies.
+ (sched_analyze_2): Adjust add_dependence calls to create data
speculative dependence.
- (add_forward_dependence): Renamed to add_forw_dep, change prototype.
+ (add_forward_dependence): Renamed to add_forw_dep, change prototype.
Adjust all callers. Handle DEPS_LISTS.
- (compute_forward_dependences): Use add_forw_dep. Sort LOG_LINKs in
+ (compute_forward_dependences): Use add_forw_dep. Sort LOG_LINKs in
presence of speculation.
- (init_dependency_caches, free_dependency_caches):
+ (init_dependency_caches, free_dependency_caches):
Handle spec_dependency_cache.
- (adjust_add_sorted_back_dep, adjust_back_add_forw_dep, delete_forw_dep,
+ (adjust_add_sorted_back_dep, adjust_back_add_forw_dep, delete_forw_dep,
estimate_dep_weak, get_dep_weak, ds_merge, check_dep_status):
New static functions.
- (add_or_update_back_dep, add_or_update_back_forw_dep,
+ (add_or_update_back_dep, add_or_update_back_forw_dep,
add_back_forw_dep, delete_back_forw_dep): New functions.
* sched-int.h (ds_t, dw_t): New typedefs.
(struct sched_info): Add new field flags.
(struct haifa_insn_data): Add new bitfield has_internal_dep.
Prototype new sched-deps.c functions.
- (HAS_INTERNAL_DEP, DEP_STATUS): New access macros.
+ (HAS_INTERNAL_DEP, DEP_STATUS): New access macros.
(BITS_PER_DEP_STATUS, BITS_PER_DEP_WEAK, DEP_WEAK_MASK, MAX_DEP_WEAK,
MIN_DEP_WEAK, NO_DEP_WEAK, UNCERTAIN_DEP_WEAK, BEGIN_DATA, BE_IN_DATA,
BEGIN_CONTROL, BE_IN_CONTROL, BEGIN_SPEC, DATA_SPEC, CONTROL_SPEC,
SPECULATIVE, BE_IN_SPEC, FIRST_SPEC_TYPE, LAST_SPEC_TYPE,
SPEC_TYPE_SHIFT, DEP_TRUE, DEP_OUTPUT, DEP_ANTI, DEP_TYPES, HARD_DEP):
New constants.
- (enum SPEC_TYPES_OFFSETS, enum DEPS_ADJUST_RESULT, enum SCHED_FLAGS):
+ (enum SPEC_TYPES_OFFSETS, enum DEPS_ADJUST_RESULT, enum SCHED_FLAGS):
New enums.
* sched-rgn.c (current_sched_info): Initialize flags field.
(schedule_insns): Initialize current_sched_info before the sched_init