Strengthen haifa_sched_info callbacks and 3 scheduler hooks
gcc/ * target.def (reorder): Strengthen param "ready" of this DEFHOOK from rtx * to rtx_insn **. (reorder2): Likewise. (dependencies_evaluation_hook): Strengthen params "head", "tail" from rtx to rtx_insn *. * doc/tm.texi: Update mechanically for above change to target.def. * sched-int.h (note_list): Strengthen this variable from rtx to rtx_insn *. (remove_notes): Likewise for both params. (restore_other_notes): Likewise for return type and first param. (struct ready_list): Strengthen field "vec" from rtx * to rtx_insn **. (struct dep_replacement): Strenghten field "insn" from rtx to rtx_insn *. (struct deps_desc): Likewise for fields "last_debug_insn", "last_args_size". (struct haifa_sched_info): Likewise for callback field "can_schedule_ready_p"'s param, for first param of "new_ready" callback field, for both params of "rank" callback field, for first field of "print_insn" callback field (with a const), for both params of "contributes_to_priority" callback, for param of "insn_finishes_block_p" callback, for fields "prev_head", "next_tail", "head", "tail", for first param of "add_remove_insn" callback, for first param of "begin_schedule_ready" callback, for both params of "begin_move_insn" callback, and for second param of "advance_target_bb" callback. (add_dependence): Likewise for params 1 and 2. (sched_analyze): Likewise for params 2 and 3. (deps_analyze_insn): Likewise for param 2. (ready_element): Likewise for return type. (ready_lastpos): Strengthen return type from rtx * to rtx_insn **. (try_ready): Strenghten param from rtx to rtx_insn *. (sched_emit_insn): Likewise for return type. (record_delay_slot_pair): Likewise for params 1 and 2. (add_delay_dependencies): Likewise for param. (contributes_to_priority): Likewise for both params. (find_modifiable_mems): Likewise. * config/arm/arm.c (cortexa7_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen locals "insn", "first_older_only_insn" from rtx to rtx_insn *. (arm_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. * config/c6x/c6x.c (struct c6x_sched_context): Strengthen field "last_scheduled_iter0" from rtx to rtx_insn *. (init_sched_state): Replace use of NULL_RTX with NULL for insn. (c6x_sched_reorder_1): Strengthen param "ready" and locals "e_ready", "insnp" from rtx * to rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *. (c6x_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. (c6x_sched_reorder2): Strengthen param "ready" and locals "e_ready", "insnp" from rtx * to rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *. (c6x_variable_issue): Add a checked cast when assigning from insn to ss.last_scheduled_iter0. (split_delayed_branch): Strengthen param "insn" and local "i1" from rtx to rtx_insn *. (split_delayed_nonbranch): Likewise. (undo_split_delayed_nonbranch): Likewise for local "insn". (hwloop_optimize): Likewise for locals "seq", "insn", "prev", "entry_after", "end_packet", "head_insn", "tail_insn", "new_insns", "last_insn", "this_iter", "prev_stage_insn". Strengthen locals "orig_vec", "copies", "insn_copies" from rtx * to rtx_insn **. Remove now-redundant checked cast on last_insn, but add a checked cast on loop->start_label. Consolidate calls to avoid assigning result of gen_spkernel to "insn", now an rtx_insn *. * config/i386/i386.c (do_reorder_for_imul): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *. (swap_top_of_ready_list): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen locals "top", "next" from rtx to rtx_insn *. (ix86_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *. (add_parameter_dependencies): Strengthen params "call", "head" and locals "insn", "last", "first_arg" from rtx to rtx_insn *. (avoid_func_arg_motion): Likewise for params "first_arg", "insn". (add_dependee_for_func_arg): Likewise for param "arg" and local "insn". (ix86_dependencies_evaluation_hook): Likewise for params "head", "tail" and locals "insn", "first_arg". * config/ia64/ia64.c (ia64_dependencies_evaluation_hook): Likewise for params "head", "tail" and locals "insn", "next", "next_tail". (ia64_dfa_sched_reorder): Strengthen param "ready" and locals "e_ready", "insnp" from rtx * to rtx_insn **. Strengthen locals "insn", "lowest", "highest" from rtx to rtx_insn *. (ia64_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. (ia64_sched_reorder2): Likewise. * config/mep/mep.c (mep_find_ready_insn): Strengthen return type and local "insn" from rtx to rtx_insn *. Strengthen param "ready" from rtx * to rtx_insn **. (mep_move_ready_insn): Strengthen param "ready" from rtx * to rtx_insn **. (mep_print_sched_insn): Strengthen param "insn" from rtx to rtx_insn *. (mep_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen locals "core_insn", "cop_insn" from rtx to rtx_insn *. * config/mips/mips.c (mips_promote_ready): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen local "new_head" from rtx to rtx_insn *. (mips_maybe_swap_ready): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen local "temp" from rtx to rtx_insn *. (mips_macc_chains_reorder): Strengthen param "ready" from rtx * to rtx_insn **. (vr4130_reorder): Likewise. (mips_74k_agen_reorder): Likewise. Strengthen local "insn" from rtx to rtx_insn *. (mips_sched_reorder_1): Strengthen param "ready" from rtx * to rtx_insn **. (mips_sched_reorder): Likewise. (mips_sched_reorder2): Likewise. * config/picochip/picochip.c (picochip_sched_reorder): Likewise. * config/rs6000/rs6000.c (rs6000_sched_reorder): Likewise. Strengthen local "tmp" from rtx to rtx_insn *. (rs6000_sched_reorder2): Likewise. * config/s390/s390.c (s390_z10_prevent_earlyload_conflicts): Likewise. Update sizeof(rtx) to sizeof(rtx_insn *) in memmove. (s390_sched_reorder): Strengthen param "ready" from rtx * to rtx_insn **. Strengthen local "tmp" from rtx to rtx_insn *. * config/sh/sh.c (rank_for_reorder): Strengthen locals "tmp", "tmp2" from rtx to rtx_insn *. (swap_reorder): Strengthen param "a" from rtx * to rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *. (ready_reorder): Strengthen param "ready" from rtx * to rtx_insn **. Update sizeof(rtx) to sizeof(rtx_insn *) in qsort. (sh_reorder): Strengthen param "ready" from rtx * to rtx_insn **. (sh_reorder2): Likewise. * config/spu/spu.c (spu_sched_reorder): Likewise. Strengthen local "insn" from rtx to rtx_insn *. * haifa-sched.c (note_list): Strengthen this variable from rtx to rtx_insn *. (scheduled_insns): Strengthen this variable from vec<rtx> to vec<rtx_insn *>. (set_modulo_params): Likewise for locals "i1", "i2". (record_delay_slot_pair): Likewise for params "i1", "i2". (add_delay_dependencies): Likewise for param "insn". (cond_clobbered_p): Likewise. (recompute_todo_spec): Likewise for local "prev". (last_scheduled_insn): Likewise for this variable. (nonscheduled_insns_begin): Likewise. (model_set_excess_costs): Strengthen param "insns" from rtx * to rtx_insn **. (rank_for_schedule): Strengthen locals "tmp", "tmp2" from rtx to rtx_insn *. (swap_sort): Strengthen param "a" from rtx * to rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *. (queue_insn): Strengthen param "insn" from rtx to rtx_insn *. (ready_lastpos): Strengthen return type from rtx * to rtx_insn **. (ready_add): Strengthen param "insn" from rtx to rtx_insn *. (ready_remove_first): Likewise for return type and local "t". (ready_element): Likewise for return type. (ready_remove): Likewise for return type and local "t". (ready_sort): Strengthen local "first" from rtx * to rtx_insn **. (check_clobbered_conditions): Strengthen local "x" from rtx to rtx_insn *, adding a checked cast. (schedule_insn): Likewise for param "insn". (remove_notes): Likewise for params "head", "tail" and locals "next_tail", "insn", "next". (struct haifa_saved_data): Likewise for fields "last_scheduled_insn", "nonscheduled_insns_begin". (save_backtrack_point): Update for change to field "vec" of struct ready_list. (toggle_cancelled_flags): Strengthen local "first" from rtx * to rtx_insn **. (restore_last_backtrack_point): Likewise. Strengthen local "insn" from rtx to rtx_insn * (resolve_dependencies): Strengthen param "insn" from rtx to rtx_insn * (restore_other_notes): Likewise for return type, for param "head" and local "note_head". (undo_all_replacements): Likewise for local "insn". (first_nonscheduled_insn): Likewise for return type and local "insn". (queue_to_ready): Likewise for local "insn", adding checked casts. (early_queue_to_ready): Likewise for local "insn". (debug_ready_list_1): Strengthen local "p" from rtx * to rtx_insn **. (move_insn): Strengthen param "insn" and local "note" from rtx to rtx_insn * (insn_finishes_cycle_p): Likewise for param "insn". (max_issue): Likewise for local "insn". (choose_ready): Likewise. Strengthen param "insn_ptr" from rtx * to rtx_insn **. (commit_schedule): Strengthen param "prev_head" and local "insn" from rtx to rtx_insn * (prune_ready_list): Likewise for local "insn". (schedule_block): Likewise for locals "prev_head", "head", "tail", "skip_insn", "insn", "failed_insn", "x", adding a checked cast. (set_priorities): Likewise for local "prev_head". (try_ready): Likewise for param "next". (fix_tick_ready): Likewise. (change_queue_index): Likewise. (sched_extend_ready_list): Update for change to field "vec" of struct ready_list. (generate_recovery_code): Strengthen param "insn" from rtx to rtx_insn *. (begin_speculative_block): Likewise. (create_check_block_twin): Likewise for param "insn" and locals "label", "check", "twin". Introduce local "check_pat" to avoid "check" being used as a plain rtx before being used as an insn. (fix_recovery_deps): Add a checked cast to rtx_insn * when extracting elements from ready_list. (sched_remove_insn): Strengthen param "insn" from rtx to rtx_insn *. (sched_emit_insn): Likewise for return type. (ready_remove_first_dispatch): Likewise for return type and local "insn". * hw-doloop.c (discover_loop): Add a checked cast to rtx_insn *. * modulo-sched.c (sms_print_insn): Strengthen from const_rtx to const rtx_insn *. * sched-deps.c (add_dependence): Strengthen params "con", "pro" from rtx to rtx_insn *. (add_dependence_list): Likewise for param "insn". Add a checked cast. (add_dependence_list_and_free): Strengthen param "insn" from rtx to rtx_insn *. Strengthen param "list_p" from rtx * to rtx_insn **. (chain_to_prev_insn): Strengthen param "insn" and locals "prec_nonnote", "i" from rtx to rtx_insn *. (flush_pending_lists): Likewise for param "insn". (cur_insn): Likewise for this variable. (haifa_start_insn): Add a checked cast. (note_dep): Strengthen param "e" from rtx to rtx_insn *. (sched_analyze_reg): Likewise for param "insn". (sched_analyze_1): Likewise. (sched_analyze_2): Likewise. Add checked casts. (sched_analyze_insn): Likewise. Also for local "prev". (deps_analyze_insn): Likewise for param "insn". (sched_analyze): Likewise for params "head", "tail" and local "insn". (add_dependence_1): Likewise for params "insn", "elem". (struct mem_inc_info): Likewise for fields "inc_insn", "mem_insn". (parse_add_or_inc): Likewise for param "insn". (find_inc): Likewise for local "inc_cand". (find_modifiable_mems): Likewise for params "head", "tail" and locals "insn", "next_tail". * sched-ebb.c (init_ready_list): Likewise for local "insn". (begin_schedule_ready): Likewise for param "insn". (begin_move_insn): Likewise for params "insn" and "last". (ebb_print_insn): Strengthen param "insn" from const_rtx to const rtx_insn *. (rank): Strengthen params "insn1", "insn2" from rtx to rtx_insn *. (ebb_contributes_to_priority): Likewise for params "next", "insn". (ebb_add_remove_insn): Likewise for param "insn". (advance_target_bb): Likewise. * sched-rgn.c (rgn_estimate_number_of_insns): Likewise for local "insn". (check_live): Likewise for param "insn". (init_ready_list): Likewise for local "insn". (can_schedule_ready_p): Likewise for param "insn". (begin_schedule_ready): Likewise. (new_ready): Likewise for param "next". (rgn_print_insn): Likewise for param "insn". (rgn_rank): Likewise for params "insn1", "insn2". (contributes_to_priority): Likewise for params "next", "insn". (rgn_insn_finishes_block_p): Likewise for param "insn". (add_branch_dependences): Likewise for params "head", "tail" and locals "insn", "last". (rgn_add_remove_insn): Likewise for param "insn". (advance_target_bb): Likewise. * sel-sched-dump.c (sel_print_insn): Strengthen param "insn" from const_rtx to const rtx_insn *. * sel-sched-dump.h (sel_print_insn): Likewise. * sel-sched-ir.c (advance_deps_context): Add a checked cast. (deps_init_id): Likewise. * sel-sched.c (convert_vec_av_set_to_ready): Likewise. (invoke_reorder_hooks): Strengthen local "arr" from rtx * to rtx_insn **. From-SVN: r214481
This commit is contained in:
parent
f0cb8ae0d9
commit
ce1ce33a03
25 changed files with 660 additions and 354 deletions
295
gcc/ChangeLog
295
gcc/ChangeLog
|
@ -1,3 +1,298 @@
|
||||||
|
2014-08-25 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* target.def (reorder): Strengthen param "ready" of this DEFHOOK
|
||||||
|
from rtx * to rtx_insn **.
|
||||||
|
(reorder2): Likewise.
|
||||||
|
(dependencies_evaluation_hook): Strengthen params "head", "tail"
|
||||||
|
from rtx to rtx_insn *.
|
||||||
|
|
||||||
|
* doc/tm.texi: Update mechanically for above change to target.def.
|
||||||
|
|
||||||
|
* sched-int.h (note_list): Strengthen this variable from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(remove_notes): Likewise for both params.
|
||||||
|
(restore_other_notes): Likewise for return type and first param.
|
||||||
|
(struct ready_list): Strengthen field "vec" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(struct dep_replacement): Strenghten field "insn" from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(struct deps_desc): Likewise for fields "last_debug_insn",
|
||||||
|
"last_args_size".
|
||||||
|
(struct haifa_sched_info): Likewise for callback field
|
||||||
|
"can_schedule_ready_p"'s param, for first param of "new_ready"
|
||||||
|
callback field, for both params of "rank" callback field, for
|
||||||
|
first field of "print_insn" callback field (with a const), for
|
||||||
|
both params of "contributes_to_priority" callback, for param
|
||||||
|
of "insn_finishes_block_p" callback, for fields "prev_head",
|
||||||
|
"next_tail", "head", "tail", for first param of "add_remove_insn"
|
||||||
|
callback, for first param of "begin_schedule_ready" callback, for
|
||||||
|
both params of "begin_move_insn" callback, and for second param
|
||||||
|
of "advance_target_bb" callback.
|
||||||
|
(add_dependence): Likewise for params 1 and 2.
|
||||||
|
(sched_analyze): Likewise for params 2 and 3.
|
||||||
|
(deps_analyze_insn): Likewise for param 2.
|
||||||
|
(ready_element): Likewise for return type.
|
||||||
|
(ready_lastpos): Strengthen return type from rtx * to rtx_insn **.
|
||||||
|
(try_ready): Strenghten param from rtx to rtx_insn *.
|
||||||
|
(sched_emit_insn): Likewise for return type.
|
||||||
|
(record_delay_slot_pair): Likewise for params 1 and 2.
|
||||||
|
(add_delay_dependencies): Likewise for param.
|
||||||
|
(contributes_to_priority): Likewise for both params.
|
||||||
|
(find_modifiable_mems): Likewise.
|
||||||
|
|
||||||
|
* config/arm/arm.c (cortexa7_sched_reorder): Strengthen param
|
||||||
|
"ready" from rtx * to rtx_insn **. Strengthen locals "insn",
|
||||||
|
"first_older_only_insn" from rtx to rtx_insn *.
|
||||||
|
(arm_sched_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
|
||||||
|
* config/c6x/c6x.c (struct c6x_sched_context): Strengthen field
|
||||||
|
"last_scheduled_iter0" from rtx to rtx_insn *.
|
||||||
|
(init_sched_state): Replace use of NULL_RTX with NULL for insn.
|
||||||
|
(c6x_sched_reorder_1): Strengthen param "ready" and locals
|
||||||
|
"e_ready", "insnp" from rtx * to rtx_insn **. Strengthen local
|
||||||
|
"insn" from rtx to rtx_insn *.
|
||||||
|
(c6x_sched_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(c6x_sched_reorder2): Strengthen param "ready" and locals
|
||||||
|
"e_ready", "insnp" from rtx * to rtx_insn **. Strengthen local
|
||||||
|
"insn" from rtx to rtx_insn *.
|
||||||
|
(c6x_variable_issue): Add a checked cast when assigning from insn
|
||||||
|
to ss.last_scheduled_iter0.
|
||||||
|
(split_delayed_branch): Strengthen param "insn" and local "i1"
|
||||||
|
from rtx to rtx_insn *.
|
||||||
|
(split_delayed_nonbranch): Likewise.
|
||||||
|
(undo_split_delayed_nonbranch): Likewise for local "insn".
|
||||||
|
(hwloop_optimize): Likewise for locals "seq", "insn", "prev",
|
||||||
|
"entry_after", "end_packet", "head_insn", "tail_insn",
|
||||||
|
"new_insns", "last_insn", "this_iter", "prev_stage_insn".
|
||||||
|
Strengthen locals "orig_vec", "copies", "insn_copies" from rtx *
|
||||||
|
to rtx_insn **. Remove now-redundant checked cast on last_insn,
|
||||||
|
but add a checked cast on loop->start_label. Consolidate calls to
|
||||||
|
avoid assigning result of gen_spkernel to "insn", now an
|
||||||
|
rtx_insn *.
|
||||||
|
|
||||||
|
* config/i386/i386.c (do_reorder_for_imul): Strengthen param
|
||||||
|
"ready" from rtx * to rtx_insn **. Strengthen local "insn" from
|
||||||
|
rtx to rtx_insn *.
|
||||||
|
(swap_top_of_ready_list): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **. Strengthen locals "top", "next" from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(ix86_sched_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **. Strengthen local "insn" from rtx to rtx_insn *.
|
||||||
|
(add_parameter_dependencies): Strengthen params "call", "head" and
|
||||||
|
locals "insn", "last", "first_arg" from rtx to rtx_insn *.
|
||||||
|
(avoid_func_arg_motion): Likewise for params "first_arg", "insn".
|
||||||
|
(add_dependee_for_func_arg): Likewise for param "arg" and local
|
||||||
|
"insn".
|
||||||
|
(ix86_dependencies_evaluation_hook): Likewise for params "head",
|
||||||
|
"tail" and locals "insn", "first_arg".
|
||||||
|
|
||||||
|
* config/ia64/ia64.c (ia64_dependencies_evaluation_hook): Likewise
|
||||||
|
for params "head", "tail" and locals "insn", "next", "next_tail".
|
||||||
|
(ia64_dfa_sched_reorder): Strengthen param "ready" and locals
|
||||||
|
"e_ready", "insnp" from rtx * to rtx_insn **. Strengthen locals
|
||||||
|
"insn", "lowest", "highest" from rtx to rtx_insn *.
|
||||||
|
(ia64_sched_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(ia64_sched_reorder2): Likewise.
|
||||||
|
|
||||||
|
* config/mep/mep.c (mep_find_ready_insn): Strengthen return type
|
||||||
|
and local "insn" from rtx to rtx_insn *. Strengthen param "ready"
|
||||||
|
from rtx * to rtx_insn **.
|
||||||
|
(mep_move_ready_insn): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(mep_print_sched_insn): Strengthen param "insn" from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(mep_sched_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **. Strengthen locals "core_insn", "cop_insn" from rtx
|
||||||
|
to rtx_insn *.
|
||||||
|
|
||||||
|
* config/mips/mips.c (mips_promote_ready): Strengthen param "ready"
|
||||||
|
from rtx * to rtx_insn **. Strengthen local "new_head" from rtx
|
||||||
|
to rtx_insn *.
|
||||||
|
(mips_maybe_swap_ready): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **. Strengthen local "temp" from rtx to rtx_insn *.
|
||||||
|
(mips_macc_chains_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(vr4130_reorder): Likewise.
|
||||||
|
(mips_74k_agen_reorder): Likewise. Strengthen local "insn" from
|
||||||
|
rtx to rtx_insn *.
|
||||||
|
(mips_sched_reorder_1): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(mips_sched_reorder): Likewise.
|
||||||
|
(mips_sched_reorder2): Likewise.
|
||||||
|
|
||||||
|
* config/picochip/picochip.c (picochip_sched_reorder): Likewise.
|
||||||
|
|
||||||
|
* config/rs6000/rs6000.c (rs6000_sched_reorder): Likewise.
|
||||||
|
Strengthen local "tmp" from rtx to rtx_insn *.
|
||||||
|
(rs6000_sched_reorder2): Likewise.
|
||||||
|
|
||||||
|
* config/s390/s390.c (s390_z10_prevent_earlyload_conflicts):
|
||||||
|
Likewise. Update sizeof(rtx) to sizeof(rtx_insn *) in memmove.
|
||||||
|
(s390_sched_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **. Strengthen local "tmp" from rtx to rtx_insn *.
|
||||||
|
|
||||||
|
* config/sh/sh.c (rank_for_reorder): Strengthen locals "tmp",
|
||||||
|
"tmp2" from rtx to rtx_insn *.
|
||||||
|
(swap_reorder): Strengthen param "a" from rtx * to rtx_insn **.
|
||||||
|
Strengthen local "insn" from rtx to rtx_insn *.
|
||||||
|
(ready_reorder): Strengthen param "ready" from rtx * to
|
||||||
|
rtx_insn **. Update sizeof(rtx) to sizeof(rtx_insn *) in qsort.
|
||||||
|
(sh_reorder): Strengthen param "ready" from rtx * to rtx_insn **.
|
||||||
|
(sh_reorder2): Likewise.
|
||||||
|
|
||||||
|
* config/spu/spu.c (spu_sched_reorder): Likewise. Strengthen
|
||||||
|
local "insn" from rtx to rtx_insn *.
|
||||||
|
|
||||||
|
* haifa-sched.c (note_list): Strengthen this variable from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(scheduled_insns): Strengthen this variable from vec<rtx> to
|
||||||
|
vec<rtx_insn *>.
|
||||||
|
(set_modulo_params): Likewise for locals "i1", "i2".
|
||||||
|
(record_delay_slot_pair): Likewise for params "i1", "i2".
|
||||||
|
(add_delay_dependencies): Likewise for param "insn".
|
||||||
|
(cond_clobbered_p): Likewise.
|
||||||
|
(recompute_todo_spec): Likewise for local "prev".
|
||||||
|
(last_scheduled_insn): Likewise for this variable.
|
||||||
|
(nonscheduled_insns_begin): Likewise.
|
||||||
|
(model_set_excess_costs): Strengthen param "insns" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(rank_for_schedule): Strengthen locals "tmp", "tmp2" from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(swap_sort): Strengthen param "a" from rtx * to rtx_insn **.
|
||||||
|
Strengthen local "insn" from rtx to rtx_insn *.
|
||||||
|
(queue_insn): Strengthen param "insn" from rtx to rtx_insn *.
|
||||||
|
(ready_lastpos): Strengthen return type from rtx * to rtx_insn **.
|
||||||
|
(ready_add): Strengthen param "insn" from rtx to rtx_insn *.
|
||||||
|
(ready_remove_first): Likewise for return type and local "t".
|
||||||
|
(ready_element): Likewise for return type.
|
||||||
|
(ready_remove): Likewise for return type and local "t".
|
||||||
|
(ready_sort): Strengthen local "first" from rtx * to rtx_insn **.
|
||||||
|
(check_clobbered_conditions): Strengthen local "x" from rtx to
|
||||||
|
rtx_insn *, adding a checked cast.
|
||||||
|
(schedule_insn): Likewise for param "insn".
|
||||||
|
(remove_notes): Likewise for params "head", "tail" and locals
|
||||||
|
"next_tail", "insn", "next".
|
||||||
|
(struct haifa_saved_data): Likewise for fields
|
||||||
|
"last_scheduled_insn", "nonscheduled_insns_begin".
|
||||||
|
(save_backtrack_point): Update for change to field "vec" of
|
||||||
|
struct ready_list.
|
||||||
|
(toggle_cancelled_flags): Strengthen local "first" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(restore_last_backtrack_point): Likewise. Strengthen local "insn"
|
||||||
|
from rtx to rtx_insn *
|
||||||
|
(resolve_dependencies): Strengthen param "insn" from rtx to
|
||||||
|
rtx_insn *
|
||||||
|
(restore_other_notes): Likewise for return type, for param "head"
|
||||||
|
and local "note_head".
|
||||||
|
(undo_all_replacements): Likewise for local "insn".
|
||||||
|
(first_nonscheduled_insn): Likewise for return type and local "insn".
|
||||||
|
(queue_to_ready): Likewise for local "insn", adding checked casts.
|
||||||
|
(early_queue_to_ready): Likewise for local "insn".
|
||||||
|
(debug_ready_list_1): Strengthen local "p" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(move_insn): Strengthen param "insn" and local "note" from rtx to
|
||||||
|
rtx_insn *
|
||||||
|
(insn_finishes_cycle_p): Likewise for param "insn".
|
||||||
|
(max_issue): Likewise for local "insn".
|
||||||
|
(choose_ready): Likewise. Strengthen param "insn_ptr" from rtx *
|
||||||
|
to rtx_insn **.
|
||||||
|
(commit_schedule): Strengthen param "prev_head" and local "insn"
|
||||||
|
from rtx to rtx_insn *
|
||||||
|
(prune_ready_list): Likewise for local "insn".
|
||||||
|
(schedule_block): Likewise for locals "prev_head", "head", "tail",
|
||||||
|
"skip_insn", "insn", "failed_insn", "x", adding a checked cast.
|
||||||
|
(set_priorities): Likewise for local "prev_head".
|
||||||
|
(try_ready): Likewise for param "next".
|
||||||
|
(fix_tick_ready): Likewise.
|
||||||
|
(change_queue_index): Likewise.
|
||||||
|
(sched_extend_ready_list): Update for change to field "vec" of
|
||||||
|
struct ready_list.
|
||||||
|
(generate_recovery_code): Strengthen param "insn" from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(begin_speculative_block): Likewise.
|
||||||
|
(create_check_block_twin): Likewise for param "insn" and locals
|
||||||
|
"label", "check", "twin". Introduce local "check_pat" to avoid
|
||||||
|
"check" being used as a plain rtx before being used as an insn.
|
||||||
|
(fix_recovery_deps): Add a checked cast to rtx_insn * when
|
||||||
|
extracting elements from ready_list.
|
||||||
|
(sched_remove_insn): Strengthen param "insn" from rtx to
|
||||||
|
rtx_insn *.
|
||||||
|
(sched_emit_insn): Likewise for return type.
|
||||||
|
(ready_remove_first_dispatch): Likewise for return type and local
|
||||||
|
"insn".
|
||||||
|
|
||||||
|
* hw-doloop.c (discover_loop): Add a checked cast to rtx_insn *.
|
||||||
|
|
||||||
|
* modulo-sched.c (sms_print_insn): Strengthen from const_rtx to
|
||||||
|
const rtx_insn *.
|
||||||
|
|
||||||
|
* sched-deps.c (add_dependence): Strengthen params "con", "pro"
|
||||||
|
from rtx to rtx_insn *.
|
||||||
|
(add_dependence_list): Likewise for param "insn". Add a checked
|
||||||
|
cast.
|
||||||
|
(add_dependence_list_and_free): Strengthen param "insn" from rtx
|
||||||
|
to rtx_insn *. Strengthen param "list_p" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
(chain_to_prev_insn): Strengthen param "insn" and locals
|
||||||
|
"prec_nonnote", "i" from rtx to rtx_insn *.
|
||||||
|
(flush_pending_lists): Likewise for param "insn".
|
||||||
|
(cur_insn): Likewise for this variable.
|
||||||
|
(haifa_start_insn): Add a checked cast.
|
||||||
|
(note_dep): Strengthen param "e" from rtx to rtx_insn *.
|
||||||
|
(sched_analyze_reg): Likewise for param "insn".
|
||||||
|
(sched_analyze_1): Likewise.
|
||||||
|
(sched_analyze_2): Likewise. Add checked casts.
|
||||||
|
(sched_analyze_insn): Likewise. Also for local "prev".
|
||||||
|
(deps_analyze_insn): Likewise for param "insn".
|
||||||
|
(sched_analyze): Likewise for params "head", "tail" and local "insn".
|
||||||
|
(add_dependence_1): Likewise for params "insn", "elem".
|
||||||
|
(struct mem_inc_info): Likewise for fields "inc_insn", "mem_insn".
|
||||||
|
(parse_add_or_inc): Likewise for param "insn".
|
||||||
|
(find_inc): Likewise for local "inc_cand".
|
||||||
|
(find_modifiable_mems): Likewise for params "head", "tail" and
|
||||||
|
locals "insn", "next_tail".
|
||||||
|
|
||||||
|
* sched-ebb.c (init_ready_list): Likewise for local "insn".
|
||||||
|
(begin_schedule_ready): Likewise for param "insn".
|
||||||
|
(begin_move_insn): Likewise for params "insn" and "last".
|
||||||
|
(ebb_print_insn): Strengthen param "insn" from const_rtx to
|
||||||
|
const rtx_insn *.
|
||||||
|
(rank): Strengthen params "insn1", "insn2" from rtx to rtx_insn *.
|
||||||
|
(ebb_contributes_to_priority): Likewise for params "next", "insn".
|
||||||
|
(ebb_add_remove_insn): Likewise for param "insn".
|
||||||
|
(advance_target_bb): Likewise.
|
||||||
|
|
||||||
|
* sched-rgn.c (rgn_estimate_number_of_insns): Likewise for local
|
||||||
|
"insn".
|
||||||
|
(check_live): Likewise for param "insn".
|
||||||
|
(init_ready_list): Likewise for local "insn".
|
||||||
|
(can_schedule_ready_p): Likewise for param "insn".
|
||||||
|
(begin_schedule_ready): Likewise.
|
||||||
|
(new_ready): Likewise for param "next".
|
||||||
|
(rgn_print_insn): Likewise for param "insn".
|
||||||
|
(rgn_rank): Likewise for params "insn1", "insn2".
|
||||||
|
(contributes_to_priority): Likewise for params "next", "insn".
|
||||||
|
(rgn_insn_finishes_block_p): Likewise for param "insn".
|
||||||
|
(add_branch_dependences): Likewise for params "head", "tail" and
|
||||||
|
locals "insn", "last".
|
||||||
|
(rgn_add_remove_insn): Likewise for param "insn".
|
||||||
|
(advance_target_bb): Likewise.
|
||||||
|
|
||||||
|
* sel-sched-dump.c (sel_print_insn): Strengthen param "insn" from
|
||||||
|
const_rtx to const rtx_insn *.
|
||||||
|
|
||||||
|
* sel-sched-dump.h (sel_print_insn): Likewise.
|
||||||
|
|
||||||
|
* sel-sched-ir.c (advance_deps_context): Add a checked cast.
|
||||||
|
(deps_init_id): Likewise.
|
||||||
|
|
||||||
|
* sel-sched.c (convert_vec_av_set_to_ready): Likewise.
|
||||||
|
(invoke_reorder_hooks): Strengthen local "arr" from rtx * to
|
||||||
|
rtx_insn **.
|
||||||
|
|
||||||
2014-08-25 David Malcolm <dmalcolm@redhat.com>
|
2014-08-25 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* output.h (final_start_function): Strengthen param 1 from rtx to
|
* output.h (final_start_function): Strengthen param 1 from rtx to
|
||||||
|
|
|
@ -138,7 +138,7 @@ static void arm_output_function_prologue (FILE *, HOST_WIDE_INT);
|
||||||
static int arm_comp_type_attributes (const_tree, const_tree);
|
static int arm_comp_type_attributes (const_tree, const_tree);
|
||||||
static void arm_set_default_type_attributes (tree);
|
static void arm_set_default_type_attributes (tree);
|
||||||
static int arm_adjust_cost (rtx, rtx, rtx, int);
|
static int arm_adjust_cost (rtx, rtx, rtx, int);
|
||||||
static int arm_sched_reorder (FILE *, int, rtx *, int *, int);
|
static int arm_sched_reorder (FILE *, int, rtx_insn **, int *, int);
|
||||||
static int optimal_immediate_sequence (enum rtx_code code,
|
static int optimal_immediate_sequence (enum rtx_code code,
|
||||||
unsigned HOST_WIDE_INT val,
|
unsigned HOST_WIDE_INT val,
|
||||||
struct four_ints *return_sequence);
|
struct four_ints *return_sequence);
|
||||||
|
@ -11797,8 +11797,8 @@ cortexa7_younger (FILE *file, int verbose, rtx insn)
|
||||||
instructions. This heuristic may affect dual issue opportunities
|
instructions. This heuristic may affect dual issue opportunities
|
||||||
in the current cycle. */
|
in the current cycle. */
|
||||||
static void
|
static void
|
||||||
cortexa7_sched_reorder (FILE *file, int verbose, rtx *ready, int *n_readyp,
|
cortexa7_sched_reorder (FILE *file, int verbose, rtx_insn **ready,
|
||||||
int clock)
|
int *n_readyp, int clock)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int first_older_only = -1, first_younger = -1;
|
int first_older_only = -1, first_younger = -1;
|
||||||
|
@ -11815,7 +11815,7 @@ cortexa7_sched_reorder (FILE *file, int verbose, rtx *ready, int *n_readyp,
|
||||||
older. */
|
older. */
|
||||||
for (i = *n_readyp - 1; i >= 0; i--)
|
for (i = *n_readyp - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
rtx insn = ready[i];
|
rtx_insn *insn = ready[i];
|
||||||
if (cortexa7_older_only (insn))
|
if (cortexa7_older_only (insn))
|
||||||
{
|
{
|
||||||
first_older_only = i;
|
first_older_only = i;
|
||||||
|
@ -11850,7 +11850,7 @@ cortexa7_sched_reorder (FILE *file, int verbose, rtx *ready, int *n_readyp,
|
||||||
fprintf (file, ";; cortexa7_sched_reorder insn %d before %d\n",
|
fprintf (file, ";; cortexa7_sched_reorder insn %d before %d\n",
|
||||||
INSN_UID(ready [first_older_only]),
|
INSN_UID(ready [first_older_only]),
|
||||||
INSN_UID(ready [first_younger]));
|
INSN_UID(ready [first_younger]));
|
||||||
rtx first_older_only_insn = ready [first_older_only];
|
rtx_insn *first_older_only_insn = ready [first_older_only];
|
||||||
for (i = first_older_only; i < first_younger; i++)
|
for (i = first_older_only; i < first_younger; i++)
|
||||||
{
|
{
|
||||||
ready[i] = ready[i+1];
|
ready[i] = ready[i+1];
|
||||||
|
@ -11862,7 +11862,7 @@ cortexa7_sched_reorder (FILE *file, int verbose, rtx *ready, int *n_readyp,
|
||||||
|
|
||||||
/* Implement TARGET_SCHED_REORDER. */
|
/* Implement TARGET_SCHED_REORDER. */
|
||||||
static int
|
static int
|
||||||
arm_sched_reorder (FILE *file, int verbose, rtx *ready, int *n_readyp,
|
arm_sched_reorder (FILE *file, int verbose, rtx_insn **ready, int *n_readyp,
|
||||||
int clock)
|
int clock)
|
||||||
{
|
{
|
||||||
switch (arm_tune)
|
switch (arm_tune)
|
||||||
|
|
|
@ -3615,7 +3615,7 @@ typedef struct c6x_sched_context
|
||||||
/* The following variable value is the last issued insn. */
|
/* The following variable value is the last issued insn. */
|
||||||
rtx last_scheduled_insn;
|
rtx last_scheduled_insn;
|
||||||
/* The last issued insn that isn't a shadow of another. */
|
/* The last issued insn that isn't a shadow of another. */
|
||||||
rtx last_scheduled_iter0;
|
rtx_insn *last_scheduled_iter0;
|
||||||
|
|
||||||
/* The following variable value is DFA state before issuing the
|
/* The following variable value is DFA state before issuing the
|
||||||
first insn in the current clock cycle. We do not use this member
|
first insn in the current clock cycle. We do not use this member
|
||||||
|
@ -3845,7 +3845,7 @@ static void
|
||||||
init_sched_state (c6x_sched_context_t sc)
|
init_sched_state (c6x_sched_context_t sc)
|
||||||
{
|
{
|
||||||
sc->last_scheduled_insn = NULL_RTX;
|
sc->last_scheduled_insn = NULL_RTX;
|
||||||
sc->last_scheduled_iter0 = NULL_RTX;
|
sc->last_scheduled_iter0 = NULL;
|
||||||
sc->issued_this_cycle = 0;
|
sc->issued_this_cycle = 0;
|
||||||
memset (sc->jump_cycles, 0, sizeof sc->jump_cycles);
|
memset (sc->jump_cycles, 0, sizeof sc->jump_cycles);
|
||||||
memset (sc->jump_cond, 0, sizeof sc->jump_cond);
|
memset (sc->jump_cond, 0, sizeof sc->jump_cond);
|
||||||
|
@ -4132,11 +4132,11 @@ c6x_registers_update (rtx insn)
|
||||||
number of non-unsafe insns. */
|
number of non-unsafe insns. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
c6x_sched_reorder_1 (rtx *ready, int *pn_ready, int clock_var)
|
c6x_sched_reorder_1 (rtx_insn **ready, int *pn_ready, int clock_var)
|
||||||
{
|
{
|
||||||
int n_ready = *pn_ready;
|
int n_ready = *pn_ready;
|
||||||
rtx *e_ready = ready + n_ready;
|
rtx_insn **e_ready = ready + n_ready;
|
||||||
rtx *insnp;
|
rtx_insn **insnp;
|
||||||
int first_jump;
|
int first_jump;
|
||||||
|
|
||||||
/* Keep track of conflicts due to a limit number of register accesses,
|
/* Keep track of conflicts due to a limit number of register accesses,
|
||||||
|
@ -4145,7 +4145,7 @@ c6x_sched_reorder_1 (rtx *ready, int *pn_ready, int clock_var)
|
||||||
|
|
||||||
for (insnp = ready; insnp < e_ready; insnp++)
|
for (insnp = ready; insnp < e_ready; insnp++)
|
||||||
{
|
{
|
||||||
rtx insn = *insnp;
|
rtx_insn *insn = *insnp;
|
||||||
int icode = recog_memoized (insn);
|
int icode = recog_memoized (insn);
|
||||||
bool is_asm = (icode < 0
|
bool is_asm = (icode < 0
|
||||||
&& (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
&& (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
||||||
|
@ -4206,7 +4206,7 @@ c6x_sched_reorder_1 (rtx *ready, int *pn_ready, int clock_var)
|
||||||
|
|
||||||
for (insnp = ready; insnp < e_ready; insnp++)
|
for (insnp = ready; insnp < e_ready; insnp++)
|
||||||
{
|
{
|
||||||
rtx insn = *insnp;
|
rtx_insn *insn = *insnp;
|
||||||
int icode = recog_memoized (insn);
|
int icode = recog_memoized (insn);
|
||||||
bool is_asm = (icode < 0
|
bool is_asm = (icode < 0
|
||||||
&& (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
&& (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
||||||
|
@ -4249,7 +4249,7 @@ c6x_sched_reorder_1 (rtx *ready, int *pn_ready, int clock_var)
|
||||||
static int
|
static int
|
||||||
c6x_sched_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
c6x_sched_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
int sched_verbose ATTRIBUTE_UNUSED,
|
int sched_verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready ATTRIBUTE_UNUSED,
|
rtx_insn **ready ATTRIBUTE_UNUSED,
|
||||||
int *pn_ready ATTRIBUTE_UNUSED, int clock_var)
|
int *pn_ready ATTRIBUTE_UNUSED, int clock_var)
|
||||||
{
|
{
|
||||||
ss.curr_sched_clock = clock_var;
|
ss.curr_sched_clock = clock_var;
|
||||||
|
@ -4269,7 +4269,7 @@ c6x_sched_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
static int
|
static int
|
||||||
c6x_sched_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
c6x_sched_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
int sched_verbose ATTRIBUTE_UNUSED,
|
int sched_verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready ATTRIBUTE_UNUSED,
|
rtx_insn **ready ATTRIBUTE_UNUSED,
|
||||||
int *pn_ready ATTRIBUTE_UNUSED, int clock_var)
|
int *pn_ready ATTRIBUTE_UNUSED, int clock_var)
|
||||||
{
|
{
|
||||||
/* FIXME: the assembler rejects labels inside an execute packet.
|
/* FIXME: the assembler rejects labels inside an execute packet.
|
||||||
|
@ -4282,12 +4282,12 @@ c6x_sched_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
&& get_attr_type (ss.last_scheduled_insn) == TYPE_ATOMIC))
|
&& get_attr_type (ss.last_scheduled_insn) == TYPE_ATOMIC))
|
||||||
{
|
{
|
||||||
int n_ready = *pn_ready;
|
int n_ready = *pn_ready;
|
||||||
rtx *e_ready = ready + n_ready;
|
rtx_insn **e_ready = ready + n_ready;
|
||||||
rtx *insnp;
|
rtx_insn **insnp;
|
||||||
|
|
||||||
for (insnp = ready; insnp < e_ready; insnp++)
|
for (insnp = ready; insnp < e_ready; insnp++)
|
||||||
{
|
{
|
||||||
rtx insn = *insnp;
|
rtx_insn *insn = *insnp;
|
||||||
if (!shadow_p (insn))
|
if (!shadow_p (insn))
|
||||||
{
|
{
|
||||||
memmove (ready + 1, ready, (insnp - ready) * sizeof (rtx));
|
memmove (ready + 1, ready, (insnp - ready) * sizeof (rtx));
|
||||||
|
@ -4362,7 +4362,7 @@ c6x_variable_issue (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
ss.last_scheduled_insn = insn;
|
ss.last_scheduled_insn = insn;
|
||||||
if (INSN_UID (insn) < sploop_max_uid_iter0 && !JUMP_P (insn))
|
if (INSN_UID (insn) < sploop_max_uid_iter0 && !JUMP_P (insn))
|
||||||
ss.last_scheduled_iter0 = insn;
|
ss.last_scheduled_iter0 = as_a <rtx_insn *> (insn);
|
||||||
if (GET_CODE (PATTERN (insn)) != USE && GET_CODE (PATTERN (insn)) != CLOBBER)
|
if (GET_CODE (PATTERN (insn)) != USE && GET_CODE (PATTERN (insn)) != CLOBBER)
|
||||||
ss.issued_this_cycle++;
|
ss.issued_this_cycle++;
|
||||||
if (insn_info.exists ())
|
if (insn_info.exists ())
|
||||||
|
@ -5152,10 +5152,11 @@ reorg_emit_nops (rtx *call_labels)
|
||||||
/* If possible, split INSN, which we know is either a jump or a call, into a real
|
/* If possible, split INSN, which we know is either a jump or a call, into a real
|
||||||
insn and its shadow. */
|
insn and its shadow. */
|
||||||
static void
|
static void
|
||||||
split_delayed_branch (rtx insn)
|
split_delayed_branch (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
int code = recog_memoized (insn);
|
int code = recog_memoized (insn);
|
||||||
rtx i1, newpat;
|
rtx_insn *i1;
|
||||||
|
rtx newpat;
|
||||||
rtx pat = PATTERN (insn);
|
rtx pat = PATTERN (insn);
|
||||||
|
|
||||||
if (GET_CODE (pat) == COND_EXEC)
|
if (GET_CODE (pat) == COND_EXEC)
|
||||||
|
@ -5258,11 +5259,12 @@ split_delayed_branch (rtx insn)
|
||||||
with the possibility. Currently we handle loads and most mpy2 and
|
with the possibility. Currently we handle loads and most mpy2 and
|
||||||
mpy4 insns. */
|
mpy4 insns. */
|
||||||
static bool
|
static bool
|
||||||
split_delayed_nonbranch (rtx insn)
|
split_delayed_nonbranch (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
int code = recog_memoized (insn);
|
int code = recog_memoized (insn);
|
||||||
enum attr_type type;
|
enum attr_type type;
|
||||||
rtx i1, newpat, src, dest;
|
rtx_insn *i1;
|
||||||
|
rtx newpat, src, dest;
|
||||||
rtx pat = PATTERN (insn);
|
rtx pat = PATTERN (insn);
|
||||||
rtvec rtv;
|
rtvec rtv;
|
||||||
int delay;
|
int delay;
|
||||||
|
@ -5370,7 +5372,7 @@ undo_split_delayed_nonbranch (rtx insn)
|
||||||
static void
|
static void
|
||||||
split_delayed_insns (void)
|
split_delayed_insns (void)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
|
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
|
||||||
{
|
{
|
||||||
if (JUMP_P (insn) || CALL_P (insn))
|
if (JUMP_P (insn) || CALL_P (insn))
|
||||||
|
@ -5512,17 +5514,17 @@ static bool
|
||||||
hwloop_optimize (hwloop_info loop)
|
hwloop_optimize (hwloop_info loop)
|
||||||
{
|
{
|
||||||
basic_block entry_bb, bb;
|
basic_block entry_bb, bb;
|
||||||
rtx seq, insn, prev, entry_after, end_packet;
|
rtx_insn *seq, *insn, *prev, *entry_after, *end_packet;
|
||||||
rtx head_insn, tail_insn, new_insns, last_insn;
|
rtx_insn *head_insn, *tail_insn, *new_insns, *last_insn;
|
||||||
int loop_earliest;
|
int loop_earliest;
|
||||||
int n_execute_packets;
|
int n_execute_packets;
|
||||||
edge entry_edge;
|
edge entry_edge;
|
||||||
unsigned ix;
|
unsigned ix;
|
||||||
int max_uid_before, delayed_splits;
|
int max_uid_before, delayed_splits;
|
||||||
int i, sp_ii, min_ii, max_ii, max_parallel, n_insns, n_real_insns, stages;
|
int i, sp_ii, min_ii, max_ii, max_parallel, n_insns, n_real_insns, stages;
|
||||||
rtx *orig_vec;
|
rtx_insn **orig_vec;
|
||||||
rtx *copies;
|
rtx_insn **copies;
|
||||||
rtx **insn_copies;
|
rtx_insn ***insn_copies;
|
||||||
|
|
||||||
if (!c6x_flag_modulo_sched || !c6x_flag_schedule_insns2
|
if (!c6x_flag_modulo_sched || !c6x_flag_schedule_insns2
|
||||||
|| !TARGET_INSNS_64PLUS)
|
|| !TARGET_INSNS_64PLUS)
|
||||||
|
@ -5587,7 +5589,7 @@ hwloop_optimize (hwloop_info loop)
|
||||||
if (NONDEBUG_INSN_P (insn) && insn != loop->loop_end)
|
if (NONDEBUG_INSN_P (insn) && insn != loop->loop_end)
|
||||||
n_real_insns++;
|
n_real_insns++;
|
||||||
}
|
}
|
||||||
orig_vec = XNEWVEC (rtx, n_insns);
|
orig_vec = XNEWVEC (rtx_insn *, n_insns);
|
||||||
n_insns = 0;
|
n_insns = 0;
|
||||||
FOR_BB_INSNS (bb, insn)
|
FOR_BB_INSNS (bb, insn)
|
||||||
orig_vec[n_insns++] = insn;
|
orig_vec[n_insns++] = insn;
|
||||||
|
@ -5605,8 +5607,8 @@ hwloop_optimize (hwloop_info loop)
|
||||||
to handle. */
|
to handle. */
|
||||||
max_parallel = loop_earliest / min_ii + 1;
|
max_parallel = loop_earliest / min_ii + 1;
|
||||||
|
|
||||||
copies = XCNEWVEC (rtx, (max_parallel + 1) * n_real_insns);
|
copies = XCNEWVEC (rtx_insn *, (max_parallel + 1) * n_real_insns);
|
||||||
insn_copies = XNEWVEC (rtx *, max_parallel + 1);
|
insn_copies = XNEWVEC (rtx_insn **, max_parallel + 1);
|
||||||
for (i = 0; i < max_parallel + 1; i++)
|
for (i = 0; i < max_parallel + 1; i++)
|
||||||
insn_copies[i] = copies + i * n_real_insns;
|
insn_copies[i] = copies + i * n_real_insns;
|
||||||
|
|
||||||
|
@ -5626,20 +5628,20 @@ hwloop_optimize (hwloop_info loop)
|
||||||
for (i = 0; i < max_parallel; i++)
|
for (i = 0; i < max_parallel; i++)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
rtx this_iter;
|
rtx_insn *this_iter;
|
||||||
|
|
||||||
this_iter = duplicate_insn_chain (head_insn, tail_insn);
|
this_iter = duplicate_insn_chain (head_insn, tail_insn);
|
||||||
j = 0;
|
j = 0;
|
||||||
while (this_iter)
|
while (this_iter)
|
||||||
{
|
{
|
||||||
rtx prev_stage_insn = insn_copies[i][j];
|
rtx_insn *prev_stage_insn = insn_copies[i][j];
|
||||||
gcc_assert (INSN_CODE (this_iter) == INSN_CODE (prev_stage_insn));
|
gcc_assert (INSN_CODE (this_iter) == INSN_CODE (prev_stage_insn));
|
||||||
|
|
||||||
if (INSN_CODE (this_iter) >= 0
|
if (INSN_CODE (this_iter) >= 0
|
||||||
&& (get_attr_type (this_iter) == TYPE_LOAD_SHADOW
|
&& (get_attr_type (this_iter) == TYPE_LOAD_SHADOW
|
||||||
|| get_attr_type (this_iter) == TYPE_MULT_SHADOW))
|
|| get_attr_type (this_iter) == TYPE_MULT_SHADOW))
|
||||||
{
|
{
|
||||||
rtx prev = PREV_INSN (this_iter);
|
rtx_insn *prev = PREV_INSN (this_iter);
|
||||||
record_delay_slot_pair (prev, this_iter,
|
record_delay_slot_pair (prev, this_iter,
|
||||||
get_attr_cycles (prev) - 1, 0);
|
get_attr_cycles (prev) - 1, 0);
|
||||||
}
|
}
|
||||||
|
@ -5670,9 +5672,7 @@ hwloop_optimize (hwloop_info loop)
|
||||||
schedule_ebbs_init ();
|
schedule_ebbs_init ();
|
||||||
set_modulo_params (sp_ii, max_parallel, n_real_insns,
|
set_modulo_params (sp_ii, max_parallel, n_real_insns,
|
||||||
sploop_max_uid_iter0);
|
sploop_max_uid_iter0);
|
||||||
tmp_bb = schedule_ebb (BB_HEAD (bb),
|
tmp_bb = schedule_ebb (BB_HEAD (bb), last_insn, true);
|
||||||
safe_as_a <rtx_insn *> (last_insn),
|
|
||||||
true);
|
|
||||||
schedule_ebbs_finish ();
|
schedule_ebbs_finish ();
|
||||||
|
|
||||||
if (tmp_bb)
|
if (tmp_bb)
|
||||||
|
@ -5725,9 +5725,11 @@ hwloop_optimize (hwloop_info loop)
|
||||||
|
|
||||||
/* Compute the number of execute packets the pipelined form of the loop will
|
/* Compute the number of execute packets the pipelined form of the loop will
|
||||||
require. */
|
require. */
|
||||||
prev = NULL_RTX;
|
prev = NULL;
|
||||||
n_execute_packets = 0;
|
n_execute_packets = 0;
|
||||||
for (insn = loop->start_label; insn != loop->loop_end; insn = NEXT_INSN (insn))
|
for (insn = as_a <rtx_insn *> (loop->start_label);
|
||||||
|
insn != loop->loop_end;
|
||||||
|
insn = NEXT_INSN (insn))
|
||||||
{
|
{
|
||||||
if (NONDEBUG_INSN_P (insn) && GET_MODE (insn) == TImode
|
if (NONDEBUG_INSN_P (insn) && GET_MODE (insn) == TImode
|
||||||
&& !shadow_p (insn))
|
&& !shadow_p (insn))
|
||||||
|
@ -5762,9 +5764,10 @@ hwloop_optimize (hwloop_info loop)
|
||||||
spot. */
|
spot. */
|
||||||
PUT_MODE (end_packet, VOIDmode);
|
PUT_MODE (end_packet, VOIDmode);
|
||||||
|
|
||||||
insn = gen_spkernel (GEN_INT (stages - 1),
|
insn = emit_jump_insn_before (
|
||||||
const0_rtx, JUMP_LABEL (loop->loop_end));
|
gen_spkernel (GEN_INT (stages - 1),
|
||||||
insn = emit_jump_insn_before (insn, end_packet);
|
const0_rtx, JUMP_LABEL (loop->loop_end)),
|
||||||
|
end_packet);
|
||||||
JUMP_LABEL (insn) = JUMP_LABEL (loop->loop_end);
|
JUMP_LABEL (insn) = JUMP_LABEL (loop->loop_end);
|
||||||
insn_set_clock (insn, loop_earliest);
|
insn_set_clock (insn, loop_earliest);
|
||||||
PUT_MODE (insn, TImode);
|
PUT_MODE (insn, TImode);
|
||||||
|
|
|
@ -25944,9 +25944,10 @@ ix86_macro_fusion_pair_p (rtx condgen, rtx condjmp)
|
||||||
ready list.
|
ready list.
|
||||||
Return index of IMUL producer if it was found and -1 otherwise. */
|
Return index of IMUL producer if it was found and -1 otherwise. */
|
||||||
static int
|
static int
|
||||||
do_reorder_for_imul (rtx *ready, int n_ready)
|
do_reorder_for_imul (rtx_insn **ready, int n_ready)
|
||||||
{
|
{
|
||||||
rtx insn, set, insn1, insn2;
|
rtx_insn *insn;
|
||||||
|
rtx set, insn1, insn2;
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
dep_t dep;
|
dep_t dep;
|
||||||
int index = -1;
|
int index = -1;
|
||||||
|
@ -26021,10 +26022,10 @@ do_reorder_for_imul (rtx *ready, int n_ready)
|
||||||
scheduled earlier. Applied for Silvermont only.
|
scheduled earlier. Applied for Silvermont only.
|
||||||
Return true if top 2 insns must be interchanged. */
|
Return true if top 2 insns must be interchanged. */
|
||||||
static bool
|
static bool
|
||||||
swap_top_of_ready_list (rtx *ready, int n_ready)
|
swap_top_of_ready_list (rtx_insn **ready, int n_ready)
|
||||||
{
|
{
|
||||||
rtx top = ready[n_ready - 1];
|
rtx_insn *top = ready[n_ready - 1];
|
||||||
rtx next = ready[n_ready - 2];
|
rtx_insn *next = ready[n_ready - 2];
|
||||||
rtx set;
|
rtx set;
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
dep_t dep;
|
dep_t dep;
|
||||||
|
@ -26092,13 +26093,13 @@ swap_top_of_ready_list (rtx *ready, int n_ready)
|
||||||
/* Perform possible reodering of ready list for Atom/Silvermont only.
|
/* Perform possible reodering of ready list for Atom/Silvermont only.
|
||||||
Return issue rate. */
|
Return issue rate. */
|
||||||
static int
|
static int
|
||||||
ix86_sched_reorder (FILE *dump, int sched_verbose, rtx *ready, int *pn_ready,
|
ix86_sched_reorder (FILE *dump, int sched_verbose, rtx_insn **ready,
|
||||||
int clock_var)
|
int *pn_ready, int clock_var)
|
||||||
{
|
{
|
||||||
int issue_rate = -1;
|
int issue_rate = -1;
|
||||||
int n_ready = *pn_ready;
|
int n_ready = *pn_ready;
|
||||||
int i;
|
int i;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
int index = -1;
|
int index = -1;
|
||||||
|
|
||||||
/* Set up issue rate. */
|
/* Set up issue rate. */
|
||||||
|
@ -26178,12 +26179,12 @@ insn_is_function_arg (rtx insn, bool* is_spilled)
|
||||||
/* Add output dependencies for chain of function adjacent arguments if only
|
/* Add output dependencies for chain of function adjacent arguments if only
|
||||||
there is a move to likely spilled HW register. Return first argument
|
there is a move to likely spilled HW register. Return first argument
|
||||||
if at least one dependence was added or NULL otherwise. */
|
if at least one dependence was added or NULL otherwise. */
|
||||||
static rtx
|
static rtx_insn *
|
||||||
add_parameter_dependencies (rtx call, rtx head)
|
add_parameter_dependencies (rtx_insn *call, rtx_insn *head)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
rtx last = call;
|
rtx_insn *last = call;
|
||||||
rtx first_arg = NULL;
|
rtx_insn *first_arg = NULL;
|
||||||
bool is_spilled = false;
|
bool is_spilled = false;
|
||||||
|
|
||||||
head = PREV_INSN (head);
|
head = PREV_INSN (head);
|
||||||
|
@ -26233,7 +26234,7 @@ add_parameter_dependencies (rtx call, rtx head)
|
||||||
/* Add output or anti dependency from insn to first_arg to restrict its code
|
/* Add output or anti dependency from insn to first_arg to restrict its code
|
||||||
motion. */
|
motion. */
|
||||||
static void
|
static void
|
||||||
avoid_func_arg_motion (rtx first_arg, rtx insn)
|
avoid_func_arg_motion (rtx_insn *first_arg, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
rtx set;
|
rtx set;
|
||||||
rtx tmp;
|
rtx tmp;
|
||||||
|
@ -26255,9 +26256,9 @@ avoid_func_arg_motion (rtx first_arg, rtx insn)
|
||||||
/* Avoid cross block motion of function argument through adding dependency
|
/* Avoid cross block motion of function argument through adding dependency
|
||||||
from the first non-jump instruction in bb. */
|
from the first non-jump instruction in bb. */
|
||||||
static void
|
static void
|
||||||
add_dependee_for_func_arg (rtx arg, basic_block bb)
|
add_dependee_for_func_arg (rtx_insn *arg, basic_block bb)
|
||||||
{
|
{
|
||||||
rtx insn = BB_END (bb);
|
rtx_insn *insn = BB_END (bb);
|
||||||
|
|
||||||
while (insn)
|
while (insn)
|
||||||
{
|
{
|
||||||
|
@ -26279,10 +26280,10 @@ add_dependee_for_func_arg (rtx arg, basic_block bb)
|
||||||
/* Hook for pre-reload schedule - avoid motion of function arguments
|
/* Hook for pre-reload schedule - avoid motion of function arguments
|
||||||
passed in likely spilled HW registers. */
|
passed in likely spilled HW registers. */
|
||||||
static void
|
static void
|
||||||
ix86_dependencies_evaluation_hook (rtx head, rtx tail)
|
ix86_dependencies_evaluation_hook (rtx_insn *head, rtx_insn *tail)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
rtx first_arg = NULL;
|
rtx_insn *first_arg = NULL;
|
||||||
if (reload_completed)
|
if (reload_completed)
|
||||||
return;
|
return;
|
||||||
while (head != tail && DEBUG_INSN_P (head))
|
while (head != tail && DEBUG_INSN_P (head))
|
||||||
|
|
|
@ -166,7 +166,7 @@ static struct ia64_frame_info current_frame_info;
|
||||||
static int emitted_frame_related_regs[number_of_ia64_frame_regs];
|
static int emitted_frame_related_regs[number_of_ia64_frame_regs];
|
||||||
|
|
||||||
static int ia64_first_cycle_multipass_dfa_lookahead (void);
|
static int ia64_first_cycle_multipass_dfa_lookahead (void);
|
||||||
static void ia64_dependencies_evaluation_hook (rtx, rtx);
|
static void ia64_dependencies_evaluation_hook (rtx_insn *, rtx_insn *);
|
||||||
static void ia64_init_dfa_pre_cycle_insn (void);
|
static void ia64_init_dfa_pre_cycle_insn (void);
|
||||||
static rtx ia64_dfa_pre_cycle_insn (void);
|
static rtx ia64_dfa_pre_cycle_insn (void);
|
||||||
static int ia64_first_cycle_multipass_dfa_lookahead_guard (rtx, int);
|
static int ia64_first_cycle_multipass_dfa_lookahead_guard (rtx, int);
|
||||||
|
@ -255,9 +255,9 @@ static void ia64_sched_init (FILE *, int, int);
|
||||||
static void ia64_sched_init_global (FILE *, int, int);
|
static void ia64_sched_init_global (FILE *, int, int);
|
||||||
static void ia64_sched_finish_global (FILE *, int);
|
static void ia64_sched_finish_global (FILE *, int);
|
||||||
static void ia64_sched_finish (FILE *, int);
|
static void ia64_sched_finish (FILE *, int);
|
||||||
static int ia64_dfa_sched_reorder (FILE *, int, rtx *, int *, int, int);
|
static int ia64_dfa_sched_reorder (FILE *, int, rtx_insn **, int *, int, int);
|
||||||
static int ia64_sched_reorder (FILE *, int, rtx *, int *, int);
|
static int ia64_sched_reorder (FILE *, int, rtx_insn **, int *, int);
|
||||||
static int ia64_sched_reorder2 (FILE *, int, rtx *, int *, int);
|
static int ia64_sched_reorder2 (FILE *, int, rtx_insn **, int *, int);
|
||||||
static int ia64_variable_issue (FILE *, int, rtx, int);
|
static int ia64_variable_issue (FILE *, int, rtx, int);
|
||||||
|
|
||||||
static void ia64_asm_unwind_emit (FILE *, rtx);
|
static void ia64_asm_unwind_emit (FILE *, rtx);
|
||||||
|
@ -7233,9 +7233,9 @@ ia64_emit_insn_before (rtx insn, rtx before)
|
||||||
`ia64_produce_address_p' and the DFA descriptions). */
|
`ia64_produce_address_p' and the DFA descriptions). */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ia64_dependencies_evaluation_hook (rtx head, rtx tail)
|
ia64_dependencies_evaluation_hook (rtx_insn *head, rtx_insn *tail)
|
||||||
{
|
{
|
||||||
rtx insn, next, next_tail;
|
rtx_insn *insn, *next, *next_tail;
|
||||||
|
|
||||||
/* Before reload, which_alternative is not set, which means that
|
/* Before reload, which_alternative is not set, which means that
|
||||||
ia64_safe_itanium_class will produce wrong results for (at least)
|
ia64_safe_itanium_class will produce wrong results for (at least)
|
||||||
|
@ -7364,14 +7364,14 @@ record_memory_reference (rtx insn)
|
||||||
Override the default sort algorithm to better slot instructions. */
|
Override the default sort algorithm to better slot instructions. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ia64_dfa_sched_reorder (FILE *dump, int sched_verbose, rtx *ready,
|
ia64_dfa_sched_reorder (FILE *dump, int sched_verbose, rtx_insn **ready,
|
||||||
int *pn_ready, int clock_var,
|
int *pn_ready, int clock_var,
|
||||||
int reorder_type)
|
int reorder_type)
|
||||||
{
|
{
|
||||||
int n_asms;
|
int n_asms;
|
||||||
int n_ready = *pn_ready;
|
int n_ready = *pn_ready;
|
||||||
rtx *e_ready = ready + n_ready;
|
rtx_insn **e_ready = ready + n_ready;
|
||||||
rtx *insnp;
|
rtx_insn **insnp;
|
||||||
|
|
||||||
if (sched_verbose)
|
if (sched_verbose)
|
||||||
fprintf (dump, "// ia64_dfa_sched_reorder (type %d):\n", reorder_type);
|
fprintf (dump, "// ia64_dfa_sched_reorder (type %d):\n", reorder_type);
|
||||||
|
@ -7383,21 +7383,21 @@ ia64_dfa_sched_reorder (FILE *dump, int sched_verbose, rtx *ready,
|
||||||
for (insnp = ready; insnp < e_ready; insnp++)
|
for (insnp = ready; insnp < e_ready; insnp++)
|
||||||
if (insnp < e_ready)
|
if (insnp < e_ready)
|
||||||
{
|
{
|
||||||
rtx insn = *insnp;
|
rtx_insn *insn = *insnp;
|
||||||
enum attr_type t = ia64_safe_type (insn);
|
enum attr_type t = ia64_safe_type (insn);
|
||||||
if (t == TYPE_UNKNOWN)
|
if (t == TYPE_UNKNOWN)
|
||||||
{
|
{
|
||||||
if (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
if (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
||||||
|| asm_noperands (PATTERN (insn)) >= 0)
|
|| asm_noperands (PATTERN (insn)) >= 0)
|
||||||
{
|
{
|
||||||
rtx lowest = ready[n_asms];
|
rtx_insn *lowest = ready[n_asms];
|
||||||
ready[n_asms] = insn;
|
ready[n_asms] = insn;
|
||||||
*insnp = lowest;
|
*insnp = lowest;
|
||||||
n_asms++;
|
n_asms++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rtx highest = ready[n_ready - 1];
|
rtx_insn *highest = ready[n_ready - 1];
|
||||||
ready[n_ready - 1] = insn;
|
ready[n_ready - 1] = insn;
|
||||||
*insnp = highest;
|
*insnp = highest;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -7434,7 +7434,7 @@ ia64_dfa_sched_reorder (FILE *dump, int sched_verbose, rtx *ready,
|
||||||
while (insnp-- > ready + deleted)
|
while (insnp-- > ready + deleted)
|
||||||
while (insnp >= ready + deleted)
|
while (insnp >= ready + deleted)
|
||||||
{
|
{
|
||||||
rtx insn = *insnp;
|
rtx_insn *insn = *insnp;
|
||||||
if (! safe_group_barrier_needed (insn))
|
if (! safe_group_barrier_needed (insn))
|
||||||
break;
|
break;
|
||||||
memmove (ready + 1, ready, (insnp - ready) * sizeof (rtx));
|
memmove (ready + 1, ready, (insnp - ready) * sizeof (rtx));
|
||||||
|
@ -7455,7 +7455,7 @@ ia64_dfa_sched_reorder (FILE *dump, int sched_verbose, rtx *ready,
|
||||||
while (insnp-- > ready + moved)
|
while (insnp-- > ready + moved)
|
||||||
while (insnp >= ready + moved)
|
while (insnp >= ready + moved)
|
||||||
{
|
{
|
||||||
rtx insn = *insnp;
|
rtx_insn *insn = *insnp;
|
||||||
if (! is_load_p (insn))
|
if (! is_load_p (insn))
|
||||||
break;
|
break;
|
||||||
memmove (ready + 1, ready, (insnp - ready) * sizeof (rtx));
|
memmove (ready + 1, ready, (insnp - ready) * sizeof (rtx));
|
||||||
|
@ -7473,8 +7473,8 @@ ia64_dfa_sched_reorder (FILE *dump, int sched_verbose, rtx *ready,
|
||||||
the default sort algorithm to better slot instructions. */
|
the default sort algorithm to better slot instructions. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ia64_sched_reorder (FILE *dump, int sched_verbose, rtx *ready, int *pn_ready,
|
ia64_sched_reorder (FILE *dump, int sched_verbose, rtx_insn **ready,
|
||||||
int clock_var)
|
int *pn_ready, int clock_var)
|
||||||
{
|
{
|
||||||
return ia64_dfa_sched_reorder (dump, sched_verbose, ready,
|
return ia64_dfa_sched_reorder (dump, sched_verbose, ready,
|
||||||
pn_ready, clock_var, 0);
|
pn_ready, clock_var, 0);
|
||||||
|
@ -7485,7 +7485,7 @@ ia64_sched_reorder (FILE *dump, int sched_verbose, rtx *ready, int *pn_ready,
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ia64_sched_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
ia64_sched_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
int sched_verbose ATTRIBUTE_UNUSED, rtx *ready,
|
int sched_verbose ATTRIBUTE_UNUSED, rtx_insn **ready,
|
||||||
int *pn_ready, int clock_var)
|
int *pn_ready, int clock_var)
|
||||||
{
|
{
|
||||||
return ia64_dfa_sched_reorder (dump, sched_verbose, ready, pn_ready,
|
return ia64_dfa_sched_reorder (dump, sched_verbose, ready, pn_ready,
|
||||||
|
|
|
@ -220,9 +220,9 @@ static void mep_incompatible_arg (const struct insn_operand_data *, rtx, int, tr
|
||||||
static rtx mep_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
|
static rtx mep_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
|
||||||
static int mep_adjust_cost (rtx, rtx, rtx, int);
|
static int mep_adjust_cost (rtx, rtx, rtx, int);
|
||||||
static int mep_issue_rate (void);
|
static int mep_issue_rate (void);
|
||||||
static rtx mep_find_ready_insn (rtx *, int, enum attr_slot, int);
|
static rtx_insn *mep_find_ready_insn (rtx_insn **, int, enum attr_slot, int);
|
||||||
static void mep_move_ready_insn (rtx *, int, rtx);
|
static void mep_move_ready_insn (rtx_insn **, int, rtx_insn *);
|
||||||
static int mep_sched_reorder (FILE *, int, rtx *, int *, int);
|
static int mep_sched_reorder (FILE *, int, rtx_insn **, int *, int);
|
||||||
static rtx_insn *mep_make_bundle (rtx, rtx_insn *);
|
static rtx_insn *mep_make_bundle (rtx, rtx_insn *);
|
||||||
static void mep_bundle_insns (rtx_insn *);
|
static void mep_bundle_insns (rtx_insn *);
|
||||||
static bool mep_rtx_cost (rtx, int, int, int, int *, bool);
|
static bool mep_rtx_cost (rtx, int, int, int, int *, bool);
|
||||||
|
@ -6540,25 +6540,26 @@ mep_vliw_function_p (tree decl)
|
||||||
return lookup_attribute ("vliw", TYPE_ATTRIBUTES (TREE_TYPE (decl))) != 0;
|
return lookup_attribute ("vliw", TYPE_ATTRIBUTES (TREE_TYPE (decl))) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rtx
|
static rtx_insn *
|
||||||
mep_find_ready_insn (rtx *ready, int nready, enum attr_slot slot, int length)
|
mep_find_ready_insn (rtx_insn **ready, int nready, enum attr_slot slot,
|
||||||
|
int length)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = nready - 1; i >= 0; --i)
|
for (i = nready - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
rtx insn = ready[i];
|
rtx_insn *insn = ready[i];
|
||||||
if (recog_memoized (insn) >= 0
|
if (recog_memoized (insn) >= 0
|
||||||
&& get_attr_slot (insn) == slot
|
&& get_attr_slot (insn) == slot
|
||||||
&& get_attr_length (insn) == length)
|
&& get_attr_length (insn) == length)
|
||||||
return insn;
|
return insn;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL_RTX;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mep_move_ready_insn (rtx *ready, int nready, rtx insn)
|
mep_move_ready_insn (rtx_insn **ready, int nready, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -6575,7 +6576,7 @@ mep_move_ready_insn (rtx *ready, int nready, rtx insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mep_print_sched_insn (FILE *dump, rtx insn)
|
mep_print_sched_insn (FILE *dump, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
const char *slots = "none";
|
const char *slots = "none";
|
||||||
const char *name = NULL;
|
const char *name = NULL;
|
||||||
|
@ -6620,11 +6621,11 @@ mep_print_sched_insn (FILE *dump, rtx insn)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mep_sched_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
mep_sched_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
int sched_verbose ATTRIBUTE_UNUSED, rtx *ready,
|
int sched_verbose ATTRIBUTE_UNUSED, rtx_insn **ready,
|
||||||
int *pnready, int clock ATTRIBUTE_UNUSED)
|
int *pnready, int clock ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
int nready = *pnready;
|
int nready = *pnready;
|
||||||
rtx core_insn, cop_insn;
|
rtx_insn *core_insn, *cop_insn;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (dump && sched_verbose > 1)
|
if (dump && sched_verbose > 1)
|
||||||
|
|
|
@ -13334,9 +13334,9 @@ mips_multipass_dfa_lookahead (void)
|
||||||
be <= HIGHER. */
|
be <= HIGHER. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mips_promote_ready (rtx *ready, int lower, int higher)
|
mips_promote_ready (rtx_insn **ready, int lower, int higher)
|
||||||
{
|
{
|
||||||
rtx new_head;
|
rtx_insn *new_head;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
new_head = ready[lower];
|
new_head = ready[lower];
|
||||||
|
@ -13350,12 +13350,12 @@ mips_promote_ready (rtx *ready, int lower, int higher)
|
||||||
instructions if POS2 is not already less than POS1. */
|
instructions if POS2 is not already less than POS1. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mips_maybe_swap_ready (rtx *ready, int pos1, int pos2, int limit)
|
mips_maybe_swap_ready (rtx_insn **ready, int pos1, int pos2, int limit)
|
||||||
{
|
{
|
||||||
if (pos1 < pos2
|
if (pos1 < pos2
|
||||||
&& INSN_PRIORITY (ready[pos1]) + limit >= INSN_PRIORITY (ready[pos2]))
|
&& INSN_PRIORITY (ready[pos1]) + limit >= INSN_PRIORITY (ready[pos2]))
|
||||||
{
|
{
|
||||||
rtx temp;
|
rtx_insn *temp;
|
||||||
|
|
||||||
temp = ready[pos1];
|
temp = ready[pos1];
|
||||||
ready[pos1] = ready[pos2];
|
ready[pos1] = ready[pos2];
|
||||||
|
@ -13384,7 +13384,7 @@ mips_macc_chains_record (rtx insn)
|
||||||
clobber hi or lo. */
|
clobber hi or lo. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mips_macc_chains_reorder (rtx *ready, int nready)
|
mips_macc_chains_reorder (rtx_insn **ready, int nready)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
|
@ -13498,7 +13498,7 @@ vr4130_swap_insns_p (rtx insn1, rtx insn2)
|
||||||
vr4130_swap_insns_p says that it could be worthwhile. */
|
vr4130_swap_insns_p says that it could be worthwhile. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vr4130_reorder (rtx *ready, int nready)
|
vr4130_reorder (rtx_insn **ready, int nready)
|
||||||
{
|
{
|
||||||
if (vr4130_swap_insns_p (ready[nready - 1], ready[nready - 2]))
|
if (vr4130_swap_insns_p (ready[nready - 1], ready[nready - 2]))
|
||||||
mips_promote_ready (ready, nready - 2, nready - 1);
|
mips_promote_ready (ready, nready - 2, nready - 1);
|
||||||
|
@ -13528,7 +13528,7 @@ mips_74k_agen_init (rtx insn)
|
||||||
together. Swap things around in the ready queue to make this happen. */
|
together. Swap things around in the ready queue to make this happen. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mips_74k_agen_reorder (rtx *ready, int nready)
|
mips_74k_agen_reorder (rtx_insn **ready, int nready)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int store_pos, load_pos;
|
int store_pos, load_pos;
|
||||||
|
@ -13538,7 +13538,7 @@ mips_74k_agen_reorder (rtx *ready, int nready)
|
||||||
|
|
||||||
for (i = nready - 1; i >= 0; i--)
|
for (i = nready - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
rtx insn = ready[i];
|
rtx_insn *insn = ready[i];
|
||||||
if (USEFUL_INSN_P (insn))
|
if (USEFUL_INSN_P (insn))
|
||||||
switch (get_attr_type (insn))
|
switch (get_attr_type (insn))
|
||||||
{
|
{
|
||||||
|
@ -13598,7 +13598,7 @@ mips_sched_init (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mips_sched_reorder_1 (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
mips_sched_reorder_1 (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready, int *nreadyp, int cycle ATTRIBUTE_UNUSED)
|
rtx_insn **ready, int *nreadyp, int cycle ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
if (!reload_completed
|
if (!reload_completed
|
||||||
&& TUNE_MACC_CHAINS
|
&& TUNE_MACC_CHAINS
|
||||||
|
@ -13619,7 +13619,7 @@ mips_sched_reorder_1 (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mips_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
mips_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready, int *nreadyp, int cycle ATTRIBUTE_UNUSED)
|
rtx_insn **ready, int *nreadyp, int cycle ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
mips_sched_reorder_1 (file, verbose, ready, nreadyp, cycle);
|
mips_sched_reorder_1 (file, verbose, ready, nreadyp, cycle);
|
||||||
return mips_issue_rate ();
|
return mips_issue_rate ();
|
||||||
|
@ -13629,7 +13629,7 @@ mips_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mips_sched_reorder2 (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
mips_sched_reorder2 (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready, int *nreadyp, int cycle ATTRIBUTE_UNUSED)
|
rtx_insn **ready, int *nreadyp, int cycle ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
mips_sched_reorder_1 (file, verbose, ready, nreadyp, cycle);
|
mips_sched_reorder_1 (file, verbose, ready, nreadyp, cycle);
|
||||||
return cached_can_issue_more;
|
return cached_can_issue_more;
|
||||||
|
|
|
@ -100,7 +100,7 @@ int picochip_sched_lookahead (void);
|
||||||
int picochip_sched_issue_rate (void);
|
int picochip_sched_issue_rate (void);
|
||||||
int picochip_sched_adjust_cost (rtx insn, rtx link,
|
int picochip_sched_adjust_cost (rtx insn, rtx link,
|
||||||
rtx dep_insn, int cost);
|
rtx dep_insn, int cost);
|
||||||
int picochip_sched_reorder (FILE * file, int verbose, rtx * ready,
|
int picochip_sched_reorder (FILE * file, int verbose, rtx_insn ** ready,
|
||||||
int *n_readyp, int clock);
|
int *n_readyp, int clock);
|
||||||
|
|
||||||
void picochip_init_builtins (void);
|
void picochip_init_builtins (void);
|
||||||
|
@ -3507,7 +3507,7 @@ picochip_reset_vliw (rtx insn)
|
||||||
|
|
||||||
int
|
int
|
||||||
picochip_sched_reorder (FILE * file, int verbose,
|
picochip_sched_reorder (FILE * file, int verbose,
|
||||||
rtx * ready ATTRIBUTE_UNUSED,
|
rtx_insn ** ready ATTRIBUTE_UNUSED,
|
||||||
int *n_readyp ATTRIBUTE_UNUSED, int clock)
|
int *n_readyp ATTRIBUTE_UNUSED, int clock)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -27246,7 +27246,7 @@ get_next_active_insn (rtx insn, rtx tail)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rs6000_sched_reorder (FILE *dump ATTRIBUTE_UNUSED, int sched_verbose,
|
rs6000_sched_reorder (FILE *dump ATTRIBUTE_UNUSED, int sched_verbose,
|
||||||
rtx *ready ATTRIBUTE_UNUSED,
|
rtx_insn **ready ATTRIBUTE_UNUSED,
|
||||||
int *pn_ready ATTRIBUTE_UNUSED,
|
int *pn_ready ATTRIBUTE_UNUSED,
|
||||||
int clock_var ATTRIBUTE_UNUSED)
|
int clock_var ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
|
@ -27263,7 +27263,7 @@ rs6000_sched_reorder (FILE *dump ATTRIBUTE_UNUSED, int sched_verbose,
|
||||||
&& (recog_memoized (ready[n_ready - 2]) > 0))
|
&& (recog_memoized (ready[n_ready - 2]) > 0))
|
||||||
/* Simply swap first two insns. */
|
/* Simply swap first two insns. */
|
||||||
{
|
{
|
||||||
rtx tmp = ready[n_ready - 1];
|
rtx_insn *tmp = ready[n_ready - 1];
|
||||||
ready[n_ready - 1] = ready[n_ready - 2];
|
ready[n_ready - 1] = ready[n_ready - 2];
|
||||||
ready[n_ready - 2] = tmp;
|
ready[n_ready - 2] = tmp;
|
||||||
}
|
}
|
||||||
|
@ -27278,7 +27278,7 @@ rs6000_sched_reorder (FILE *dump ATTRIBUTE_UNUSED, int sched_verbose,
|
||||||
/* Like rs6000_sched_reorder, but called after issuing each insn. */
|
/* Like rs6000_sched_reorder, but called after issuing each insn. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rs6000_sched_reorder2 (FILE *dump, int sched_verbose, rtx *ready,
|
rs6000_sched_reorder2 (FILE *dump, int sched_verbose, rtx_insn **ready,
|
||||||
int *pn_ready, int clock_var ATTRIBUTE_UNUSED)
|
int *pn_ready, int clock_var ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
if (sched_verbose)
|
if (sched_verbose)
|
||||||
|
@ -27328,7 +27328,8 @@ rs6000_sched_reorder2 (FILE *dump, int sched_verbose, rtx *ready,
|
||||||
{
|
{
|
||||||
int pos;
|
int pos;
|
||||||
int i;
|
int i;
|
||||||
rtx tmp, load_mem, str_mem;
|
rtx_insn *tmp;
|
||||||
|
rtx load_mem, str_mem;
|
||||||
|
|
||||||
if (is_store_insn (last_scheduled_insn, &str_mem))
|
if (is_store_insn (last_scheduled_insn, &str_mem))
|
||||||
/* Issuing a store, swing the load_store_pendulum to the left */
|
/* Issuing a store, swing the load_store_pendulum to the left */
|
||||||
|
|
|
@ -11482,11 +11482,11 @@ s390_fpload_toreg (rtx insn, unsigned int regno)
|
||||||
for Z10_EARLYLOAD_DISTANCE. A problematic load instruction is
|
for Z10_EARLYLOAD_DISTANCE. A problematic load instruction is
|
||||||
moved to the very end of the ready list. */
|
moved to the very end of the ready list. */
|
||||||
static void
|
static void
|
||||||
s390_z10_prevent_earlyload_conflicts (rtx *ready, int *nready_p)
|
s390_z10_prevent_earlyload_conflicts (rtx_insn **ready, int *nready_p)
|
||||||
{
|
{
|
||||||
unsigned int regno;
|
unsigned int regno;
|
||||||
int nready = *nready_p;
|
int nready = *nready_p;
|
||||||
rtx tmp;
|
rtx_insn *tmp;
|
||||||
int i;
|
int i;
|
||||||
rtx_insn *insn;
|
rtx_insn *insn;
|
||||||
rtx set;
|
rtx set;
|
||||||
|
@ -11524,7 +11524,7 @@ s390_z10_prevent_earlyload_conflicts (rtx *ready, int *nready_p)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tmp = ready[i];
|
tmp = ready[i];
|
||||||
memmove (&ready[1], &ready[0], sizeof (rtx) * i);
|
memmove (&ready[1], &ready[0], sizeof (rtx_insn *) * i);
|
||||||
ready[0] = tmp;
|
ready[0] = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11627,7 +11627,7 @@ s390_sched_score (rtx insn)
|
||||||
conflicts in the floating point pipeline */
|
conflicts in the floating point pipeline */
|
||||||
static int
|
static int
|
||||||
s390_sched_reorder (FILE *file, int verbose,
|
s390_sched_reorder (FILE *file, int verbose,
|
||||||
rtx *ready, int *nreadyp, int clock ATTRIBUTE_UNUSED)
|
rtx_insn **ready, int *nreadyp, int clock ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
if (s390_tune == PROCESSOR_2097_Z10)
|
if (s390_tune == PROCESSOR_2097_Z10)
|
||||||
if (reload_completed && *nreadyp > 1)
|
if (reload_completed && *nreadyp > 1)
|
||||||
|
@ -11641,7 +11641,7 @@ s390_sched_reorder (FILE *file, int verbose,
|
||||||
int last_index = *nreadyp - 1;
|
int last_index = *nreadyp - 1;
|
||||||
int max_index = -1;
|
int max_index = -1;
|
||||||
int max_score = -1;
|
int max_score = -1;
|
||||||
rtx tmp;
|
rtx_insn *tmp;
|
||||||
|
|
||||||
/* Just move the insn with the highest score to the top (the
|
/* Just move the insn with the highest score to the top (the
|
||||||
end) of the list. A full sort is not needed since a conflict
|
end) of the list. A full sort is not needed since a conflict
|
||||||
|
|
|
@ -237,11 +237,11 @@ static int find_r0_life_regions (basic_block);
|
||||||
static void sh_md_init_global (FILE *, int, int);
|
static void sh_md_init_global (FILE *, int, int);
|
||||||
static void sh_md_finish_global (FILE *, int);
|
static void sh_md_finish_global (FILE *, int);
|
||||||
static int rank_for_reorder (const void *, const void *);
|
static int rank_for_reorder (const void *, const void *);
|
||||||
static void swap_reorder (rtx *, int);
|
static void swap_reorder (rtx_insn **, int);
|
||||||
static void ready_reorder (rtx *, int);
|
static void ready_reorder (rtx_insn **, int);
|
||||||
static bool high_pressure (enum machine_mode);
|
static bool high_pressure (enum machine_mode);
|
||||||
static int sh_reorder (FILE *, int, rtx *, int *, int);
|
static int sh_reorder (FILE *, int, rtx_insn **, int *, int);
|
||||||
static int sh_reorder2 (FILE *, int, rtx *, int *, int);
|
static int sh_reorder2 (FILE *, int, rtx_insn **, int *, int);
|
||||||
static void sh_md_init (FILE *, int, int);
|
static void sh_md_init (FILE *, int, int);
|
||||||
static int sh_variable_issue (FILE *, int, rtx, int);
|
static int sh_variable_issue (FILE *, int, rtx, int);
|
||||||
|
|
||||||
|
@ -11127,8 +11127,8 @@ find_regmode_weight (basic_block b, enum machine_mode mode)
|
||||||
static int
|
static int
|
||||||
rank_for_reorder (const void *x, const void *y)
|
rank_for_reorder (const void *x, const void *y)
|
||||||
{
|
{
|
||||||
rtx tmp = *(const rtx *) y;
|
rtx_insn *tmp = *(rtx_insn * const *) y;
|
||||||
rtx tmp2 = *(const rtx *) x;
|
rtx_insn *tmp2 = *(rtx_insn * const *) x;
|
||||||
|
|
||||||
/* The insn in a schedule group should be issued the first. */
|
/* The insn in a schedule group should be issued the first. */
|
||||||
if (SCHED_GROUP_P (tmp) != SCHED_GROUP_P (tmp2))
|
if (SCHED_GROUP_P (tmp) != SCHED_GROUP_P (tmp2))
|
||||||
|
@ -11142,9 +11142,9 @@ rank_for_reorder (const void *x, const void *y)
|
||||||
|
|
||||||
/* Resort the array A in which only element at index N may be out of order. */
|
/* Resort the array A in which only element at index N may be out of order. */
|
||||||
static void
|
static void
|
||||||
swap_reorder (rtx *a, int n)
|
swap_reorder (rtx_insn **a, int n)
|
||||||
{
|
{
|
||||||
rtx insn = a[n - 1];
|
rtx_insn *insn = a[n - 1];
|
||||||
int i = n - 2;
|
int i = n - 2;
|
||||||
|
|
||||||
while (i >= 0 && rank_for_reorder (a + i, &insn) >= 0)
|
while (i >= 0 && rank_for_reorder (a + i, &insn) >= 0)
|
||||||
|
@ -11157,12 +11157,12 @@ swap_reorder (rtx *a, int n)
|
||||||
|
|
||||||
/* Sort the ready list by ascending priority. */
|
/* Sort the ready list by ascending priority. */
|
||||||
static void
|
static void
|
||||||
ready_reorder (rtx *ready, int nready)
|
ready_reorder (rtx_insn **ready, int nready)
|
||||||
{
|
{
|
||||||
if (nready == 2)
|
if (nready == 2)
|
||||||
swap_reorder (ready, nready);
|
swap_reorder (ready, nready);
|
||||||
else if (nready > 2)
|
else if (nready > 2)
|
||||||
qsort (ready, nready, sizeof (rtx), rank_for_reorder);
|
qsort (ready, nready, sizeof (rtx_insn *), rank_for_reorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Count life regions of r0 for a block. */
|
/* Count life regions of r0 for a block. */
|
||||||
|
@ -11326,7 +11326,7 @@ high_pressure (enum machine_mode mode)
|
||||||
static int
|
static int
|
||||||
sh_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
sh_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
int sched_verbose ATTRIBUTE_UNUSED,
|
int sched_verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready,
|
rtx_insn **ready,
|
||||||
int *n_readyp,
|
int *n_readyp,
|
||||||
int clock_var ATTRIBUTE_UNUSED)
|
int clock_var ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
|
@ -11345,7 +11345,7 @@ sh_reorder (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
static int
|
static int
|
||||||
sh_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
sh_reorder2 (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
int sched_verbose ATTRIBUTE_UNUSED,
|
int sched_verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready ATTRIBUTE_UNUSED,
|
rtx_insn **ready ATTRIBUTE_UNUSED,
|
||||||
int *n_readyp ATTRIBUTE_UNUSED,
|
int *n_readyp ATTRIBUTE_UNUSED,
|
||||||
int clock_var ATTRIBUTE_UNUSED)
|
int clock_var ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2861,11 +2861,11 @@ spu_sched_variable_issue (FILE *file ATTRIBUTE_UNUSED,
|
||||||
TARGET_SCHED_REORDER2. */
|
TARGET_SCHED_REORDER2. */
|
||||||
static int
|
static int
|
||||||
spu_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
spu_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
|
||||||
rtx *ready, int *nreadyp, int clock)
|
rtx_insn **ready, int *nreadyp, int clock)
|
||||||
{
|
{
|
||||||
int i, nready = *nreadyp;
|
int i, nready = *nreadyp;
|
||||||
int pipe_0, pipe_1, pipe_hbrp, pipe_ls, schedule_i;
|
int pipe_0, pipe_1, pipe_hbrp, pipe_ls, schedule_i;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
clock_var = clock;
|
clock_var = clock;
|
||||||
|
|
||||||
|
|
|
@ -6415,7 +6415,7 @@ later. Do not define this hook if you do not need to adjust the
|
||||||
scheduling priorities of insns.
|
scheduling priorities of insns.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
||||||
@deftypefn {Target Hook} int TARGET_SCHED_REORDER (FILE *@var{file}, int @var{verbose}, rtx *@var{ready}, int *@var{n_readyp}, int @var{clock})
|
@deftypefn {Target Hook} int TARGET_SCHED_REORDER (FILE *@var{file}, int @var{verbose}, rtx_insn **@var{ready}, int *@var{n_readyp}, int @var{clock})
|
||||||
This hook is executed by the scheduler after it has scheduled the ready
|
This hook is executed by the scheduler after it has scheduled the ready
|
||||||
list, to allow the machine description to reorder it (for example to
|
list, to allow the machine description to reorder it (for example to
|
||||||
combine two small instructions together on @samp{VLIW} machines).
|
combine two small instructions together on @samp{VLIW} machines).
|
||||||
|
@ -6432,7 +6432,7 @@ can issue this cycle; normally this is just @code{issue_rate}. See also
|
||||||
@samp{TARGET_SCHED_REORDER2}.
|
@samp{TARGET_SCHED_REORDER2}.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
||||||
@deftypefn {Target Hook} int TARGET_SCHED_REORDER2 (FILE *@var{file}, int @var{verbose}, rtx *@var{ready}, int *@var{n_readyp}, int @var{clock})
|
@deftypefn {Target Hook} int TARGET_SCHED_REORDER2 (FILE *@var{file}, int @var{verbose}, rtx_insn **@var{ready}, int *@var{n_readyp}, int @var{clock})
|
||||||
Like @samp{TARGET_SCHED_REORDER}, but called at a different time. That
|
Like @samp{TARGET_SCHED_REORDER}, but called at a different time. That
|
||||||
function is called whenever the scheduler starts a new cycle. This one
|
function is called whenever the scheduler starts a new cycle. This one
|
||||||
is called once per iteration over a cycle, immediately after
|
is called once per iteration over a cycle, immediately after
|
||||||
|
@ -6454,7 +6454,7 @@ target microarchitecture. If this hook returns true for the given insn pair
|
||||||
group, and they will not be scheduled apart.
|
group, and they will not be scheduled apart.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
||||||
@deftypefn {Target Hook} void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx @var{head}, rtx @var{tail})
|
@deftypefn {Target Hook} void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx_insn *@var{head}, rtx_insn *@var{tail})
|
||||||
This hook is called after evaluation forward dependencies of insns in
|
This hook is called after evaluation forward dependencies of insns in
|
||||||
chain given by two parameter values (@var{head} and @var{tail}
|
chain given by two parameter values (@var{head} and @var{tail}
|
||||||
correspondingly) but before insns scheduling of the insn chain. For
|
correspondingly) but before insns scheduling of the insn chain. For
|
||||||
|
|
|
@ -241,7 +241,7 @@ struct common_sched_info_def *common_sched_info;
|
||||||
|
|
||||||
/* List of important notes we must keep around. This is a pointer to the
|
/* List of important notes we must keep around. This is a pointer to the
|
||||||
last element in the list. */
|
last element in the list. */
|
||||||
rtx note_list;
|
rtx_insn *note_list;
|
||||||
|
|
||||||
static struct spec_info_def spec_info_var;
|
static struct spec_info_def spec_info_var;
|
||||||
/* Description of the speculative part of the scheduling.
|
/* Description of the speculative part of the scheduling.
|
||||||
|
@ -370,7 +370,7 @@ int cycle_issued_insns;
|
||||||
|
|
||||||
/* This records the actual schedule. It is built up during the main phase
|
/* This records the actual schedule. It is built up during the main phase
|
||||||
of schedule_block, and afterwards used to reorder the insns in the RTL. */
|
of schedule_block, and afterwards used to reorder the insns in the RTL. */
|
||||||
static vec<rtx> scheduled_insns;
|
static vec<rtx_insn *> scheduled_insns;
|
||||||
|
|
||||||
static int may_trap_exp (const_rtx, int);
|
static int may_trap_exp (const_rtx, int);
|
||||||
|
|
||||||
|
@ -591,7 +591,7 @@ set_modulo_params (int ii, int max_stages, int insns, int max_uid)
|
||||||
struct delay_pair
|
struct delay_pair
|
||||||
{
|
{
|
||||||
struct delay_pair *next_same_i1;
|
struct delay_pair *next_same_i1;
|
||||||
rtx i1, i2;
|
rtx_insn *i1, *i2;
|
||||||
int cycles;
|
int cycles;
|
||||||
/* When doing modulo scheduling, we a delay_pair can also be used to
|
/* When doing modulo scheduling, we a delay_pair can also be used to
|
||||||
show that I1 and I2 are the same insn in a different stage. If that
|
show that I1 and I2 are the same insn in a different stage. If that
|
||||||
|
@ -726,7 +726,7 @@ discard_delay_pairs_above (int max_uid)
|
||||||
scheduling. */
|
scheduling. */
|
||||||
|
|
||||||
void
|
void
|
||||||
record_delay_slot_pair (rtx i1, rtx i2, int cycles, int stages)
|
record_delay_slot_pair (rtx_insn *i1, rtx_insn *i2, int cycles, int stages)
|
||||||
{
|
{
|
||||||
struct delay_pair *p = XNEW (struct delay_pair);
|
struct delay_pair *p = XNEW (struct delay_pair);
|
||||||
struct delay_pair **slot;
|
struct delay_pair **slot;
|
||||||
|
@ -780,7 +780,7 @@ pair_delay (struct delay_pair *p)
|
||||||
and add dependencies to the real insns to limit the amount of backtracking
|
and add dependencies to the real insns to limit the amount of backtracking
|
||||||
needed. */
|
needed. */
|
||||||
void
|
void
|
||||||
add_delay_dependencies (rtx insn)
|
add_delay_dependencies (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
struct delay_pair *pair;
|
struct delay_pair *pair;
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
|
@ -828,9 +828,9 @@ add_delay_dependencies (rtx insn)
|
||||||
|
|
||||||
static int priority (rtx);
|
static int priority (rtx);
|
||||||
static int rank_for_schedule (const void *, const void *);
|
static int rank_for_schedule (const void *, const void *);
|
||||||
static void swap_sort (rtx *, int);
|
static void swap_sort (rtx_insn **, int);
|
||||||
static void queue_insn (rtx, int, const char *);
|
static void queue_insn (rtx_insn *, int, const char *);
|
||||||
static int schedule_insn (rtx);
|
static int schedule_insn (rtx_insn *);
|
||||||
static void adjust_priority (rtx);
|
static void adjust_priority (rtx);
|
||||||
static void advance_one_cycle (void);
|
static void advance_one_cycle (void);
|
||||||
static void extend_h_i_d (void);
|
static void extend_h_i_d (void);
|
||||||
|
@ -852,21 +852,21 @@ static void extend_h_i_d (void);
|
||||||
unlink_other_notes ()). After scheduling the block, these notes are
|
unlink_other_notes ()). After scheduling the block, these notes are
|
||||||
inserted at the beginning of the block (in schedule_block()). */
|
inserted at the beginning of the block (in schedule_block()). */
|
||||||
|
|
||||||
static void ready_add (struct ready_list *, rtx, bool);
|
static void ready_add (struct ready_list *, rtx_insn *, bool);
|
||||||
static rtx ready_remove_first (struct ready_list *);
|
static rtx_insn *ready_remove_first (struct ready_list *);
|
||||||
static rtx ready_remove_first_dispatch (struct ready_list *ready);
|
static rtx_insn *ready_remove_first_dispatch (struct ready_list *ready);
|
||||||
|
|
||||||
static void queue_to_ready (struct ready_list *);
|
static void queue_to_ready (struct ready_list *);
|
||||||
static int early_queue_to_ready (state_t, struct ready_list *);
|
static int early_queue_to_ready (state_t, struct ready_list *);
|
||||||
|
|
||||||
/* The following functions are used to implement multi-pass scheduling
|
/* The following functions are used to implement multi-pass scheduling
|
||||||
on the first cycle. */
|
on the first cycle. */
|
||||||
static rtx ready_remove (struct ready_list *, int);
|
static rtx_insn *ready_remove (struct ready_list *, int);
|
||||||
static void ready_remove_insn (rtx);
|
static void ready_remove_insn (rtx);
|
||||||
|
|
||||||
static void fix_inter_tick (rtx, rtx);
|
static void fix_inter_tick (rtx, rtx);
|
||||||
static int fix_tick_ready (rtx);
|
static int fix_tick_ready (rtx_insn *);
|
||||||
static void change_queue_index (rtx, int);
|
static void change_queue_index (rtx_insn *, int);
|
||||||
|
|
||||||
/* The following functions are used to implement scheduling of data/control
|
/* The following functions are used to implement scheduling of data/control
|
||||||
speculative instructions. */
|
speculative instructions. */
|
||||||
|
@ -874,12 +874,12 @@ static void change_queue_index (rtx, int);
|
||||||
static void extend_h_i_d (void);
|
static void extend_h_i_d (void);
|
||||||
static void init_h_i_d (rtx);
|
static void init_h_i_d (rtx);
|
||||||
static int haifa_speculate_insn (rtx, ds_t, rtx *);
|
static int haifa_speculate_insn (rtx, ds_t, rtx *);
|
||||||
static void generate_recovery_code (rtx);
|
static void generate_recovery_code (rtx_insn *);
|
||||||
static void process_insn_forw_deps_be_in_spec (rtx, rtx, ds_t);
|
static void process_insn_forw_deps_be_in_spec (rtx, rtx, ds_t);
|
||||||
static void begin_speculative_block (rtx);
|
static void begin_speculative_block (rtx_insn *);
|
||||||
static void add_to_speculative_block (rtx);
|
static void add_to_speculative_block (rtx);
|
||||||
static void init_before_recovery (basic_block *);
|
static void init_before_recovery (basic_block *);
|
||||||
static void create_check_block_twin (rtx, bool);
|
static void create_check_block_twin (rtx_insn *, bool);
|
||||||
static void fix_recovery_deps (basic_block);
|
static void fix_recovery_deps (basic_block);
|
||||||
static bool haifa_change_pattern (rtx, rtx);
|
static bool haifa_change_pattern (rtx, rtx);
|
||||||
static void dump_new_block_header (int, basic_block, rtx, rtx);
|
static void dump_new_block_header (int, basic_block, rtx, rtx);
|
||||||
|
@ -887,7 +887,7 @@ static void restore_bb_notes (basic_block);
|
||||||
static void fix_jump_move (rtx);
|
static void fix_jump_move (rtx);
|
||||||
static void move_block_after_check (rtx);
|
static void move_block_after_check (rtx);
|
||||||
static void move_succs (vec<edge, va_gc> **, basic_block);
|
static void move_succs (vec<edge, va_gc> **, basic_block);
|
||||||
static void sched_remove_insn (rtx);
|
static void sched_remove_insn (rtx_insn *);
|
||||||
static void clear_priorities (rtx, rtx_vec_t *);
|
static void clear_priorities (rtx, rtx_vec_t *);
|
||||||
static void calc_priorities (rtx_vec_t);
|
static void calc_priorities (rtx_vec_t);
|
||||||
static void add_jump_dependencies (rtx, rtx);
|
static void add_jump_dependencies (rtx, rtx);
|
||||||
|
@ -1119,7 +1119,7 @@ print_curr_reg_pressure (void)
|
||||||
/* Determine if INSN has a condition that is clobbered if a register
|
/* Determine if INSN has a condition that is clobbered if a register
|
||||||
in SET_REGS is modified. */
|
in SET_REGS is modified. */
|
||||||
static bool
|
static bool
|
||||||
cond_clobbered_p (rtx insn, HARD_REG_SET set_regs)
|
cond_clobbered_p (rtx_insn *insn, HARD_REG_SET set_regs)
|
||||||
{
|
{
|
||||||
rtx pat = PATTERN (insn);
|
rtx pat = PATTERN (insn);
|
||||||
gcc_assert (GET_CODE (pat) == COND_EXEC);
|
gcc_assert (GET_CODE (pat) == COND_EXEC);
|
||||||
|
@ -1271,7 +1271,7 @@ recompute_todo_spec (rtx next, bool for_backtrack)
|
||||||
rtx pro, other, new_pat;
|
rtx pro, other, new_pat;
|
||||||
rtx cond = NULL_RTX;
|
rtx cond = NULL_RTX;
|
||||||
bool success;
|
bool success;
|
||||||
rtx prev = NULL_RTX;
|
rtx_insn *prev = NULL;
|
||||||
int i;
|
int i;
|
||||||
unsigned regno;
|
unsigned regno;
|
||||||
|
|
||||||
|
@ -1348,7 +1348,7 @@ recompute_todo_spec (rtx next, bool for_backtrack)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pointer to the last instruction scheduled. */
|
/* Pointer to the last instruction scheduled. */
|
||||||
static rtx last_scheduled_insn;
|
static rtx_insn *last_scheduled_insn;
|
||||||
|
|
||||||
/* Pointer to the last nondebug instruction scheduled within the
|
/* Pointer to the last nondebug instruction scheduled within the
|
||||||
block, or the prev_head of the scheduling block. Used by
|
block, or the prev_head of the scheduling block. Used by
|
||||||
|
@ -1359,7 +1359,7 @@ static rtx last_nondebug_scheduled_insn;
|
||||||
/* Pointer that iterates through the list of unscheduled insns if we
|
/* Pointer that iterates through the list of unscheduled insns if we
|
||||||
have a dbg_cnt enabled. It always points at an insn prior to the
|
have a dbg_cnt enabled. It always points at an insn prior to the
|
||||||
first unscheduled one. */
|
first unscheduled one. */
|
||||||
static rtx nonscheduled_insns_begin;
|
static rtx_insn *nonscheduled_insns_begin;
|
||||||
|
|
||||||
/* Compute cost of executing INSN.
|
/* Compute cost of executing INSN.
|
||||||
This is the number of cycles between instruction issue and
|
This is the number of cycles between instruction issue and
|
||||||
|
@ -2464,7 +2464,7 @@ model_dump_pressure_points (struct model_pressure_group *group)
|
||||||
/* Set INSN_REG_PRESSURE_EXCESS_COST_CHANGE for INSNS[0...COUNT-1]. */
|
/* Set INSN_REG_PRESSURE_EXCESS_COST_CHANGE for INSNS[0...COUNT-1]. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
model_set_excess_costs (rtx *insns, int count)
|
model_set_excess_costs (rtx_insn **insns, int count)
|
||||||
{
|
{
|
||||||
int i, cost, priority_base, priority;
|
int i, cost, priority_base, priority;
|
||||||
bool print_p;
|
bool print_p;
|
||||||
|
@ -2553,8 +2553,8 @@ rfs_result (enum rfs_decision decision, int result)
|
||||||
static int
|
static int
|
||||||
rank_for_schedule (const void *x, const void *y)
|
rank_for_schedule (const void *x, const void *y)
|
||||||
{
|
{
|
||||||
rtx tmp = *(const rtx *) y;
|
rtx_insn *tmp = *(rtx_insn * const *) y;
|
||||||
rtx tmp2 = *(const rtx *) x;
|
rtx_insn *tmp2 = *(rtx_insn * const *) x;
|
||||||
int tmp_class, tmp2_class;
|
int tmp_class, tmp2_class;
|
||||||
int val, priority_val, info_val, diff;
|
int val, priority_val, info_val, diff;
|
||||||
|
|
||||||
|
@ -2722,9 +2722,9 @@ rank_for_schedule (const void *x, const void *y)
|
||||||
/* Resort the array A in which only element at index N may be out of order. */
|
/* Resort the array A in which only element at index N may be out of order. */
|
||||||
|
|
||||||
HAIFA_INLINE static void
|
HAIFA_INLINE static void
|
||||||
swap_sort (rtx *a, int n)
|
swap_sort (rtx_insn **a, int n)
|
||||||
{
|
{
|
||||||
rtx insn = a[n - 1];
|
rtx_insn *insn = a[n - 1];
|
||||||
int i = n - 2;
|
int i = n - 2;
|
||||||
|
|
||||||
while (i >= 0 && rank_for_schedule (a + i, &insn) >= 0)
|
while (i >= 0 && rank_for_schedule (a + i, &insn) >= 0)
|
||||||
|
@ -2741,7 +2741,7 @@ swap_sort (rtx *a, int n)
|
||||||
output. */
|
output. */
|
||||||
|
|
||||||
HAIFA_INLINE static void
|
HAIFA_INLINE static void
|
||||||
queue_insn (rtx insn, int n_cycles, const char *reason)
|
queue_insn (rtx_insn *insn, int n_cycles, const char *reason)
|
||||||
{
|
{
|
||||||
int next_q = NEXT_Q_AFTER (q_ptr, n_cycles);
|
int next_q = NEXT_Q_AFTER (q_ptr, n_cycles);
|
||||||
rtx link = alloc_INSN_LIST (insn, insn_queue[next_q]);
|
rtx link = alloc_INSN_LIST (insn, insn_queue[next_q]);
|
||||||
|
@ -2792,7 +2792,7 @@ queue_remove (rtx insn)
|
||||||
/* Return a pointer to the bottom of the ready list, i.e. the insn
|
/* Return a pointer to the bottom of the ready list, i.e. the insn
|
||||||
with the lowest priority. */
|
with the lowest priority. */
|
||||||
|
|
||||||
rtx *
|
rtx_insn **
|
||||||
ready_lastpos (struct ready_list *ready)
|
ready_lastpos (struct ready_list *ready)
|
||||||
{
|
{
|
||||||
gcc_assert (ready->n_ready >= 1);
|
gcc_assert (ready->n_ready >= 1);
|
||||||
|
@ -2803,7 +2803,7 @@ ready_lastpos (struct ready_list *ready)
|
||||||
lowest/highest priority depending on FIRST_P. */
|
lowest/highest priority depending on FIRST_P. */
|
||||||
|
|
||||||
HAIFA_INLINE static void
|
HAIFA_INLINE static void
|
||||||
ready_add (struct ready_list *ready, rtx insn, bool first_p)
|
ready_add (struct ready_list *ready, rtx_insn *insn, bool first_p)
|
||||||
{
|
{
|
||||||
if (!first_p)
|
if (!first_p)
|
||||||
{
|
{
|
||||||
|
@ -2847,10 +2847,10 @@ ready_add (struct ready_list *ready, rtx insn, bool first_p)
|
||||||
/* Remove the element with the highest priority from the ready list and
|
/* Remove the element with the highest priority from the ready list and
|
||||||
return it. */
|
return it. */
|
||||||
|
|
||||||
HAIFA_INLINE static rtx
|
HAIFA_INLINE static rtx_insn *
|
||||||
ready_remove_first (struct ready_list *ready)
|
ready_remove_first (struct ready_list *ready)
|
||||||
{
|
{
|
||||||
rtx t;
|
rtx_insn *t;
|
||||||
|
|
||||||
gcc_assert (ready->n_ready);
|
gcc_assert (ready->n_ready);
|
||||||
t = ready->vec[ready->first--];
|
t = ready->vec[ready->first--];
|
||||||
|
@ -2875,7 +2875,7 @@ ready_remove_first (struct ready_list *ready)
|
||||||
insn with the highest priority is 0, and the lowest priority has
|
insn with the highest priority is 0, and the lowest priority has
|
||||||
N_READY - 1. */
|
N_READY - 1. */
|
||||||
|
|
||||||
rtx
|
rtx_insn *
|
||||||
ready_element (struct ready_list *ready, int index)
|
ready_element (struct ready_list *ready, int index)
|
||||||
{
|
{
|
||||||
gcc_assert (ready->n_ready && index < ready->n_ready);
|
gcc_assert (ready->n_ready && index < ready->n_ready);
|
||||||
|
@ -2887,10 +2887,10 @@ ready_element (struct ready_list *ready, int index)
|
||||||
for insn with the highest priority is 0, and the lowest priority
|
for insn with the highest priority is 0, and the lowest priority
|
||||||
has N_READY - 1. */
|
has N_READY - 1. */
|
||||||
|
|
||||||
HAIFA_INLINE static rtx
|
HAIFA_INLINE static rtx_insn *
|
||||||
ready_remove (struct ready_list *ready, int index)
|
ready_remove (struct ready_list *ready, int index)
|
||||||
{
|
{
|
||||||
rtx t;
|
rtx_insn *t;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (index == 0)
|
if (index == 0)
|
||||||
|
@ -2948,7 +2948,7 @@ void
|
||||||
ready_sort (struct ready_list *ready)
|
ready_sort (struct ready_list *ready)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
rtx *first = ready_lastpos (ready);
|
rtx_insn **first = ready_lastpos (ready);
|
||||||
|
|
||||||
if (sched_pressure == SCHED_PRESSURE_WEIGHTED)
|
if (sched_pressure == SCHED_PRESSURE_WEIGHTED)
|
||||||
{
|
{
|
||||||
|
@ -3137,7 +3137,7 @@ check_clobbered_conditions (rtx insn)
|
||||||
restart:
|
restart:
|
||||||
for (i = 0; i < ready.n_ready; i++)
|
for (i = 0; i < ready.n_ready; i++)
|
||||||
{
|
{
|
||||||
rtx x = ready_element (&ready, i);
|
rtx_insn *x = ready_element (&ready, i);
|
||||||
if (TODO_SPEC (x) == DEP_CONTROL && cond_clobbered_p (x, t))
|
if (TODO_SPEC (x) == DEP_CONTROL && cond_clobbered_p (x, t))
|
||||||
{
|
{
|
||||||
ready_remove_insn (x);
|
ready_remove_insn (x);
|
||||||
|
@ -3152,7 +3152,7 @@ check_clobbered_conditions (rtx insn)
|
||||||
restart_queue:
|
restart_queue:
|
||||||
for (link = insn_queue[q]; link; link = XEXP (link, 1))
|
for (link = insn_queue[q]; link; link = XEXP (link, 1))
|
||||||
{
|
{
|
||||||
rtx x = XEXP (link, 0);
|
rtx_insn *x = as_a <rtx_insn *> (XEXP (link, 0));
|
||||||
if (TODO_SPEC (x) == DEP_CONTROL && cond_clobbered_p (x, t))
|
if (TODO_SPEC (x) == DEP_CONTROL && cond_clobbered_p (x, t))
|
||||||
{
|
{
|
||||||
queue_remove (x);
|
queue_remove (x);
|
||||||
|
@ -3790,7 +3790,7 @@ struct sched_block_state
|
||||||
zero for insns in a schedule group). */
|
zero for insns in a schedule group). */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
schedule_insn (rtx insn)
|
schedule_insn (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
dep_t dep;
|
dep_t dep;
|
||||||
|
@ -4032,9 +4032,9 @@ concat_note_lists (rtx from_end, rtx *to_endp)
|
||||||
/* Delete notes between HEAD and TAIL and put them in the chain
|
/* Delete notes between HEAD and TAIL and put them in the chain
|
||||||
of notes ended by NOTE_LIST. */
|
of notes ended by NOTE_LIST. */
|
||||||
void
|
void
|
||||||
remove_notes (rtx head, rtx tail)
|
remove_notes (rtx_insn *head, rtx_insn *tail)
|
||||||
{
|
{
|
||||||
rtx next_tail, insn, next;
|
rtx_insn *next_tail, *insn, *next;
|
||||||
|
|
||||||
note_list = 0;
|
note_list = 0;
|
||||||
if (head == tail && !INSN_P (head))
|
if (head == tail && !INSN_P (head))
|
||||||
|
@ -4100,9 +4100,9 @@ struct haifa_saved_data
|
||||||
struct ready_list ready;
|
struct ready_list ready;
|
||||||
state_t curr_state;
|
state_t curr_state;
|
||||||
|
|
||||||
rtx last_scheduled_insn;
|
rtx_insn *last_scheduled_insn;
|
||||||
rtx last_nondebug_scheduled_insn;
|
rtx last_nondebug_scheduled_insn;
|
||||||
rtx nonscheduled_insns_begin;
|
rtx_insn *nonscheduled_insns_begin;
|
||||||
int cycle_issued_insns;
|
int cycle_issued_insns;
|
||||||
|
|
||||||
/* Copies of state used in the inner loop of schedule_block. */
|
/* Copies of state used in the inner loop of schedule_block. */
|
||||||
|
@ -4159,7 +4159,7 @@ save_backtrack_point (struct delay_pair *pair,
|
||||||
save->ready.n_ready = ready.n_ready;
|
save->ready.n_ready = ready.n_ready;
|
||||||
save->ready.n_debug = ready.n_debug;
|
save->ready.n_debug = ready.n_debug;
|
||||||
save->ready.veclen = ready.veclen;
|
save->ready.veclen = ready.veclen;
|
||||||
save->ready.vec = XNEWVEC (rtx, ready.veclen);
|
save->ready.vec = XNEWVEC (rtx_insn *, ready.veclen);
|
||||||
memcpy (save->ready.vec, ready.vec, ready.veclen * sizeof (rtx));
|
memcpy (save->ready.vec, ready.vec, ready.veclen * sizeof (rtx));
|
||||||
|
|
||||||
save->insn_queue = XNEWVEC (rtx, max_insn_queue_index + 1);
|
save->insn_queue = XNEWVEC (rtx, max_insn_queue_index + 1);
|
||||||
|
@ -4223,7 +4223,7 @@ toggle_cancelled_flags (bool set)
|
||||||
|
|
||||||
if (ready.n_ready > 0)
|
if (ready.n_ready > 0)
|
||||||
{
|
{
|
||||||
rtx *first = ready_lastpos (&ready);
|
rtx_insn **first = ready_lastpos (&ready);
|
||||||
for (i = 0; i < ready.n_ready; i++)
|
for (i = 0; i < ready.n_ready; i++)
|
||||||
FOR_EACH_DEP (first[i], SD_LIST_BACK, sd_it, dep)
|
FOR_EACH_DEP (first[i], SD_LIST_BACK, sd_it, dep)
|
||||||
if (!DEBUG_INSN_P (DEP_PRO (dep)))
|
if (!DEBUG_INSN_P (DEP_PRO (dep)))
|
||||||
|
@ -4370,10 +4370,10 @@ restore_last_backtrack_point (struct sched_block_state *psched_block)
|
||||||
of the queues. */
|
of the queues. */
|
||||||
if (ready.n_ready > 0)
|
if (ready.n_ready > 0)
|
||||||
{
|
{
|
||||||
rtx *first = ready_lastpos (&ready);
|
rtx_insn **first = ready_lastpos (&ready);
|
||||||
for (i = 0; i < ready.n_ready; i++)
|
for (i = 0; i < ready.n_ready; i++)
|
||||||
{
|
{
|
||||||
rtx insn = first[i];
|
rtx_insn *insn = first[i];
|
||||||
QUEUE_INDEX (insn) = QUEUE_NOWHERE;
|
QUEUE_INDEX (insn) = QUEUE_NOWHERE;
|
||||||
INSN_TICK (insn) = INVALID_TICK;
|
INSN_TICK (insn) = INVALID_TICK;
|
||||||
}
|
}
|
||||||
|
@ -4396,10 +4396,10 @@ restore_last_backtrack_point (struct sched_block_state *psched_block)
|
||||||
|
|
||||||
if (ready.n_ready > 0)
|
if (ready.n_ready > 0)
|
||||||
{
|
{
|
||||||
rtx *first = ready_lastpos (&ready);
|
rtx_insn **first = ready_lastpos (&ready);
|
||||||
for (i = 0; i < ready.n_ready; i++)
|
for (i = 0; i < ready.n_ready; i++)
|
||||||
{
|
{
|
||||||
rtx insn = first[i];
|
rtx_insn *insn = first[i];
|
||||||
QUEUE_INDEX (insn) = QUEUE_READY;
|
QUEUE_INDEX (insn) = QUEUE_READY;
|
||||||
TODO_SPEC (insn) = recompute_todo_spec (insn, true);
|
TODO_SPEC (insn) = recompute_todo_spec (insn, true);
|
||||||
INSN_TICK (insn) = save->clock_var;
|
INSN_TICK (insn) = save->clock_var;
|
||||||
|
@ -4688,7 +4688,7 @@ estimate_shadow_tick (struct delay_pair *p)
|
||||||
/* If INSN has no unresolved backwards dependencies, add it to the schedule and
|
/* If INSN has no unresolved backwards dependencies, add it to the schedule and
|
||||||
recursively resolve all its forward dependencies. */
|
recursively resolve all its forward dependencies. */
|
||||||
static void
|
static void
|
||||||
resolve_dependencies (rtx insn)
|
resolve_dependencies (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
dep_t dep;
|
dep_t dep;
|
||||||
|
@ -4843,12 +4843,12 @@ no_real_insns_p (const_rtx head, const_rtx tail)
|
||||||
|
|
||||||
/* Restore-other-notes: NOTE_LIST is the end of a chain of notes
|
/* Restore-other-notes: NOTE_LIST is the end of a chain of notes
|
||||||
previously found among the insns. Insert them just before HEAD. */
|
previously found among the insns. Insert them just before HEAD. */
|
||||||
rtx
|
rtx_insn *
|
||||||
restore_other_notes (rtx head, basic_block head_bb)
|
restore_other_notes (rtx_insn *head, basic_block head_bb)
|
||||||
{
|
{
|
||||||
if (note_list != 0)
|
if (note_list != 0)
|
||||||
{
|
{
|
||||||
rtx note_head = note_list;
|
rtx_insn *note_head = note_list;
|
||||||
|
|
||||||
if (head)
|
if (head)
|
||||||
head_bb = BLOCK_FOR_INSN (head);
|
head_bb = BLOCK_FOR_INSN (head);
|
||||||
|
@ -4882,7 +4882,7 @@ restore_other_notes (rtx head, basic_block head_bb)
|
||||||
static void
|
static void
|
||||||
undo_all_replacements (void)
|
undo_all_replacements (void)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
FOR_EACH_VEC_ELT (scheduled_insns, i, insn)
|
FOR_EACH_VEC_ELT (scheduled_insns, i, insn)
|
||||||
|
@ -4903,10 +4903,10 @@ undo_all_replacements (void)
|
||||||
|
|
||||||
/* Return first non-scheduled insn in the current scheduling block.
|
/* Return first non-scheduled insn in the current scheduling block.
|
||||||
This is mostly used for debug-counter purposes. */
|
This is mostly used for debug-counter purposes. */
|
||||||
static rtx
|
static rtx_insn *
|
||||||
first_nonscheduled_insn (void)
|
first_nonscheduled_insn (void)
|
||||||
{
|
{
|
||||||
rtx insn = (nonscheduled_insns_begin != NULL_RTX
|
rtx_insn *insn = (nonscheduled_insns_begin != NULL_RTX
|
||||||
? nonscheduled_insns_begin
|
? nonscheduled_insns_begin
|
||||||
: current_sched_info->prev_head);
|
: current_sched_info->prev_head);
|
||||||
|
|
||||||
|
@ -4924,7 +4924,7 @@ first_nonscheduled_insn (void)
|
||||||
static void
|
static void
|
||||||
queue_to_ready (struct ready_list *ready)
|
queue_to_ready (struct ready_list *ready)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
rtx link;
|
rtx link;
|
||||||
rtx skip_insn;
|
rtx skip_insn;
|
||||||
|
|
||||||
|
@ -4941,7 +4941,7 @@ queue_to_ready (struct ready_list *ready)
|
||||||
ready list. */
|
ready list. */
|
||||||
for (link = insn_queue[q_ptr]; link; link = XEXP (link, 1))
|
for (link = insn_queue[q_ptr]; link; link = XEXP (link, 1))
|
||||||
{
|
{
|
||||||
insn = XEXP (link, 0);
|
insn = as_a <rtx_insn *> (XEXP (link, 0));
|
||||||
q_size -= 1;
|
q_size -= 1;
|
||||||
|
|
||||||
if (sched_verbose >= 2)
|
if (sched_verbose >= 2)
|
||||||
|
@ -4989,7 +4989,7 @@ queue_to_ready (struct ready_list *ready)
|
||||||
{
|
{
|
||||||
for (; link; link = XEXP (link, 1))
|
for (; link; link = XEXP (link, 1))
|
||||||
{
|
{
|
||||||
insn = XEXP (link, 0);
|
insn = as_a <rtx_insn *> (XEXP (link, 0));
|
||||||
q_size -= 1;
|
q_size -= 1;
|
||||||
|
|
||||||
if (sched_verbose >= 2)
|
if (sched_verbose >= 2)
|
||||||
|
@ -5080,7 +5080,7 @@ ok_for_early_queue_removal (rtx insn)
|
||||||
static int
|
static int
|
||||||
early_queue_to_ready (state_t state, struct ready_list *ready)
|
early_queue_to_ready (state_t state, struct ready_list *ready)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
rtx link;
|
rtx link;
|
||||||
rtx next_link;
|
rtx next_link;
|
||||||
rtx prev_link;
|
rtx prev_link;
|
||||||
|
@ -5118,7 +5118,7 @@ early_queue_to_ready (state_t state, struct ready_list *ready)
|
||||||
while (link)
|
while (link)
|
||||||
{
|
{
|
||||||
next_link = XEXP (link, 1);
|
next_link = XEXP (link, 1);
|
||||||
insn = XEXP (link, 0);
|
insn = as_a <rtx_insn *> (XEXP (link, 0));
|
||||||
if (insn && sched_verbose > 6)
|
if (insn && sched_verbose > 6)
|
||||||
print_rtl_single (sched_dump, insn);
|
print_rtl_single (sched_dump, insn);
|
||||||
|
|
||||||
|
@ -5181,7 +5181,7 @@ early_queue_to_ready (state_t state, struct ready_list *ready)
|
||||||
static void
|
static void
|
||||||
debug_ready_list_1 (struct ready_list *ready, signed char *ready_try)
|
debug_ready_list_1 (struct ready_list *ready, signed char *ready_try)
|
||||||
{
|
{
|
||||||
rtx *p;
|
rtx_insn **p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (ready->n_ready == 0)
|
if (ready->n_ready == 0)
|
||||||
|
@ -5240,12 +5240,12 @@ reemit_notes (rtx insn)
|
||||||
|
|
||||||
/* Move INSN. Reemit notes if needed. Update CFG, if needed. */
|
/* Move INSN. Reemit notes if needed. Update CFG, if needed. */
|
||||||
static void
|
static void
|
||||||
move_insn (rtx insn, rtx last, rtx nt)
|
move_insn (rtx_insn *insn, rtx last, rtx nt)
|
||||||
{
|
{
|
||||||
if (PREV_INSN (insn) != last)
|
if (PREV_INSN (insn) != last)
|
||||||
{
|
{
|
||||||
basic_block bb;
|
basic_block bb;
|
||||||
rtx note;
|
rtx_insn *note;
|
||||||
int jump_p = 0;
|
int jump_p = 0;
|
||||||
|
|
||||||
bb = BLOCK_FOR_INSN (insn);
|
bb = BLOCK_FOR_INSN (insn);
|
||||||
|
@ -5325,7 +5325,7 @@ move_insn (rtx insn, rtx last, rtx nt)
|
||||||
|
|
||||||
/* Return true if scheduling INSN will finish current clock cycle. */
|
/* Return true if scheduling INSN will finish current clock cycle. */
|
||||||
static bool
|
static bool
|
||||||
insn_finishes_cycle_p (rtx insn)
|
insn_finishes_cycle_p (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (SCHED_GROUP_P (insn))
|
if (SCHED_GROUP_P (insn))
|
||||||
/* After issuing INSN, rest of the sched_group will be forced to issue
|
/* After issuing INSN, rest of the sched_group will be forced to issue
|
||||||
|
@ -5409,7 +5409,7 @@ max_issue (struct ready_list *ready, int privileged_n, state_t state,
|
||||||
int n, i, all, n_ready, best, delay, tries_num;
|
int n, i, all, n_ready, best, delay, tries_num;
|
||||||
int more_issue;
|
int more_issue;
|
||||||
struct choice_entry *top;
|
struct choice_entry *top;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
n_ready = ready->n_ready;
|
n_ready = ready->n_ready;
|
||||||
gcc_assert (dfa_lookahead >= 1 && privileged_n >= 0
|
gcc_assert (dfa_lookahead >= 1 && privileged_n >= 0
|
||||||
|
@ -5579,7 +5579,7 @@ max_issue (struct ready_list *ready, int privileged_n, state_t state,
|
||||||
1 if choose_ready () should be restarted without advancing the cycle. */
|
1 if choose_ready () should be restarted without advancing the cycle. */
|
||||||
static int
|
static int
|
||||||
choose_ready (struct ready_list *ready, bool first_cycle_insn_p,
|
choose_ready (struct ready_list *ready, bool first_cycle_insn_p,
|
||||||
rtx *insn_ptr)
|
rtx_insn **insn_ptr)
|
||||||
{
|
{
|
||||||
int lookahead;
|
int lookahead;
|
||||||
|
|
||||||
|
@ -5588,7 +5588,7 @@ choose_ready (struct ready_list *ready, bool first_cycle_insn_p,
|
||||||
if (nonscheduled_insns_begin == NULL_RTX)
|
if (nonscheduled_insns_begin == NULL_RTX)
|
||||||
nonscheduled_insns_begin = current_sched_info->prev_head;
|
nonscheduled_insns_begin = current_sched_info->prev_head;
|
||||||
|
|
||||||
rtx insn = first_nonscheduled_insn ();
|
rtx_insn *insn = first_nonscheduled_insn ();
|
||||||
|
|
||||||
if (QUEUE_INDEX (insn) == QUEUE_READY)
|
if (QUEUE_INDEX (insn) == QUEUE_READY)
|
||||||
/* INSN is in the ready_list. */
|
/* INSN is in the ready_list. */
|
||||||
|
@ -5621,7 +5621,7 @@ choose_ready (struct ready_list *ready, bool first_cycle_insn_p,
|
||||||
{
|
{
|
||||||
/* Try to choose the best insn. */
|
/* Try to choose the best insn. */
|
||||||
int index = 0, i;
|
int index = 0, i;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
insn = ready_element (ready, 0);
|
insn = ready_element (ready, 0);
|
||||||
if (INSN_CODE (insn) < 0)
|
if (INSN_CODE (insn) < 0)
|
||||||
|
@ -5709,10 +5709,10 @@ choose_ready (struct ready_list *ready, bool first_cycle_insn_p,
|
||||||
block. TARGET_BB is the argument passed to schedule_block. */
|
block. TARGET_BB is the argument passed to schedule_block. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
commit_schedule (rtx prev_head, rtx tail, basic_block *target_bb)
|
commit_schedule (rtx_insn *prev_head, rtx tail, basic_block *target_bb)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
last_scheduled_insn = prev_head;
|
last_scheduled_insn = prev_head;
|
||||||
for (i = 0;
|
for (i = 0;
|
||||||
|
@ -5768,7 +5768,7 @@ prune_ready_list (state_t temp_state, bool first_cycle_insn_p,
|
||||||
|
|
||||||
for (i = 0; i < ready.n_ready; i++)
|
for (i = 0; i < ready.n_ready; i++)
|
||||||
{
|
{
|
||||||
rtx insn = ready_element (&ready, i);
|
rtx_insn *insn = ready_element (&ready, i);
|
||||||
if (SCHED_GROUP_P (insn))
|
if (SCHED_GROUP_P (insn))
|
||||||
{
|
{
|
||||||
sched_group_found = true;
|
sched_group_found = true;
|
||||||
|
@ -5784,7 +5784,7 @@ prune_ready_list (state_t temp_state, bool first_cycle_insn_p,
|
||||||
int n = ready.n_ready;
|
int n = ready.n_ready;
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
rtx insn = ready_element (&ready, i);
|
rtx_insn *insn = ready_element (&ready, i);
|
||||||
int cost = 0;
|
int cost = 0;
|
||||||
const char *reason = "resource conflict";
|
const char *reason = "resource conflict";
|
||||||
|
|
||||||
|
@ -5971,10 +5971,10 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
int sort_p, advance, start_clock_var;
|
int sort_p, advance, start_clock_var;
|
||||||
|
|
||||||
/* Head/tail info for this block. */
|
/* Head/tail info for this block. */
|
||||||
rtx prev_head = current_sched_info->prev_head;
|
rtx_insn *prev_head = current_sched_info->prev_head;
|
||||||
rtx next_tail = current_sched_info->next_tail;
|
rtx next_tail = current_sched_info->next_tail;
|
||||||
rtx head = NEXT_INSN (prev_head);
|
rtx_insn *head = NEXT_INSN (prev_head);
|
||||||
rtx tail = PREV_INSN (next_tail);
|
rtx_insn *tail = PREV_INSN (next_tail);
|
||||||
|
|
||||||
if ((current_sched_info->flags & DONT_BREAK_DEPENDENCIES) == 0
|
if ((current_sched_info->flags & DONT_BREAK_DEPENDENCIES) == 0
|
||||||
&& sched_pressure != SCHED_PRESSURE_MODEL)
|
&& sched_pressure != SCHED_PRESSURE_MODEL)
|
||||||
|
@ -6025,7 +6025,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
/* We start inserting insns after PREV_HEAD. */
|
/* We start inserting insns after PREV_HEAD. */
|
||||||
last_scheduled_insn = prev_head;
|
last_scheduled_insn = prev_head;
|
||||||
last_nondebug_scheduled_insn = NULL_RTX;
|
last_nondebug_scheduled_insn = NULL_RTX;
|
||||||
nonscheduled_insns_begin = NULL_RTX;
|
nonscheduled_insns_begin = NULL;
|
||||||
|
|
||||||
gcc_assert ((NOTE_P (last_scheduled_insn)
|
gcc_assert ((NOTE_P (last_scheduled_insn)
|
||||||
|| DEBUG_INSN_P (last_scheduled_insn))
|
|| DEBUG_INSN_P (last_scheduled_insn))
|
||||||
|
@ -6075,16 +6075,16 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
activated make an exception for the insn right after
|
activated make an exception for the insn right after
|
||||||
nonscheduled_insns_begin. */
|
nonscheduled_insns_begin. */
|
||||||
{
|
{
|
||||||
rtx skip_insn;
|
rtx_insn *skip_insn;
|
||||||
|
|
||||||
if (dbg_cnt (sched_insn) == false)
|
if (dbg_cnt (sched_insn) == false)
|
||||||
skip_insn = first_nonscheduled_insn ();
|
skip_insn = first_nonscheduled_insn ();
|
||||||
else
|
else
|
||||||
skip_insn = NULL_RTX;
|
skip_insn = NULL;
|
||||||
|
|
||||||
while (i < ready.n_ready)
|
while (i < ready.n_ready)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
insn = ready_remove (&ready, i);
|
insn = ready_remove (&ready, i);
|
||||||
|
|
||||||
|
@ -6185,7 +6185,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
ls.can_issue_more = issue_rate;
|
ls.can_issue_more = issue_rate;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
int cost;
|
int cost;
|
||||||
bool asm_p;
|
bool asm_p;
|
||||||
|
|
||||||
|
@ -6212,7 +6212,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
{
|
{
|
||||||
while (ready.n_ready && DEBUG_INSN_P (ready_element (&ready, 0)))
|
while (ready.n_ready && DEBUG_INSN_P (ready_element (&ready, 0)))
|
||||||
{
|
{
|
||||||
rtx insn = ready_remove_first (&ready);
|
rtx_insn *insn = ready_remove_first (&ready);
|
||||||
gcc_assert (DEBUG_INSN_P (insn));
|
gcc_assert (DEBUG_INSN_P (insn));
|
||||||
(*current_sched_info->begin_schedule_ready) (insn);
|
(*current_sched_info->begin_schedule_ready) (insn);
|
||||||
scheduled_insns.safe_push (insn);
|
scheduled_insns.safe_push (insn);
|
||||||
|
@ -6282,7 +6282,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
insn = NULL_RTX;
|
insn = NULL;
|
||||||
res = choose_ready (&ready, ls.first_cycle_insn_p, &insn);
|
res = choose_ready (&ready, ls.first_cycle_insn_p, &insn);
|
||||||
|
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
|
@ -6434,7 +6434,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
while (must_backtrack)
|
while (must_backtrack)
|
||||||
{
|
{
|
||||||
struct haifa_saved_data *failed;
|
struct haifa_saved_data *failed;
|
||||||
rtx failed_insn;
|
rtx_insn *failed_insn;
|
||||||
|
|
||||||
must_backtrack = false;
|
must_backtrack = false;
|
||||||
failed = verify_shadows ();
|
failed = verify_shadows ();
|
||||||
|
@ -6494,7 +6494,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
}
|
}
|
||||||
for (i = ready.n_ready - 1; i >= 0; i--)
|
for (i = ready.n_ready - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
rtx x;
|
rtx_insn *x;
|
||||||
|
|
||||||
x = ready_element (&ready, i);
|
x = ready_element (&ready, i);
|
||||||
resolve_dependencies (x);
|
resolve_dependencies (x);
|
||||||
|
@ -6504,7 +6504,7 @@ schedule_block (basic_block *target_bb, state_t init_state)
|
||||||
rtx link;
|
rtx link;
|
||||||
while ((link = insn_queue[i]) != NULL)
|
while ((link = insn_queue[i]) != NULL)
|
||||||
{
|
{
|
||||||
rtx x = XEXP (link, 0);
|
rtx_insn *x = as_a <rtx_insn *> (XEXP (link, 0));
|
||||||
insn_queue[i] = XEXP (link, 1);
|
insn_queue[i] = XEXP (link, 1);
|
||||||
QUEUE_INDEX (x) = QUEUE_NOWHERE;
|
QUEUE_INDEX (x) = QUEUE_NOWHERE;
|
||||||
free_INSN_LIST_node (link);
|
free_INSN_LIST_node (link);
|
||||||
|
@ -6628,7 +6628,7 @@ set_priorities (rtx head, rtx tail)
|
||||||
int n_insn;
|
int n_insn;
|
||||||
int sched_max_insns_priority =
|
int sched_max_insns_priority =
|
||||||
current_sched_info->sched_max_insns_priority;
|
current_sched_info->sched_max_insns_priority;
|
||||||
rtx prev_head;
|
rtx_insn *prev_head;
|
||||||
|
|
||||||
if (head == tail && ! INSN_P (head))
|
if (head == tail && ! INSN_P (head))
|
||||||
gcc_unreachable ();
|
gcc_unreachable ();
|
||||||
|
@ -7024,7 +7024,7 @@ fix_inter_tick (rtx head, rtx tail)
|
||||||
0 - added to the ready list,
|
0 - added to the ready list,
|
||||||
0 < N - queued for N cycles. */
|
0 < N - queued for N cycles. */
|
||||||
int
|
int
|
||||||
try_ready (rtx next)
|
try_ready (rtx_insn *next)
|
||||||
{
|
{
|
||||||
ds_t old_ts, new_ts;
|
ds_t old_ts, new_ts;
|
||||||
|
|
||||||
|
@ -7156,7 +7156,7 @@ try_ready (rtx next)
|
||||||
|
|
||||||
/* Calculate INSN_TICK of NEXT and add it to either ready or queue list. */
|
/* Calculate INSN_TICK of NEXT and add it to either ready or queue list. */
|
||||||
static int
|
static int
|
||||||
fix_tick_ready (rtx next)
|
fix_tick_ready (rtx_insn *next)
|
||||||
{
|
{
|
||||||
int tick, delay;
|
int tick, delay;
|
||||||
|
|
||||||
|
@ -7205,7 +7205,7 @@ fix_tick_ready (rtx next)
|
||||||
or add it to the ready list (DELAY == QUEUE_READY),
|
or add it to the ready list (DELAY == QUEUE_READY),
|
||||||
or remove it from ready and queue lists at all (DELAY == QUEUE_NOWHERE). */
|
or remove it from ready and queue lists at all (DELAY == QUEUE_NOWHERE). */
|
||||||
static void
|
static void
|
||||||
change_queue_index (rtx next, int delay)
|
change_queue_index (rtx_insn *next, int delay)
|
||||||
{
|
{
|
||||||
int i = QUEUE_INDEX (next);
|
int i = QUEUE_INDEX (next);
|
||||||
|
|
||||||
|
@ -7264,7 +7264,7 @@ sched_extend_ready_list (int new_sched_ready_n_insns)
|
||||||
i = sched_ready_n_insns + 1;
|
i = sched_ready_n_insns + 1;
|
||||||
|
|
||||||
ready.veclen = new_sched_ready_n_insns + issue_rate;
|
ready.veclen = new_sched_ready_n_insns + issue_rate;
|
||||||
ready.vec = XRESIZEVEC (rtx, ready.vec, ready.veclen);
|
ready.vec = XRESIZEVEC (rtx_insn *, ready.vec, ready.veclen);
|
||||||
|
|
||||||
gcc_assert (new_sched_ready_n_insns >= sched_ready_n_insns);
|
gcc_assert (new_sched_ready_n_insns >= sched_ready_n_insns);
|
||||||
|
|
||||||
|
@ -7326,7 +7326,7 @@ haifa_luid_for_non_insn (rtx x)
|
||||||
|
|
||||||
/* Generates recovery code for INSN. */
|
/* Generates recovery code for INSN. */
|
||||||
static void
|
static void
|
||||||
generate_recovery_code (rtx insn)
|
generate_recovery_code (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (TODO_SPEC (insn) & BEGIN_SPEC)
|
if (TODO_SPEC (insn) & BEGIN_SPEC)
|
||||||
begin_speculative_block (insn);
|
begin_speculative_block (insn);
|
||||||
|
@ -7401,7 +7401,7 @@ process_insn_forw_deps_be_in_spec (rtx insn, rtx twin, ds_t fs)
|
||||||
|
|
||||||
/* Generates recovery code for BEGIN speculative INSN. */
|
/* Generates recovery code for BEGIN speculative INSN. */
|
||||||
static void
|
static void
|
||||||
begin_speculative_block (rtx insn)
|
begin_speculative_block (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (TODO_SPEC (insn) & BEGIN_DATA)
|
if (TODO_SPEC (insn) & BEGIN_DATA)
|
||||||
nr_begin_data++;
|
nr_begin_data++;
|
||||||
|
@ -7785,10 +7785,11 @@ sched_create_recovery_edges (basic_block first_bb, basic_block rec,
|
||||||
/* This function creates recovery code for INSN. If MUTATE_P is nonzero,
|
/* This function creates recovery code for INSN. If MUTATE_P is nonzero,
|
||||||
INSN is a simple check, that should be converted to branchy one. */
|
INSN is a simple check, that should be converted to branchy one. */
|
||||||
static void
|
static void
|
||||||
create_check_block_twin (rtx insn, bool mutate_p)
|
create_check_block_twin (rtx_insn *insn, bool mutate_p)
|
||||||
{
|
{
|
||||||
basic_block rec;
|
basic_block rec;
|
||||||
rtx label, check, twin;
|
rtx_insn *label, *check, *twin;
|
||||||
|
rtx check_pat;
|
||||||
ds_t fs;
|
ds_t fs;
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
dep_t dep;
|
dep_t dep;
|
||||||
|
@ -7818,11 +7819,11 @@ create_check_block_twin (rtx insn, bool mutate_p)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rec = EXIT_BLOCK_PTR_FOR_FN (cfun);
|
rec = EXIT_BLOCK_PTR_FOR_FN (cfun);
|
||||||
label = NULL_RTX;
|
label = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Emit CHECK. */
|
/* Emit CHECK. */
|
||||||
check = targetm.sched.gen_spec_check (insn, label, todo_spec);
|
check_pat = targetm.sched.gen_spec_check (insn, label, todo_spec);
|
||||||
|
|
||||||
if (rec != EXIT_BLOCK_PTR_FOR_FN (cfun))
|
if (rec != EXIT_BLOCK_PTR_FOR_FN (cfun))
|
||||||
{
|
{
|
||||||
|
@ -7830,12 +7831,12 @@ create_check_block_twin (rtx insn, bool mutate_p)
|
||||||
we emit check BEFORE insn, so insn after splitting
|
we emit check BEFORE insn, so insn after splitting
|
||||||
insn will be at the beginning of second_bb, which will
|
insn will be at the beginning of second_bb, which will
|
||||||
provide us with the correct life information. */
|
provide us with the correct life information. */
|
||||||
check = emit_jump_insn_before (check, insn);
|
check = emit_jump_insn_before (check_pat, insn);
|
||||||
JUMP_LABEL (check) = label;
|
JUMP_LABEL (check) = label;
|
||||||
LABEL_NUSES (label)++;
|
LABEL_NUSES (label)++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
check = emit_insn_before (check, insn);
|
check = emit_insn_before (check_pat, insn);
|
||||||
|
|
||||||
/* Extend data structures. */
|
/* Extend data structures. */
|
||||||
haifa_init_insn (check);
|
haifa_init_insn (check);
|
||||||
|
@ -8109,7 +8110,7 @@ fix_recovery_deps (basic_block rec)
|
||||||
|
|
||||||
/* Try to add instructions to the ready or queue list. */
|
/* Try to add instructions to the ready or queue list. */
|
||||||
for (link = ready_list; link; link = XEXP (link, 1))
|
for (link = ready_list; link; link = XEXP (link, 1))
|
||||||
try_ready (XEXP (link, 0));
|
try_ready (as_a <rtx_insn *> (XEXP (link, 0)));
|
||||||
free_INSN_LIST_list (&ready_list);
|
free_INSN_LIST_list (&ready_list);
|
||||||
|
|
||||||
/* Fixing jump's dependences. */
|
/* Fixing jump's dependences. */
|
||||||
|
@ -8369,7 +8370,7 @@ move_succs (vec<edge, va_gc> **succsp, basic_block to)
|
||||||
/* Remove INSN from the instruction stream.
|
/* Remove INSN from the instruction stream.
|
||||||
INSN should have any dependencies. */
|
INSN should have any dependencies. */
|
||||||
static void
|
static void
|
||||||
sched_remove_insn (rtx insn)
|
sched_remove_insn (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
sd_finish_insn (insn);
|
sd_finish_insn (insn);
|
||||||
|
|
||||||
|
@ -8647,10 +8648,10 @@ sched_create_empty_bb_1 (basic_block after)
|
||||||
|
|
||||||
/* Insert PAT as an INSN into the schedule and update the necessary data
|
/* Insert PAT as an INSN into the schedule and update the necessary data
|
||||||
structures to account for it. */
|
structures to account for it. */
|
||||||
rtx
|
rtx_insn *
|
||||||
sched_emit_insn (rtx pat)
|
sched_emit_insn (rtx pat)
|
||||||
{
|
{
|
||||||
rtx insn = emit_insn_before (pat, first_nonscheduled_insn ());
|
rtx_insn *insn = emit_insn_before (pat, first_nonscheduled_insn ());
|
||||||
haifa_init_insn (insn);
|
haifa_init_insn (insn);
|
||||||
|
|
||||||
if (current_sched_info->add_remove_insn)
|
if (current_sched_info->add_remove_insn)
|
||||||
|
@ -8666,11 +8667,11 @@ sched_emit_insn (rtx pat)
|
||||||
/* This function returns a candidate satisfying dispatch constraints from
|
/* This function returns a candidate satisfying dispatch constraints from
|
||||||
the ready list. */
|
the ready list. */
|
||||||
|
|
||||||
static rtx
|
static rtx_insn *
|
||||||
ready_remove_first_dispatch (struct ready_list *ready)
|
ready_remove_first_dispatch (struct ready_list *ready)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
rtx insn = ready_element (ready, 0);
|
rtx_insn *insn = ready_element (ready, 0);
|
||||||
|
|
||||||
if (ready->n_ready == 1
|
if (ready->n_ready == 1
|
||||||
|| !INSN_P (insn)
|
|| !INSN_P (insn)
|
||||||
|
|
|
@ -242,7 +242,7 @@ discover_loop (hwloop_info loop, basic_block tail_bb, rtx_insn *tail_insn, rtx r
|
||||||
loop->loop_end = tail_insn;
|
loop->loop_end = tail_insn;
|
||||||
loop->iter_reg = reg;
|
loop->iter_reg = reg;
|
||||||
vec_alloc (loop->incoming, 2);
|
vec_alloc (loop->incoming, 2);
|
||||||
loop->start_label = JUMP_LABEL (tail_insn);
|
loop->start_label = as_a <rtx_insn *> (JUMP_LABEL (tail_insn));
|
||||||
|
|
||||||
if (EDGE_COUNT (tail_bb->succs) != 2)
|
if (EDGE_COUNT (tail_bb->succs) != 2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -251,7 +251,7 @@ typedef struct node_sched_params node_sched_params;
|
||||||
code in order to use sched_analyze() for computing the dependencies.
|
code in order to use sched_analyze() for computing the dependencies.
|
||||||
They are used when initializing the sched_info structure. */
|
They are used when initializing the sched_info structure. */
|
||||||
static const char *
|
static const char *
|
||||||
sms_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED)
|
sms_print_insn (const rtx_insn *insn, int aligned ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
static char tmp[80];
|
static char tmp[80];
|
||||||
|
|
||||||
|
|
|
@ -482,17 +482,17 @@ static int cache_size;
|
||||||
static bool mark_as_hard;
|
static bool mark_as_hard;
|
||||||
|
|
||||||
static int deps_may_trap_p (const_rtx);
|
static int deps_may_trap_p (const_rtx);
|
||||||
static void add_dependence_1 (rtx, rtx, enum reg_note);
|
static void add_dependence_1 (rtx_insn *, rtx_insn *, enum reg_note);
|
||||||
static void add_dependence_list (rtx, rtx, int, enum reg_note, bool);
|
static void add_dependence_list (rtx_insn *, rtx, int, enum reg_note, bool);
|
||||||
static void add_dependence_list_and_free (struct deps_desc *, rtx,
|
static void add_dependence_list_and_free (struct deps_desc *, rtx_insn *,
|
||||||
rtx *, int, enum reg_note, bool);
|
rtx *, int, enum reg_note, bool);
|
||||||
static void delete_all_dependences (rtx);
|
static void delete_all_dependences (rtx);
|
||||||
static void chain_to_prev_insn (rtx);
|
static void chain_to_prev_insn (rtx_insn *);
|
||||||
|
|
||||||
static void flush_pending_lists (struct deps_desc *, rtx, int, int);
|
static void flush_pending_lists (struct deps_desc *, rtx_insn *, int, int);
|
||||||
static void sched_analyze_1 (struct deps_desc *, rtx, rtx);
|
static void sched_analyze_1 (struct deps_desc *, rtx, rtx_insn *);
|
||||||
static void sched_analyze_2 (struct deps_desc *, rtx, rtx);
|
static void sched_analyze_2 (struct deps_desc *, rtx, rtx_insn *);
|
||||||
static void sched_analyze_insn (struct deps_desc *, rtx, rtx);
|
static void sched_analyze_insn (struct deps_desc *, rtx, rtx_insn *);
|
||||||
|
|
||||||
static bool sched_has_condition_p (const_rtx);
|
static bool sched_has_condition_p (const_rtx);
|
||||||
static int conditions_mutex_p (const_rtx, const_rtx, bool, bool);
|
static int conditions_mutex_p (const_rtx, const_rtx, bool, bool);
|
||||||
|
@ -1513,7 +1513,7 @@ sd_debug_lists (rtx insn, sd_list_types_def types)
|
||||||
impossible; otherwise we add additional true dependencies on the
|
impossible; otherwise we add additional true dependencies on the
|
||||||
INSN_COND_DEPS list of the jump (which PRO must be). */
|
INSN_COND_DEPS list of the jump (which PRO must be). */
|
||||||
void
|
void
|
||||||
add_dependence (rtx con, rtx pro, enum reg_note dep_type)
|
add_dependence (rtx_insn *con, rtx_insn *pro, enum reg_note dep_type)
|
||||||
{
|
{
|
||||||
if (dep_type == REG_DEP_CONTROL
|
if (dep_type == REG_DEP_CONTROL
|
||||||
&& !(current_sched_info->flags & DO_PREDICATION))
|
&& !(current_sched_info->flags & DO_PREDICATION))
|
||||||
|
@ -1561,14 +1561,14 @@ add_dependence (rtx con, rtx pro, enum reg_note dep_type)
|
||||||
true if DEP_NONREG should be set on newly created dependencies. */
|
true if DEP_NONREG should be set on newly created dependencies. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_dependence_list (rtx insn, rtx list, int uncond, enum reg_note dep_type,
|
add_dependence_list (rtx_insn *insn, rtx list, int uncond, enum reg_note dep_type,
|
||||||
bool hard)
|
bool hard)
|
||||||
{
|
{
|
||||||
mark_as_hard = hard;
|
mark_as_hard = hard;
|
||||||
for (; list; list = XEXP (list, 1))
|
for (; list; list = XEXP (list, 1))
|
||||||
{
|
{
|
||||||
if (uncond || ! sched_insns_conditions_mutex_p (insn, XEXP (list, 0)))
|
if (uncond || ! sched_insns_conditions_mutex_p (insn, XEXP (list, 0)))
|
||||||
add_dependence (insn, XEXP (list, 0), dep_type);
|
add_dependence (insn, as_a <rtx_insn *> (XEXP (list, 0)), dep_type);
|
||||||
}
|
}
|
||||||
mark_as_hard = false;
|
mark_as_hard = false;
|
||||||
}
|
}
|
||||||
|
@ -1578,7 +1578,7 @@ add_dependence_list (rtx insn, rtx list, int uncond, enum reg_note dep_type,
|
||||||
newly created dependencies. */
|
newly created dependencies. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_dependence_list_and_free (struct deps_desc *deps, rtx insn, rtx *listp,
|
add_dependence_list_and_free (struct deps_desc *deps, rtx_insn *insn, rtx *listp,
|
||||||
int uncond, enum reg_note dep_type, bool hard)
|
int uncond, enum reg_note dep_type, bool hard)
|
||||||
{
|
{
|
||||||
add_dependence_list (insn, *listp, uncond, dep_type, hard);
|
add_dependence_list (insn, *listp, uncond, dep_type, hard);
|
||||||
|
@ -1661,15 +1661,15 @@ delete_all_dependences (rtx insn)
|
||||||
the previous nonnote insn. */
|
the previous nonnote insn. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chain_to_prev_insn (rtx insn)
|
chain_to_prev_insn (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
sd_iterator_def sd_it;
|
sd_iterator_def sd_it;
|
||||||
dep_t dep;
|
dep_t dep;
|
||||||
rtx prev_nonnote;
|
rtx_insn *prev_nonnote;
|
||||||
|
|
||||||
FOR_EACH_DEP (insn, SD_LIST_BACK, sd_it, dep)
|
FOR_EACH_DEP (insn, SD_LIST_BACK, sd_it, dep)
|
||||||
{
|
{
|
||||||
rtx i = insn;
|
rtx_insn *i = insn;
|
||||||
rtx_insn *pro = DEP_PRO (dep);
|
rtx_insn *pro = DEP_PRO (dep);
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -1749,7 +1749,7 @@ add_insn_mem_dependence (struct deps_desc *deps, bool read_p,
|
||||||
dependencies for a read operation, similarly with FOR_WRITE. */
|
dependencies for a read operation, similarly with FOR_WRITE. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
flush_pending_lists (struct deps_desc *deps, rtx insn, int for_read,
|
flush_pending_lists (struct deps_desc *deps, rtx_insn *insn, int for_read,
|
||||||
int for_write)
|
int for_write)
|
||||||
{
|
{
|
||||||
if (for_write)
|
if (for_write)
|
||||||
|
@ -1796,7 +1796,7 @@ flush_pending_lists (struct deps_desc *deps, rtx insn, int for_read,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Instruction which dependencies we are analyzing. */
|
/* Instruction which dependencies we are analyzing. */
|
||||||
static rtx cur_insn = NULL_RTX;
|
static rtx_insn *cur_insn = NULL;
|
||||||
|
|
||||||
/* Implement hooks for haifa scheduler. */
|
/* Implement hooks for haifa scheduler. */
|
||||||
|
|
||||||
|
@ -1805,7 +1805,7 @@ haifa_start_insn (rtx insn)
|
||||||
{
|
{
|
||||||
gcc_assert (insn && !cur_insn);
|
gcc_assert (insn && !cur_insn);
|
||||||
|
|
||||||
cur_insn = insn;
|
cur_insn = as_a <rtx_insn *> (insn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1895,7 +1895,7 @@ note_mem_dep (rtx m1, rtx m2, rtx e, ds_t ds)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
note_dep (rtx e, ds_t ds)
|
note_dep (rtx_insn *e, ds_t ds)
|
||||||
{
|
{
|
||||||
if (sched_deps_info->note_dep)
|
if (sched_deps_info->note_dep)
|
||||||
sched_deps_info->note_dep (e, ds);
|
sched_deps_info->note_dep (e, ds);
|
||||||
|
@ -2298,7 +2298,7 @@ maybe_extend_reg_info_p (void)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sched_analyze_reg (struct deps_desc *deps, int regno, enum machine_mode mode,
|
sched_analyze_reg (struct deps_desc *deps, int regno, enum machine_mode mode,
|
||||||
enum rtx_code ref, rtx insn)
|
enum rtx_code ref, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
/* We could emit new pseudos in renaming. Extend the reg structures. */
|
/* We could emit new pseudos in renaming. Extend the reg structures. */
|
||||||
if (!reload_completed && sel_sched_p ()
|
if (!reload_completed && sel_sched_p ()
|
||||||
|
@ -2376,7 +2376,7 @@ sched_analyze_reg (struct deps_desc *deps, int regno, enum machine_mode mode,
|
||||||
destination of X, and reads of everything mentioned. */
|
destination of X, and reads of everything mentioned. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sched_analyze_1 (struct deps_desc *deps, rtx x, rtx insn)
|
sched_analyze_1 (struct deps_desc *deps, rtx x, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
rtx dest = XEXP (x, 0);
|
rtx dest = XEXP (x, 0);
|
||||||
enum rtx_code code = GET_CODE (x);
|
enum rtx_code code = GET_CODE (x);
|
||||||
|
@ -2548,7 +2548,7 @@ sched_analyze_1 (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
|
|
||||||
/* Analyze the uses of memory and registers in rtx X in INSN. */
|
/* Analyze the uses of memory and registers in rtx X in INSN. */
|
||||||
static void
|
static void
|
||||||
sched_analyze_2 (struct deps_desc *deps, rtx x, rtx insn)
|
sched_analyze_2 (struct deps_desc *deps, rtx x, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
@ -2669,7 +2669,8 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1))
|
for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1))
|
||||||
add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI);
|
add_dependence (insn, as_a <rtx_insn *> (XEXP (u, 0)),
|
||||||
|
REG_DEP_ANTI);
|
||||||
|
|
||||||
for (u = deps->pending_jump_insns; u; u = XEXP (u, 1))
|
for (u = deps->pending_jump_insns; u; u = XEXP (u, 1))
|
||||||
if (deps_may_trap_p (x))
|
if (deps_may_trap_p (x))
|
||||||
|
@ -2680,10 +2681,11 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
ds_t ds = set_dep_weak (DEP_ANTI, BEGIN_CONTROL,
|
ds_t ds = set_dep_weak (DEP_ANTI, BEGIN_CONTROL,
|
||||||
MAX_DEP_WEAK);
|
MAX_DEP_WEAK);
|
||||||
|
|
||||||
note_dep (XEXP (u, 0), ds);
|
note_dep (as_a <rtx_insn *> (XEXP (u, 0)), ds);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
add_dependence (insn, XEXP (u, 0), REG_DEP_CONTROL);
|
add_dependence (insn, as_a <rtx_insn *> (XEXP (u, 0)),
|
||||||
|
REG_DEP_CONTROL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2861,7 +2863,7 @@ sched_macro_fuse_insns (rtx insn)
|
||||||
|
|
||||||
/* Analyze an INSN with pattern X to find all dependencies. */
|
/* Analyze an INSN with pattern X to find all dependencies. */
|
||||||
static void
|
static void
|
||||||
sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
|
sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
RTX_CODE code = GET_CODE (x);
|
RTX_CODE code = GET_CODE (x);
|
||||||
rtx link;
|
rtx link;
|
||||||
|
@ -3009,7 +3011,8 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
while (pending)
|
while (pending)
|
||||||
{
|
{
|
||||||
if (! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
|
if (! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
|
||||||
add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
|
add_dependence (insn, as_a <rtx_insn *> (XEXP (pending, 0)),
|
||||||
|
REG_DEP_OUTPUT);
|
||||||
pending = XEXP (pending, 1);
|
pending = XEXP (pending, 1);
|
||||||
pending_mem = XEXP (pending_mem, 1);
|
pending_mem = XEXP (pending_mem, 1);
|
||||||
}
|
}
|
||||||
|
@ -3020,7 +3023,8 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
{
|
{
|
||||||
if (MEM_VOLATILE_P (XEXP (pending_mem, 0))
|
if (MEM_VOLATILE_P (XEXP (pending_mem, 0))
|
||||||
&& ! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
|
&& ! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
|
||||||
add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
|
add_dependence (insn, as_a <rtx_insn *> (XEXP (pending, 0)),
|
||||||
|
REG_DEP_OUTPUT);
|
||||||
pending = XEXP (pending, 1);
|
pending = XEXP (pending, 1);
|
||||||
pending_mem = XEXP (pending_mem, 1);
|
pending_mem = XEXP (pending_mem, 1);
|
||||||
}
|
}
|
||||||
|
@ -3051,7 +3055,7 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
/* Add register dependencies for insn. */
|
/* Add register dependencies for insn. */
|
||||||
if (DEBUG_INSN_P (insn))
|
if (DEBUG_INSN_P (insn))
|
||||||
{
|
{
|
||||||
rtx prev = deps->last_debug_insn;
|
rtx_insn *prev = deps->last_debug_insn;
|
||||||
rtx u;
|
rtx u;
|
||||||
|
|
||||||
if (!deps->readonly)
|
if (!deps->readonly)
|
||||||
|
@ -3065,7 +3069,7 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
|
||||||
|
|
||||||
if (!sel_sched_p ())
|
if (!sel_sched_p ())
|
||||||
for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1))
|
for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1))
|
||||||
add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI);
|
add_dependence (insn, as_a <rtx_insn *> (XEXP (u, 0)), REG_DEP_ANTI);
|
||||||
|
|
||||||
EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, rsi)
|
EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, rsi)
|
||||||
{
|
{
|
||||||
|
@ -3585,7 +3589,7 @@ chain_to_prev_insn_p (rtx insn)
|
||||||
|
|
||||||
/* Analyze INSN with DEPS as a context. */
|
/* Analyze INSN with DEPS as a context. */
|
||||||
void
|
void
|
||||||
deps_analyze_insn (struct deps_desc *deps, rtx insn)
|
deps_analyze_insn (struct deps_desc *deps, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (sched_deps_info->start_insn)
|
if (sched_deps_info->start_insn)
|
||||||
sched_deps_info->start_insn (insn);
|
sched_deps_info->start_insn (insn);
|
||||||
|
@ -3770,9 +3774,9 @@ deps_start_bb (struct deps_desc *deps, rtx head)
|
||||||
/* Analyze every insn between HEAD and TAIL inclusive, creating backward
|
/* Analyze every insn between HEAD and TAIL inclusive, creating backward
|
||||||
dependencies for each insn. */
|
dependencies for each insn. */
|
||||||
void
|
void
|
||||||
sched_analyze (struct deps_desc *deps, rtx head, rtx tail)
|
sched_analyze (struct deps_desc *deps, rtx_insn *head, rtx_insn *tail)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
if (sched_deps_info->use_cselib)
|
if (sched_deps_info->use_cselib)
|
||||||
cselib_init (CSELIB_RECORD_MEMORY);
|
cselib_init (CSELIB_RECORD_MEMORY);
|
||||||
|
@ -4204,7 +4208,7 @@ estimate_dep_weak (rtx mem1, rtx mem2)
|
||||||
This function can handle same INSN and ELEM (INSN == ELEM).
|
This function can handle same INSN and ELEM (INSN == ELEM).
|
||||||
It is a convenience wrapper. */
|
It is a convenience wrapper. */
|
||||||
static void
|
static void
|
||||||
add_dependence_1 (rtx insn, rtx elem, enum reg_note dep_type)
|
add_dependence_1 (rtx_insn *insn, rtx_insn *elem, enum reg_note dep_type)
|
||||||
{
|
{
|
||||||
ds_t ds;
|
ds_t ds;
|
||||||
bool internal;
|
bool internal;
|
||||||
|
@ -4601,8 +4605,8 @@ check_dep (dep_t dep, bool relaxed_p)
|
||||||
insns which depend on each other, but could possibly be interchanged. */
|
insns which depend on each other, but could possibly be interchanged. */
|
||||||
struct mem_inc_info
|
struct mem_inc_info
|
||||||
{
|
{
|
||||||
rtx inc_insn;
|
rtx_insn *inc_insn;
|
||||||
rtx mem_insn;
|
rtx_insn *mem_insn;
|
||||||
|
|
||||||
rtx *mem_loc;
|
rtx *mem_loc;
|
||||||
/* A register occurring in the memory address for which we wish to break
|
/* A register occurring in the memory address for which we wish to break
|
||||||
|
@ -4657,7 +4661,7 @@ attempt_change (struct mem_inc_info *mii, rtx new_addr)
|
||||||
a corresponding memory reference. */
|
a corresponding memory reference. */
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
parse_add_or_inc (struct mem_inc_info *mii, rtx insn, bool before_mem)
|
parse_add_or_inc (struct mem_inc_info *mii, rtx_insn *insn, bool before_mem)
|
||||||
{
|
{
|
||||||
rtx pat = single_set (insn);
|
rtx pat = single_set (insn);
|
||||||
rtx src, cst;
|
rtx src, cst;
|
||||||
|
@ -4727,7 +4731,7 @@ find_inc (struct mem_inc_info *mii, bool backwards)
|
||||||
dep_node_t node = DEP_LINK_NODE (*sd_it.linkp);
|
dep_node_t node = DEP_LINK_NODE (*sd_it.linkp);
|
||||||
rtx_insn *pro = DEP_PRO (dep);
|
rtx_insn *pro = DEP_PRO (dep);
|
||||||
rtx_insn *con = DEP_CON (dep);
|
rtx_insn *con = DEP_CON (dep);
|
||||||
rtx inc_cand = backwards ? pro : con;
|
rtx_insn *inc_cand = backwards ? pro : con;
|
||||||
if (DEP_NONREG (dep) || DEP_MULTIPLE (dep))
|
if (DEP_NONREG (dep) || DEP_MULTIPLE (dep))
|
||||||
goto next;
|
goto next;
|
||||||
if (parse_add_or_inc (mii, inc_cand, backwards))
|
if (parse_add_or_inc (mii, inc_cand, backwards))
|
||||||
|
@ -4894,9 +4898,9 @@ find_mem (struct mem_inc_info *mii, rtx *address_of_x)
|
||||||
dependencies that can be broken by modifying one of the patterns. */
|
dependencies that can be broken by modifying one of the patterns. */
|
||||||
|
|
||||||
void
|
void
|
||||||
find_modifiable_mems (rtx head, rtx tail)
|
find_modifiable_mems (rtx_insn *head, rtx_insn *tail)
|
||||||
{
|
{
|
||||||
rtx insn, next_tail = NEXT_INSN (tail);
|
rtx_insn *insn, *next_tail = NEXT_INSN (tail);
|
||||||
int success_in_block = 0;
|
int success_in_block = 0;
|
||||||
|
|
||||||
for (insn = head; insn != next_tail; insn = NEXT_INSN (insn))
|
for (insn = head; insn != next_tail; insn = NEXT_INSN (insn))
|
||||||
|
|
|
@ -55,18 +55,18 @@ static basic_block last_bb;
|
||||||
|
|
||||||
/* Implementations of the sched_info functions for region scheduling. */
|
/* Implementations of the sched_info functions for region scheduling. */
|
||||||
static void init_ready_list (void);
|
static void init_ready_list (void);
|
||||||
static void begin_schedule_ready (rtx);
|
static void begin_schedule_ready (rtx_insn *);
|
||||||
static int schedule_more_p (void);
|
static int schedule_more_p (void);
|
||||||
static const char *ebb_print_insn (const_rtx, int);
|
static const char *ebb_print_insn (const rtx_insn *, int);
|
||||||
static int rank (rtx, rtx);
|
static int rank (rtx_insn *, rtx_insn *);
|
||||||
static int ebb_contributes_to_priority (rtx, rtx);
|
static int ebb_contributes_to_priority (rtx_insn *, rtx_insn *);
|
||||||
static basic_block earliest_block_with_similiar_load (basic_block, rtx);
|
static basic_block earliest_block_with_similiar_load (basic_block, rtx);
|
||||||
static void add_deps_for_risky_insns (rtx_insn *, rtx_insn *);
|
static void add_deps_for_risky_insns (rtx_insn *, rtx_insn *);
|
||||||
static void debug_ebb_dependencies (rtx, rtx);
|
static void debug_ebb_dependencies (rtx, rtx);
|
||||||
|
|
||||||
static void ebb_add_remove_insn (rtx, int);
|
static void ebb_add_remove_insn (rtx_insn *, int);
|
||||||
static void ebb_add_block (basic_block, basic_block);
|
static void ebb_add_block (basic_block, basic_block);
|
||||||
static basic_block advance_target_bb (basic_block, rtx);
|
static basic_block advance_target_bb (basic_block, rtx_insn *);
|
||||||
static void ebb_fix_recovery_cfg (int, int, int);
|
static void ebb_fix_recovery_cfg (int, int, int);
|
||||||
|
|
||||||
/* Allocate memory and store the state of the frontend. Return the allocated
|
/* Allocate memory and store the state of the frontend. Return the allocated
|
||||||
|
@ -118,7 +118,7 @@ init_ready_list (void)
|
||||||
int n = 0;
|
int n = 0;
|
||||||
rtx prev_head = current_sched_info->prev_head;
|
rtx prev_head = current_sched_info->prev_head;
|
||||||
rtx next_tail = current_sched_info->next_tail;
|
rtx next_tail = current_sched_info->next_tail;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
sched_rgn_n_insns = 0;
|
sched_rgn_n_insns = 0;
|
||||||
|
|
||||||
|
@ -139,14 +139,14 @@ init_ready_list (void)
|
||||||
|
|
||||||
/* INSN is being scheduled after LAST. Update counters. */
|
/* INSN is being scheduled after LAST. Update counters. */
|
||||||
static void
|
static void
|
||||||
begin_schedule_ready (rtx insn ATTRIBUTE_UNUSED)
|
begin_schedule_ready (rtx_insn *insn ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
sched_rgn_n_insns++;
|
sched_rgn_n_insns++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INSN is being moved to its place in the schedule, after LAST. */
|
/* INSN is being moved to its place in the schedule, after LAST. */
|
||||||
static void
|
static void
|
||||||
begin_move_insn (rtx insn, rtx last)
|
begin_move_insn (rtx_insn *insn, rtx_insn *last)
|
||||||
{
|
{
|
||||||
if (BLOCK_FOR_INSN (insn) == last_bb
|
if (BLOCK_FOR_INSN (insn) == last_bb
|
||||||
/* INSN is a jump in the last block, ... */
|
/* INSN is a jump in the last block, ... */
|
||||||
|
@ -214,7 +214,7 @@ begin_move_insn (rtx insn, rtx last)
|
||||||
to be formatted so that multiple output lines will line up nicely. */
|
to be formatted so that multiple output lines will line up nicely. */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
ebb_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED)
|
ebb_print_insn (const rtx_insn *insn, int aligned ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
static char tmp[80];
|
static char tmp[80];
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ ebb_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED)
|
||||||
is to be preferred. Zero if they are equally good. */
|
is to be preferred. Zero if they are equally good. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rank (rtx insn1, rtx insn2)
|
rank (rtx_insn *insn1, rtx_insn *insn2)
|
||||||
{
|
{
|
||||||
basic_block bb1 = BLOCK_FOR_INSN (insn1);
|
basic_block bb1 = BLOCK_FOR_INSN (insn1);
|
||||||
basic_block bb2 = BLOCK_FOR_INSN (insn2);
|
basic_block bb2 = BLOCK_FOR_INSN (insn2);
|
||||||
|
@ -251,8 +251,8 @@ rank (rtx insn1, rtx insn2)
|
||||||
calculations. */
|
calculations. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ebb_contributes_to_priority (rtx next ATTRIBUTE_UNUSED,
|
ebb_contributes_to_priority (rtx_insn *next ATTRIBUTE_UNUSED,
|
||||||
rtx insn ATTRIBUTE_UNUSED)
|
rtx_insn *insn ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -668,7 +668,7 @@ schedule_ebbs (void)
|
||||||
|
|
||||||
/* INSN has been added to/removed from current ebb. */
|
/* INSN has been added to/removed from current ebb. */
|
||||||
static void
|
static void
|
||||||
ebb_add_remove_insn (rtx insn ATTRIBUTE_UNUSED, int remove_p)
|
ebb_add_remove_insn (rtx_insn *insn ATTRIBUTE_UNUSED, int remove_p)
|
||||||
{
|
{
|
||||||
if (!remove_p)
|
if (!remove_p)
|
||||||
rgn_n_insns++;
|
rgn_n_insns++;
|
||||||
|
@ -692,7 +692,7 @@ ebb_add_block (basic_block bb, basic_block after)
|
||||||
/* Return next block in ebb chain. For parameter meaning please refer to
|
/* Return next block in ebb chain. For parameter meaning please refer to
|
||||||
sched-int.h: struct sched_info: advance_target_bb. */
|
sched-int.h: struct sched_info: advance_target_bb. */
|
||||||
static basic_block
|
static basic_block
|
||||||
advance_target_bb (basic_block bb, rtx insn)
|
advance_target_bb (basic_block bb, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (insn)
|
if (insn)
|
||||||
{
|
{
|
||||||
|
|
|
@ -125,10 +125,10 @@ extern int insn_luid (rtx);
|
||||||
/* This list holds ripped off notes from the current block. These notes will
|
/* This list holds ripped off notes from the current block. These notes will
|
||||||
be attached to the beginning of the block when its scheduling is
|
be attached to the beginning of the block when its scheduling is
|
||||||
finished. */
|
finished. */
|
||||||
extern rtx note_list;
|
extern rtx_insn *note_list;
|
||||||
|
|
||||||
extern void remove_notes (rtx, rtx);
|
extern void remove_notes (rtx_insn *, rtx_insn *);
|
||||||
extern rtx restore_other_notes (rtx, basic_block);
|
extern rtx_insn *restore_other_notes (rtx_insn *, basic_block);
|
||||||
extern void sched_insns_init (rtx);
|
extern void sched_insns_init (rtx);
|
||||||
extern void sched_insns_finish (void);
|
extern void sched_insns_finish (void);
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ extern bool sel_insn_is_speculation_check (rtx);
|
||||||
N_DEBUG determines how many debug insns are on the ready list. */
|
N_DEBUG determines how many debug insns are on the ready list. */
|
||||||
struct ready_list
|
struct ready_list
|
||||||
{
|
{
|
||||||
rtx *vec;
|
rtx_insn **vec;
|
||||||
int veclen;
|
int veclen;
|
||||||
int first;
|
int first;
|
||||||
int n_ready;
|
int n_ready;
|
||||||
|
@ -211,7 +211,7 @@ struct dep_replacement
|
||||||
rtx *loc;
|
rtx *loc;
|
||||||
rtx orig;
|
rtx orig;
|
||||||
rtx newval;
|
rtx newval;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Information about the dependency. */
|
/* Information about the dependency. */
|
||||||
|
@ -539,10 +539,10 @@ struct deps_desc
|
||||||
enum post_call_group in_post_call_group_p;
|
enum post_call_group in_post_call_group_p;
|
||||||
|
|
||||||
/* The last debug insn we've seen. */
|
/* The last debug insn we've seen. */
|
||||||
rtx last_debug_insn;
|
rtx_insn *last_debug_insn;
|
||||||
|
|
||||||
/* The last insn bearing REG_ARGS_SIZE that we've seen. */
|
/* The last insn bearing REG_ARGS_SIZE that we've seen. */
|
||||||
rtx last_args_size;
|
rtx_insn *last_args_size;
|
||||||
|
|
||||||
/* The maximum register number for the following arrays. Before reload
|
/* The maximum register number for the following arrays. Before reload
|
||||||
this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER. */
|
this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER. */
|
||||||
|
@ -580,7 +580,7 @@ struct haifa_sched_info
|
||||||
void (*init_ready_list) (void);
|
void (*init_ready_list) (void);
|
||||||
/* Called after taking an insn from the ready list. Returns nonzero if
|
/* Called after taking an insn from the ready list. Returns nonzero if
|
||||||
this insn can be scheduled, nonzero if we should silently discard it. */
|
this insn can be scheduled, nonzero if we should silently discard it. */
|
||||||
int (*can_schedule_ready_p) (rtx);
|
int (*can_schedule_ready_p) (rtx_insn *);
|
||||||
/* Return nonzero if there are more insns that should be scheduled. */
|
/* Return nonzero if there are more insns that should be scheduled. */
|
||||||
int (*schedule_more_p) (void);
|
int (*schedule_more_p) (void);
|
||||||
/* Called after an insn has all its hard dependencies resolved.
|
/* Called after an insn has all its hard dependencies resolved.
|
||||||
|
@ -588,30 +588,30 @@ struct haifa_sched_info
|
||||||
to indicate if instruction should be moved to the ready list or the
|
to indicate if instruction should be moved to the ready list or the
|
||||||
queue, or if it should silently discard it (until next resolved
|
queue, or if it should silently discard it (until next resolved
|
||||||
dependence). */
|
dependence). */
|
||||||
ds_t (*new_ready) (rtx, ds_t);
|
ds_t (*new_ready) (rtx_insn *, ds_t);
|
||||||
/* Compare priority of two insns. Return a positive number if the second
|
/* Compare priority of two insns. Return a positive number if the second
|
||||||
insn is to be preferred for scheduling, and a negative one if the first
|
insn is to be preferred for scheduling, and a negative one if the first
|
||||||
is to be preferred. Zero if they are equally good. */
|
is to be preferred. Zero if they are equally good. */
|
||||||
int (*rank) (rtx, rtx);
|
int (*rank) (rtx_insn *, rtx_insn *);
|
||||||
/* Return a string that contains the insn uid and optionally anything else
|
/* Return a string that contains the insn uid and optionally anything else
|
||||||
necessary to identify this insn in an output. It's valid to use a
|
necessary to identify this insn in an output. It's valid to use a
|
||||||
static buffer for this. The ALIGNED parameter should cause the string
|
static buffer for this. The ALIGNED parameter should cause the string
|
||||||
to be formatted so that multiple output lines will line up nicely. */
|
to be formatted so that multiple output lines will line up nicely. */
|
||||||
const char *(*print_insn) (const_rtx, int);
|
const char *(*print_insn) (const rtx_insn *, int);
|
||||||
/* Return nonzero if an insn should be included in priority
|
/* Return nonzero if an insn should be included in priority
|
||||||
calculations. */
|
calculations. */
|
||||||
int (*contributes_to_priority) (rtx, rtx);
|
int (*contributes_to_priority) (rtx_insn *, rtx_insn *);
|
||||||
|
|
||||||
/* Return true if scheduling insn (passed as the parameter) will trigger
|
/* Return true if scheduling insn (passed as the parameter) will trigger
|
||||||
finish of scheduling current block. */
|
finish of scheduling current block. */
|
||||||
bool (*insn_finishes_block_p) (rtx);
|
bool (*insn_finishes_block_p) (rtx_insn *);
|
||||||
|
|
||||||
/* The boundaries of the set of insns to be scheduled. */
|
/* The boundaries of the set of insns to be scheduled. */
|
||||||
rtx_insn *prev_head, *next_tail;
|
rtx_insn *prev_head, *next_tail;
|
||||||
|
|
||||||
/* Filled in after the schedule is finished; the first and last scheduled
|
/* Filled in after the schedule is finished; the first and last scheduled
|
||||||
insns. */
|
insns. */
|
||||||
rtx head, tail;
|
rtx_insn *head, *tail;
|
||||||
|
|
||||||
/* If nonzero, enables an additional sanity check in schedule_block. */
|
/* If nonzero, enables an additional sanity check in schedule_block. */
|
||||||
unsigned int queue_must_finish_empty:1;
|
unsigned int queue_must_finish_empty:1;
|
||||||
|
@ -623,23 +623,23 @@ struct haifa_sched_info
|
||||||
|
|
||||||
/* Called to notify frontend that instruction is being added (second
|
/* Called to notify frontend that instruction is being added (second
|
||||||
parameter == 0) or removed (second parameter == 1). */
|
parameter == 0) or removed (second parameter == 1). */
|
||||||
void (*add_remove_insn) (rtx, int);
|
void (*add_remove_insn) (rtx_insn *, int);
|
||||||
|
|
||||||
/* Called to notify the frontend that instruction INSN is being
|
/* Called to notify the frontend that instruction INSN is being
|
||||||
scheduled. */
|
scheduled. */
|
||||||
void (*begin_schedule_ready) (rtx insn);
|
void (*begin_schedule_ready) (rtx_insn *insn);
|
||||||
|
|
||||||
/* Called to notify the frontend that an instruction INSN is about to be
|
/* Called to notify the frontend that an instruction INSN is about to be
|
||||||
moved to its correct place in the final schedule. This is done for all
|
moved to its correct place in the final schedule. This is done for all
|
||||||
insns in order of the schedule. LAST indicates the last scheduled
|
insns in order of the schedule. LAST indicates the last scheduled
|
||||||
instruction. */
|
instruction. */
|
||||||
void (*begin_move_insn) (rtx insn, rtx last);
|
void (*begin_move_insn) (rtx_insn *insn, rtx_insn *last);
|
||||||
|
|
||||||
/* If the second parameter is not NULL, return nonnull value, if the
|
/* If the second parameter is not NULL, return nonnull value, if the
|
||||||
basic block should be advanced.
|
basic block should be advanced.
|
||||||
If the second parameter is NULL, return the next basic block in EBB.
|
If the second parameter is NULL, return the next basic block in EBB.
|
||||||
The first parameter is the current basic block in EBB. */
|
The first parameter is the current basic block in EBB. */
|
||||||
basic_block (*advance_target_bb) (basic_block, rtx);
|
basic_block (*advance_target_bb) (basic_block, rtx_insn *);
|
||||||
|
|
||||||
/* Allocate memory, store the frontend scheduler state in it, and
|
/* Allocate memory, store the frontend scheduler state in it, and
|
||||||
return it. */
|
return it. */
|
||||||
|
@ -1272,7 +1272,7 @@ struct sched_deps_info_def
|
||||||
void (*note_mem_dep) (rtx mem1, rtx mem2, rtx insn2, ds_t ds);
|
void (*note_mem_dep) (rtx mem1, rtx mem2, rtx insn2, ds_t ds);
|
||||||
|
|
||||||
/* Note a dependence of type DS from the INSN. */
|
/* Note a dependence of type DS from the INSN. */
|
||||||
void (*note_dep) (rtx insn, ds_t ds);
|
void (*note_dep) (rtx, ds_t ds);
|
||||||
|
|
||||||
/* Nonzero if we should use cselib for better alias analysis. This
|
/* Nonzero if we should use cselib for better alias analysis. This
|
||||||
must be 0 if the dependency information is used after sched_analyze
|
must be 0 if the dependency information is used after sched_analyze
|
||||||
|
@ -1296,14 +1296,14 @@ extern struct sched_deps_info_def *sched_deps_info;
|
||||||
extern rtx sched_get_reverse_condition_uncached (const_rtx);
|
extern rtx sched_get_reverse_condition_uncached (const_rtx);
|
||||||
extern bool sched_insns_conditions_mutex_p (const_rtx, const_rtx);
|
extern bool sched_insns_conditions_mutex_p (const_rtx, const_rtx);
|
||||||
extern bool sched_insn_is_legitimate_for_speculation_p (const_rtx, ds_t);
|
extern bool sched_insn_is_legitimate_for_speculation_p (const_rtx, ds_t);
|
||||||
extern void add_dependence (rtx, rtx, enum reg_note);
|
extern void add_dependence (rtx_insn *, rtx_insn *, enum reg_note);
|
||||||
extern void sched_analyze (struct deps_desc *, rtx, rtx);
|
extern void sched_analyze (struct deps_desc *, rtx_insn *, rtx_insn *);
|
||||||
extern void init_deps (struct deps_desc *, bool);
|
extern void init_deps (struct deps_desc *, bool);
|
||||||
extern void init_deps_reg_last (struct deps_desc *);
|
extern void init_deps_reg_last (struct deps_desc *);
|
||||||
extern void free_deps (struct deps_desc *);
|
extern void free_deps (struct deps_desc *);
|
||||||
extern void init_deps_global (void);
|
extern void init_deps_global (void);
|
||||||
extern void finish_deps_global (void);
|
extern void finish_deps_global (void);
|
||||||
extern void deps_analyze_insn (struct deps_desc *, rtx);
|
extern void deps_analyze_insn (struct deps_desc *, rtx_insn *);
|
||||||
extern void remove_from_deps (struct deps_desc *, rtx);
|
extern void remove_from_deps (struct deps_desc *, rtx);
|
||||||
extern void init_insn_reg_pressure_info (rtx);
|
extern void init_insn_reg_pressure_info (rtx);
|
||||||
|
|
||||||
|
@ -1359,10 +1359,10 @@ extern int issue_rate;
|
||||||
extern int dfa_lookahead;
|
extern int dfa_lookahead;
|
||||||
|
|
||||||
extern void ready_sort (struct ready_list *);
|
extern void ready_sort (struct ready_list *);
|
||||||
extern rtx ready_element (struct ready_list *, int);
|
extern rtx_insn *ready_element (struct ready_list *, int);
|
||||||
extern rtx *ready_lastpos (struct ready_list *);
|
extern rtx_insn **ready_lastpos (struct ready_list *);
|
||||||
|
|
||||||
extern int try_ready (rtx);
|
extern int try_ready (rtx_insn *);
|
||||||
extern void sched_extend_ready_list (int);
|
extern void sched_extend_ready_list (int);
|
||||||
extern void sched_finish_ready_list (void);
|
extern void sched_finish_ready_list (void);
|
||||||
extern void sched_change_pattern (rtx, rtx);
|
extern void sched_change_pattern (rtx, rtx);
|
||||||
|
@ -1371,7 +1371,7 @@ extern void unlink_bb_notes (basic_block, basic_block);
|
||||||
extern void add_block (basic_block, basic_block);
|
extern void add_block (basic_block, basic_block);
|
||||||
extern rtx_note *bb_note (basic_block);
|
extern rtx_note *bb_note (basic_block);
|
||||||
extern void concat_note_lists (rtx, rtx *);
|
extern void concat_note_lists (rtx, rtx *);
|
||||||
extern rtx sched_emit_insn (rtx);
|
extern rtx_insn *sched_emit_insn (rtx);
|
||||||
extern rtx get_ready_element (int);
|
extern rtx get_ready_element (int);
|
||||||
extern int number_in_ready (void);
|
extern int number_in_ready (void);
|
||||||
|
|
||||||
|
@ -1431,11 +1431,11 @@ extern int target_bb;
|
||||||
extern bool sched_no_dce;
|
extern bool sched_no_dce;
|
||||||
|
|
||||||
extern void set_modulo_params (int, int, int, int);
|
extern void set_modulo_params (int, int, int, int);
|
||||||
extern void record_delay_slot_pair (rtx, rtx, int, int);
|
extern void record_delay_slot_pair (rtx_insn *, rtx_insn *, int, int);
|
||||||
extern rtx real_insn_for_shadow (rtx);
|
extern rtx real_insn_for_shadow (rtx);
|
||||||
extern void discard_delay_pairs_above (int);
|
extern void discard_delay_pairs_above (int);
|
||||||
extern void free_delay_pairs (void);
|
extern void free_delay_pairs (void);
|
||||||
extern void add_delay_dependencies (rtx);
|
extern void add_delay_dependencies (rtx_insn *);
|
||||||
extern bool sched_is_disabled_for_current_region_p (void);
|
extern bool sched_is_disabled_for_current_region_p (void);
|
||||||
extern void sched_rgn_init (bool);
|
extern void sched_rgn_init (bool);
|
||||||
extern void sched_rgn_finish (void);
|
extern void sched_rgn_finish (void);
|
||||||
|
@ -1452,7 +1452,7 @@ extern void increase_insn_priority (rtx, int);
|
||||||
extern void debug_rgn_dependencies (int);
|
extern void debug_rgn_dependencies (int);
|
||||||
extern void debug_dependencies (rtx, rtx);
|
extern void debug_dependencies (rtx, rtx);
|
||||||
extern void free_rgn_deps (void);
|
extern void free_rgn_deps (void);
|
||||||
extern int contributes_to_priority (rtx, rtx);
|
extern int contributes_to_priority (rtx_insn *, rtx_insn *);
|
||||||
extern void extend_rgns (int *, int *, sbitmap, int *);
|
extern void extend_rgns (int *, int *, sbitmap, int *);
|
||||||
extern void deps_join (struct deps_desc *, struct deps_desc *);
|
extern void deps_join (struct deps_desc *, struct deps_desc *);
|
||||||
|
|
||||||
|
@ -1467,7 +1467,7 @@ extern void dump_region_dot_file (const char *, int);
|
||||||
extern void haifa_sched_init (void);
|
extern void haifa_sched_init (void);
|
||||||
extern void haifa_sched_finish (void);
|
extern void haifa_sched_finish (void);
|
||||||
|
|
||||||
extern void find_modifiable_mems (rtx, rtx);
|
extern void find_modifiable_mems (rtx_insn *, rtx_insn *);
|
||||||
|
|
||||||
/* sched-deps.c interface to walk, add, search, update, resolve, delete
|
/* sched-deps.c interface to walk, add, search, update, resolve, delete
|
||||||
and debug instruction dependencies. */
|
and debug instruction dependencies. */
|
||||||
|
|
|
@ -236,7 +236,7 @@ static int is_exception_free (rtx, int, int);
|
||||||
|
|
||||||
static bool sets_likely_spilled (rtx);
|
static bool sets_likely_spilled (rtx);
|
||||||
static void sets_likely_spilled_1 (rtx, const_rtx, void *);
|
static void sets_likely_spilled_1 (rtx, const_rtx, void *);
|
||||||
static void add_branch_dependences (rtx, rtx);
|
static void add_branch_dependences (rtx_insn *, rtx_insn *);
|
||||||
static void compute_block_dependences (int);
|
static void compute_block_dependences (int);
|
||||||
|
|
||||||
static void schedule_region (int);
|
static void schedule_region (int);
|
||||||
|
@ -540,7 +540,7 @@ rgn_estimate_number_of_insns (basic_block bb)
|
||||||
|
|
||||||
if (MAY_HAVE_DEBUG_INSNS)
|
if (MAY_HAVE_DEBUG_INSNS)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
FOR_BB_INSNS (bb, insn)
|
FOR_BB_INSNS (bb, insn)
|
||||||
if (DEBUG_INSN_P (insn))
|
if (DEBUG_INSN_P (insn))
|
||||||
|
@ -1804,7 +1804,7 @@ update_live_1 (int src, rtx x)
|
||||||
ready-list or before the scheduling. */
|
ready-list or before the scheduling. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
check_live (rtx insn, int src)
|
check_live (rtx_insn *insn, int src)
|
||||||
{
|
{
|
||||||
/* Find the registers set by instruction. */
|
/* Find the registers set by instruction. */
|
||||||
if (GET_CODE (PATTERN (insn)) == SET
|
if (GET_CODE (PATTERN (insn)) == SET
|
||||||
|
@ -2078,19 +2078,19 @@ static int sched_n_insns;
|
||||||
|
|
||||||
/* Implementations of the sched_info functions for region scheduling. */
|
/* Implementations of the sched_info functions for region scheduling. */
|
||||||
static void init_ready_list (void);
|
static void init_ready_list (void);
|
||||||
static int can_schedule_ready_p (rtx);
|
static int can_schedule_ready_p (rtx_insn *);
|
||||||
static void begin_schedule_ready (rtx);
|
static void begin_schedule_ready (rtx_insn *);
|
||||||
static ds_t new_ready (rtx, ds_t);
|
static ds_t new_ready (rtx_insn *, ds_t);
|
||||||
static int schedule_more_p (void);
|
static int schedule_more_p (void);
|
||||||
static const char *rgn_print_insn (const_rtx, int);
|
static const char *rgn_print_insn (const rtx_insn *, int);
|
||||||
static int rgn_rank (rtx, rtx);
|
static int rgn_rank (rtx_insn *, rtx_insn *);
|
||||||
static void compute_jump_reg_dependencies (rtx, regset);
|
static void compute_jump_reg_dependencies (rtx, regset);
|
||||||
|
|
||||||
/* Functions for speculative scheduling. */
|
/* Functions for speculative scheduling. */
|
||||||
static void rgn_add_remove_insn (rtx, int);
|
static void rgn_add_remove_insn (rtx_insn *, int);
|
||||||
static void rgn_add_block (basic_block, basic_block);
|
static void rgn_add_block (basic_block, basic_block);
|
||||||
static void rgn_fix_recovery_cfg (int, int, int);
|
static void rgn_fix_recovery_cfg (int, int, int);
|
||||||
static basic_block advance_target_bb (basic_block, rtx);
|
static basic_block advance_target_bb (basic_block, rtx_insn *);
|
||||||
|
|
||||||
/* Return nonzero if there are more insns that should be scheduled. */
|
/* Return nonzero if there are more insns that should be scheduled. */
|
||||||
|
|
||||||
|
@ -2109,7 +2109,7 @@ init_ready_list (void)
|
||||||
rtx prev_head = current_sched_info->prev_head;
|
rtx prev_head = current_sched_info->prev_head;
|
||||||
rtx next_tail = current_sched_info->next_tail;
|
rtx next_tail = current_sched_info->next_tail;
|
||||||
int bb_src;
|
int bb_src;
|
||||||
rtx insn;
|
rtx_insn *insn;
|
||||||
|
|
||||||
target_n_insns = 0;
|
target_n_insns = 0;
|
||||||
sched_target_n_insns = 0;
|
sched_target_n_insns = 0;
|
||||||
|
@ -2164,7 +2164,7 @@ init_ready_list (void)
|
||||||
insn can be scheduled, nonzero if we should silently discard it. */
|
insn can be scheduled, nonzero if we should silently discard it. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
can_schedule_ready_p (rtx insn)
|
can_schedule_ready_p (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
/* An interblock motion? */
|
/* An interblock motion? */
|
||||||
if (INSN_BB (insn) != target_bb
|
if (INSN_BB (insn) != target_bb
|
||||||
|
@ -2180,7 +2180,7 @@ can_schedule_ready_p (rtx insn)
|
||||||
can_schedule_ready_p () differs from the one passed to
|
can_schedule_ready_p () differs from the one passed to
|
||||||
begin_schedule_ready (). */
|
begin_schedule_ready (). */
|
||||||
static void
|
static void
|
||||||
begin_schedule_ready (rtx insn)
|
begin_schedule_ready (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
/* An interblock motion? */
|
/* An interblock motion? */
|
||||||
if (INSN_BB (insn) != target_bb)
|
if (INSN_BB (insn) != target_bb)
|
||||||
|
@ -2212,7 +2212,7 @@ begin_schedule_ready (rtx insn)
|
||||||
Return nonzero if it should be moved to the ready list or the queue, or zero
|
Return nonzero if it should be moved to the ready list or the queue, or zero
|
||||||
if we should silently discard it. */
|
if we should silently discard it. */
|
||||||
static ds_t
|
static ds_t
|
||||||
new_ready (rtx next, ds_t ts)
|
new_ready (rtx_insn *next, ds_t ts)
|
||||||
{
|
{
|
||||||
if (INSN_BB (next) != target_bb)
|
if (INSN_BB (next) != target_bb)
|
||||||
{
|
{
|
||||||
|
@ -2265,7 +2265,7 @@ new_ready (rtx next, ds_t ts)
|
||||||
to be formatted so that multiple output lines will line up nicely. */
|
to be formatted so that multiple output lines will line up nicely. */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
rgn_print_insn (const_rtx insn, int aligned)
|
rgn_print_insn (const rtx_insn *insn, int aligned)
|
||||||
{
|
{
|
||||||
static char tmp[80];
|
static char tmp[80];
|
||||||
|
|
||||||
|
@ -2286,7 +2286,7 @@ rgn_print_insn (const_rtx insn, int aligned)
|
||||||
is to be preferred. Zero if they are equally good. */
|
is to be preferred. Zero if they are equally good. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rgn_rank (rtx insn1, rtx insn2)
|
rgn_rank (rtx_insn *insn1, rtx_insn *insn2)
|
||||||
{
|
{
|
||||||
/* Some comparison make sense in interblock scheduling only. */
|
/* Some comparison make sense in interblock scheduling only. */
|
||||||
if (INSN_BB (insn1) != INSN_BB (insn2))
|
if (INSN_BB (insn1) != INSN_BB (insn2))
|
||||||
|
@ -2317,7 +2317,7 @@ rgn_rank (rtx insn1, rtx insn2)
|
||||||
calculations. */
|
calculations. */
|
||||||
|
|
||||||
int
|
int
|
||||||
contributes_to_priority (rtx next, rtx insn)
|
contributes_to_priority (rtx_insn *next, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
/* NEXT and INSN reside in one ebb. */
|
/* NEXT and INSN reside in one ebb. */
|
||||||
return BLOCK_TO_BB (BLOCK_NUM (next)) == BLOCK_TO_BB (BLOCK_NUM (insn));
|
return BLOCK_TO_BB (BLOCK_NUM (next)) == BLOCK_TO_BB (BLOCK_NUM (insn));
|
||||||
|
@ -2363,7 +2363,7 @@ static const struct sched_deps_info_def rgn_const_sel_sched_deps_info =
|
||||||
/* Return true if scheduling INSN will trigger finish of scheduling
|
/* Return true if scheduling INSN will trigger finish of scheduling
|
||||||
current block. */
|
current block. */
|
||||||
static bool
|
static bool
|
||||||
rgn_insn_finishes_block_p (rtx insn)
|
rgn_insn_finishes_block_p (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (INSN_BB (insn) == target_bb
|
if (INSN_BB (insn) == target_bb
|
||||||
&& sched_target_n_insns + 1 == target_n_insns)
|
&& sched_target_n_insns + 1 == target_n_insns)
|
||||||
|
@ -2440,9 +2440,9 @@ static sbitmap insn_referenced;
|
||||||
/* Add dependences so that branches are scheduled to run last in their
|
/* Add dependences so that branches are scheduled to run last in their
|
||||||
block. */
|
block. */
|
||||||
static void
|
static void
|
||||||
add_branch_dependences (rtx head, rtx tail)
|
add_branch_dependences (rtx_insn *head, rtx_insn *tail)
|
||||||
{
|
{
|
||||||
rtx insn, last;
|
rtx_insn *insn, *last;
|
||||||
|
|
||||||
/* For all branches, calls, uses, clobbers, cc0 setters, and instructions
|
/* For all branches, calls, uses, clobbers, cc0 setters, and instructions
|
||||||
that can throw exceptions, force them to remain in order at the end of
|
that can throw exceptions, force them to remain in order at the end of
|
||||||
|
@ -3425,7 +3425,7 @@ schedule_insns (void)
|
||||||
|
|
||||||
/* INSN has been added to/removed from current region. */
|
/* INSN has been added to/removed from current region. */
|
||||||
static void
|
static void
|
||||||
rgn_add_remove_insn (rtx insn, int remove_p)
|
rgn_add_remove_insn (rtx_insn *insn, int remove_p)
|
||||||
{
|
{
|
||||||
if (!remove_p)
|
if (!remove_p)
|
||||||
rgn_n_insns++;
|
rgn_n_insns++;
|
||||||
|
@ -3580,7 +3580,7 @@ rgn_fix_recovery_cfg (int bbi, int check_bbi, int check_bb_nexti)
|
||||||
/* Return next block in ebb chain. For parameter meaning please refer to
|
/* Return next block in ebb chain. For parameter meaning please refer to
|
||||||
sched-int.h: struct sched_info: advance_target_bb. */
|
sched-int.h: struct sched_info: advance_target_bb. */
|
||||||
static basic_block
|
static basic_block
|
||||||
advance_target_bb (basic_block bb, rtx insn)
|
advance_target_bb (basic_block bb, rtx_insn *insn)
|
||||||
{
|
{
|
||||||
if (insn)
|
if (insn)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -567,7 +567,7 @@ dump_hard_reg_set (const char *prefix, HARD_REG_SET set)
|
||||||
|
|
||||||
/* Pretty print INSN. This is used as a hook. */
|
/* Pretty print INSN. This is used as a hook. */
|
||||||
const char *
|
const char *
|
||||||
sel_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED)
|
sel_print_insn (const rtx_insn *insn, int aligned ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
static char buf[80];
|
static char buf[80];
|
||||||
|
|
||||||
|
|
|
@ -196,7 +196,7 @@ extern bool sched_dump_to_dot_p;
|
||||||
|
|
||||||
/* Functions from sel-sched-dump.c. */
|
/* Functions from sel-sched-dump.c. */
|
||||||
extern void sel_print (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
|
extern void sel_print (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
|
||||||
extern const char * sel_print_insn (const_rtx, int);
|
extern const char * sel_print_insn (const rtx_insn *, int);
|
||||||
extern void free_sel_dump_data (void);
|
extern void free_sel_dump_data (void);
|
||||||
|
|
||||||
extern void block_start (void);
|
extern void block_start (void);
|
||||||
|
|
|
@ -516,7 +516,7 @@ void
|
||||||
advance_deps_context (deps_t dc, insn_t insn)
|
advance_deps_context (deps_t dc, insn_t insn)
|
||||||
{
|
{
|
||||||
sched_deps_info = &advance_deps_context_sched_deps_info;
|
sched_deps_info = &advance_deps_context_sched_deps_info;
|
||||||
deps_analyze_insn (dc, insn);
|
deps_analyze_insn (dc, as_a <rtx_insn *> (insn));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2748,7 +2748,7 @@ deps_init_id (idata_t id, insn_t insn, bool force_unique_p)
|
||||||
|
|
||||||
sched_deps_info = &deps_init_id_sched_deps_info;
|
sched_deps_info = &deps_init_id_sched_deps_info;
|
||||||
|
|
||||||
deps_analyze_insn (dc, insn);
|
deps_analyze_insn (dc, as_a <rtx_insn *> (insn));
|
||||||
|
|
||||||
free_deps (dc);
|
free_deps (dc);
|
||||||
|
|
||||||
|
|
|
@ -4015,7 +4015,7 @@ convert_vec_av_set_to_ready (void)
|
||||||
insn_t insn = VINSN_INSN_RTX (vi);
|
insn_t insn = VINSN_INSN_RTX (vi);
|
||||||
|
|
||||||
ready_try[n] = 0;
|
ready_try[n] = 0;
|
||||||
ready.vec[n] = insn;
|
ready.vec[n] = as_a <rtx_insn *> (insn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4154,7 +4154,7 @@ invoke_reorder_hooks (fence_t fence)
|
||||||
if (issue_more && ran_hook)
|
if (issue_more && ran_hook)
|
||||||
{
|
{
|
||||||
int i, j, n;
|
int i, j, n;
|
||||||
rtx *arr = ready.vec;
|
rtx_insn **arr = ready.vec;
|
||||||
expr_t *vec = vec_av_set.address ();
|
expr_t *vec = vec_av_set.address ();
|
||||||
|
|
||||||
for (i = 0, n = ready.n_ready; i < n; i++)
|
for (i = 0, n = ready.n_ready; i < n; i++)
|
||||||
|
|
|
@ -1027,7 +1027,7 @@ is the timer tick of the scheduler. You may modify the ready list and\n\
|
||||||
the number of ready insns. The return value is the number of insns that\n\
|
the number of ready insns. The return value is the number of insns that\n\
|
||||||
can issue this cycle; normally this is just @code{issue_rate}. See also\n\
|
can issue this cycle; normally this is just @code{issue_rate}. See also\n\
|
||||||
@samp{TARGET_SCHED_REORDER2}.",
|
@samp{TARGET_SCHED_REORDER2}.",
|
||||||
int, (FILE *file, int verbose, rtx *ready, int *n_readyp, int clock), NULL)
|
int, (FILE *file, int verbose, rtx_insn **ready, int *n_readyp, int clock), NULL)
|
||||||
|
|
||||||
DEFHOOK
|
DEFHOOK
|
||||||
(reorder2,
|
(reorder2,
|
||||||
|
@ -1039,7 +1039,7 @@ return the number of insns to be scheduled in the same cycle. Defining\n\
|
||||||
this hook can be useful if there are frequent situations where\n\
|
this hook can be useful if there are frequent situations where\n\
|
||||||
scheduling one insn causes other insns to become ready in the same\n\
|
scheduling one insn causes other insns to become ready in the same\n\
|
||||||
cycle. These other insns can then be taken into account properly.",
|
cycle. These other insns can then be taken into account properly.",
|
||||||
int, (FILE *file, int verbose, rtx *ready, int *n_readyp, int clock), NULL)
|
int, (FILE *file, int verbose, rtx_insn **ready, int *n_readyp, int clock), NULL)
|
||||||
|
|
||||||
DEFHOOK
|
DEFHOOK
|
||||||
(macro_fusion_p,
|
(macro_fusion_p,
|
||||||
|
@ -1066,7 +1066,7 @@ example, it can be used for better insn classification if it requires\n\
|
||||||
analysis of dependencies. This hook can use backward and forward\n\
|
analysis of dependencies. This hook can use backward and forward\n\
|
||||||
dependencies of the insn scheduler because they are already\n\
|
dependencies of the insn scheduler because they are already\n\
|
||||||
calculated.",
|
calculated.",
|
||||||
void, (rtx head, rtx tail), NULL)
|
void, (rtx_insn *head, rtx_insn *tail), NULL)
|
||||||
|
|
||||||
/* The values of the following four members are pointers to functions
|
/* The values of the following four members are pointers to functions
|
||||||
used to simplify the automaton descriptions. dfa_pre_cycle_insn and
|
used to simplify the automaton descriptions. dfa_pre_cycle_insn and
|
||||||
|
|
Loading…
Add table
Reference in a new issue