GCC Middle and Back End API Reference
|
Variables | |
static int | rgn_n_insns |
static int | sched_rgn_n_insns |
static bitmap_head | dont_calc_deps |
static basic_block | last_bb |
static struct common_sched_info_def | ebb_common_sched_info |
static struct sched_deps_info_def | ebb_sched_deps_info |
static struct haifa_sched_info | ebb_sched_info |
Referenced by schedule_ebb().
|
static |
The following function adds dependencies between jumps and risky insns in given ebb.
References add_delay_dependencies(), add_dependence(), basic_block_def::aux, control_flow_insn_p(), current_sched_info, DO_SPECULATION, earliest_block_with_similiar_load(), haifa_sched_info::flags, haifa_classify_insn(), init_dep(), IRISKY, spec_info_def::mask, haifa_sched_info::next_tail, PFREE_CANDIDATE, PRISKY_CANDIDATE, sched_insns_conditions_mutex_p(), sd_add_or_update_dep(), set_dep_weak(), spec_info, TRAP_RISKY, and USE_DEPS_LIST.
|
static |
|
static |
Return next block in ebb chain. For parameter meaning please refer to sched-int.h: struct sched_info: advance_target_bb.
References bb_note(), control_flow_insn_p(), and basic_block_def::next_bb.
|
static |
INSN is being moved to its place in the schedule, after LAST.
References control_flow_insn_p(), create_basic_block(), current_sched_info, find_fallthru_edge(), edge_def::flags, haifa_sched_info::next_tail, sched_init_only_bb, split_edge(), and basic_block_def::succs.
|
static |
|
static |
INSN is being scheduled after LAST. Update counters.
References sched_rgn_n_insns.
Referenced by init_ready_list().
|
static |
Print dependency information about ebb between HEAD and TAIL.
References debug_dependencies(), and sched_dump.
|
static |
Referenced by add_deps_for_risky_insns().
|
static |
Returns the earliest block in EBB currently being processed where a "similar load" 'insn2' is found, and hence LOAD_INSN can move speculatively into the found block. All the following must hold: (1) both loads have 1 base register (PFREE_CANDIDATEs). (2) load_insn and load2 have a def-use dependence upon the same insn 'insn1'. From all these we can conclude that the two loads access memory addresses that differ at most by a constant, and hence if moving load_insn would cause an exception, it would have been caused by load2 anyhow. The function uses list (given by LAST_BLOCK) of already processed blocks in EBB. The list is formed in `add_deps_for_risky_insns'.
References basic_block_def::aux, haifa_classify_insn(), basic_block_def::index, and PFREE_CANDIDATE.
|
static |
Referenced by schedule_ebbs_init().
|
static |
BB was added to ebb after AFTER.
References bitmap_set_bit(), and basic_block_def::index.
|
static |
|
static |
INSN has been added to/removed from current ebb.
References rgn_n_insns.
void ebb_compute_jump_reg_dependencies | ( | ) |
References bitmap_ior_into(), edge_def::dest, df_get_live_in(), edge_def::flags, and basic_block_def::succs.
NEXT is an instruction that depends on INSN (a backward dependence); return nonzero if we should include this dependence in priority calculations.
|
static |
Fix internal data after interblock movement of jump instruction. For parameter meaning please refer to sched-int.h: struct sched_info: fix_recovery_cfg.
References basic_block_def::index.
Referenced by schedule_ebbs_init().
|
static |
|
static |
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 static buffer for this. The ALIGNED parameter should cause the string to be formatted so that multiple output lines will line up nicely.
|
static |
Implementations of the sched_info functions for region scheduling.
Add all insns that are initially ready to the ready list READY. Called once before scheduling a set of insns.
References current_sched_info, debug_ebb_dependencies(), haifa_sched_info::next_tail, haifa_sched_info::prev_head, rgn_n_insns, sched_rgn_n_insns, sched_verbose, and try_ready().
Referenced by get_rank(), init_reassoc(), insert_operand_rank(), and propagate_rank().
|
static |
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 is to be preferred. Zero if they are equally good.
References basic_block_def::count, and basic_block_def::frequency.
|
static |
Restore the state of the frontend from P_, then free it.
References free(), and sched_rgn_n_insns.
|
static |
Allocate memory and store the state of the frontend. Return the allocated memory.
References sched_rgn_n_insns.
basic_block schedule_ebb | ( | ) |
Schedule a single extended basic block, defined by the boundaries HEAD and TAIL. We change our expectations about scheduler behaviour depending on whether MODULO_SCHEDULING is true. If it is, we expect that the caller has already called set_modulo_params and created delay pairs as appropriate. If the modulo schedule failed, we return NULL_RTX.
References add_deps_for_risky_insns(), bitmap_bit_p(), current_sched_info, delete_basic_block(), deps_pools_are_empty_p(), finish_deps_global(), free_deps(), haifa_recovery_bb_ever_added_p, haifa_sched_info::head, basic_block_def::index, init_deps(), init_deps_global(), basic_block_def::next_bb, haifa_sched_info::next_tail, no_real_insns_p(), basic_block_def::preds, basic_block_def::prev_bb, haifa_sched_info::prev_head, remove_notes(), rgn_n_insns, sched_analyze(), sched_extend_ready_list(), sched_finish_ready_list(), sched_free_deps(), haifa_sched_info::sched_max_insns_priority, sched_rgn_n_insns, schedule_block(), set_priorities(), basic_block_def::succs, haifa_sched_info::tail, target_bb, targetm, and unlink_bb_notes().
Referenced by schedule_ebbs().
void schedule_ebbs | ( | void | ) |
The main entry point in this file.
References edge_def::dest, find_fallthru_edge(), basic_block_def::flags, basic_block_def::next_bb, edge_def::probability, probability_cutoff, profile_info, schedule_ebb(), schedule_ebbs_finish(), schedule_ebbs_init(), and basic_block_def::succs.
Referenced by rest_of_handle_sched2().
void schedule_ebbs_finish | ( | void | ) |
Perform cleanups after scheduling using schedules_ebbs or schedule_ebb.
References bitmap_clear(), haifa_sched_finish(), reload_completed, and reposition_prologue_and_epilogue_notes().
Referenced by schedule_ebbs().
void schedule_ebbs_init | ( | void | ) |
Perform initializations before running schedule_ebbs or a single schedule_ebb.
References common_sched_info_def::add_block, bitmap_clear(), common_sched_info, compute_bb_for_insn(), current_sched_info, ebb_add_block(), ebb_common_sched_info, ebb_fix_recovery_cfg(), ebb_sched_deps_info, ebb_sched_info, common_sched_info_def::fix_recovery_cfg, haifa_common_sched_info, haifa_sched_init(), memcpy(), sched_deps_info, SCHED_EBB_PASS, and common_sched_info_def::sched_pass_id.
Referenced by schedule_ebbs().
|
static |
Return nonzero if there are more insns that should be scheduled.
References rgn_n_insns, and sched_rgn_n_insns.
|
static |
Set of blocks, that already have their dependencies calculated.
|
static |
Used in schedule_insns to initialize current_sched_info for scheduling regions (or single basic blocks).
Referenced by schedule_ebbs_init().
|
static |
Referenced by schedule_ebbs_init().
|
static |
Referenced by schedule_ebbs_init().
|
static |
Last basic block in current ebb.
Referenced by combine_instructions(), compute_hash_table_work(), emit_return_for_exit(), extract_omp_for_update_vars(), fix_crossing_conditional_branches(), fix_up_crossing_landing_pad(), gimple_flow_call_edges_add(), lra_constraints(), maybe_optimize_range_tests(), rtl_flow_call_edges_add(), schedule_region(), thread_prologue_and_epilogue_insns(), transform_statements(), update_ebb_live_info(), and vt_initialize().
|
static |
@verbatim Instruction scheduling pass.
Copyright (C) 1992-2013 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiema) Enhanced by, and currently maintained by, Jim Wilson ( nn@c ygnus .comwilso) n@cy gnus. com
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/.
The number of insns to be scheduled in total.
Referenced by ebb_add_remove_insn(), init_ready_list(), schedule_ebb(), and schedule_more_p().
|
static |
The number of insns scheduled so far.
Referenced by begin_schedule_ready(), init_ready_list(), restore_ebb_state(), save_ebb_state(), schedule_ebb(), schedule_more_p(), and schedule_region().