GCC Middle and Back End API Reference
|
Data Structures | |
struct | seginfo |
struct | bb_info |
Functions | |
static struct seginfo * | new_seginfo (int, rtx, int, HARD_REG_SET) |
static void | add_seginfo (struct bb_info *, struct seginfo *) |
static void | reg_dies (rtx, HARD_REG_SET *) |
static void | reg_becomes_live (rtx, const_rtx, void *) |
static void | make_preds_opaque (basic_block, int) |
static struct seginfo * | new_seginfo () |
static void | add_seginfo () |
static void | make_preds_opaque () |
static void | reg_dies () |
static void | reg_becomes_live () |
static basic_block | create_pre_exit () |
static int | optimize_mode_switching () |
static bool | gate_mode_switching () |
static unsigned int | rest_of_handle_mode_switching () |
rtl_opt_pass * | make_pass_mode_switching () |
Variables | |
static sbitmap * | antic |
static sbitmap * | transp |
static sbitmap * | comp |
Referenced by optimize_mode_switching().
|
static |
Add a seginfo element to the end of a list. HEAD is a pointer to the list beginning. INFO is the structure to be linked in.
References seginfo::next, and bb_info::seginfo.
|
static |
Make sure if MODE_ENTRY is defined the MODE_EXIT is defined and vice versa.
Split the fallthrough edge to the exit block, so that we can note that there NORMAL_MODE is required. Return the new block if it's inserted before the exit block. Otherwise return null.
References edge_def::dest, emit_note_before(), edge_def::flags, seginfo::mode, split_block(), split_edge(), edge_def::src, and targetm.
Referenced by optimize_mode_switching().
|
static |
rtl_opt_pass* make_pass_mode_switching | ( | ) |
|
static |
Referenced by make_preds_opaque(), and optimize_mode_switching().
|
static |
Make all predecessors of basic block B opaque, recursively, till we hit some that are already non-transparent, or an edge where aux is set; that denotes that a mode set is to be done on that edge. J is the bit number in the bitmaps that corresponds to the entity that we are currently handling mode-switching for.
References edge_def::aux, bitmap_bit_p(), bitmap_clear_bit(), basic_block_def::index, make_preds_opaque(), basic_block_def::preds, and edge_def::src.
|
staticread |
Referenced by optimize_mode_switching().
|
staticread |
This function will allocate a new BBINFO structure, initialized with the MODE, INSN, and basic block BB parameters.
References seginfo::bbnum, seginfo::insn_ptr, seginfo::mode, seginfo::next, and seginfo::regs_live.
|
static |
Find all insns that need a particular mode setting, and insert the necessary mode switches. Return true if we did work.
References add_seginfo(), edge_def::aux, bitmap_bit_p(), bitmap_clear_bit(), bitmap_not(), bitmap_set_bit(), bitmap_vector_clear(), bitmap_vector_ones(), cleanup_cfg(), clear_aux_for_edges(), commit_edge_insertions(), bb_info::computing, create_pre_exit(), default_rtl_profile(), df_analyze(), df_get_live_in(), df_get_live_out(), edge_list, emit_insn_after(), emit_insn_before(), end_sequence(), edge_def::flags, free(), free_edge_list(), get_insns(), basic_block_def::index, insert(), insert_insn_on_edge(), seginfo::insn_ptr, make_preds_opaque(), seginfo::mode, new_seginfo(), seginfo::next, note_stores(), pre_edge_lcm(), basic_block_def::preds, reg_becomes_live(), reg_dies(), seginfo::regs_live, rtl_profile_for_bb(), rtl_profile_for_edge(), sbitmap_vector_alloc(), sbitmap_vector_free(), bb_info::seginfo, single_succ_edge(), split_edge(), edge_def::src, and start_sequence().
Referenced by rest_of_handle_mode_switching().
Referenced by optimize_mode_switching().
|
static |
Record in LIVE that register REG became live. This is called via note_stores.
References add_to_hard_reg_set().
|
static |
Referenced by optimize_mode_switching().
|
static |
Record in LIVE that register REG died.
References remove_from_hard_reg_set().
|
static |
References optimize_mode_switching().
|
static |
These bitmaps are used for the LCM algorithm.
|
static |
|
static |