GCC Middle and Back End API Reference
|
#include <df.h>
Data Fields | |
struct dataflow * | problems_in_order [DF_LAST_PROBLEM_PLUS1] |
struct dataflow * | problems_by_index [DF_LAST_PROBLEM_PLUS1] |
bitmap | blocks_to_analyze |
struct df_ref_info | def_info |
struct df_ref_info | use_info |
struct df_reg_info ** | def_regs |
struct df_reg_info ** | use_regs |
struct df_reg_info ** | eq_use_regs |
unsigned int | regs_size |
unsigned int | regs_inited |
struct df_insn_info ** | insns |
unsigned int | insns_size |
int | num_problems_defined |
bitmap_head | hardware_regs_used |
bitmap_head | regular_block_artificial_uses |
bitmap_head | eh_block_artificial_uses |
bitmap | entry_block_defs |
bitmap | exit_block_uses |
bitmap_head | insns_to_delete |
bitmap_head | insns_to_rescan |
bitmap_head | insns_to_notes_rescan |
int * | postorder |
int * | postorder_inverted |
int | n_blocks |
int | n_blocks_inverted |
unsigned int * | hard_regs_live_count |
unsigned int | ref_order |
int | changeable_flags: 8 |
bool | analyze_subset |
bool | redo_entry_and_exit |
bool df_d::analyze_subset |
If this is true, then only a subset of the blocks of the program is considered to compute the solutions of dataflow problems.
bitmap df_d::blocks_to_analyze |
If not NULL, this subset of blocks of the program to be considered for analysis. At certain times, this will contain all the blocks in the function so it cannot be used as an indicator of if we are analyzing a subset. See analyze_subset.
Referenced by debug_regset(), and df_clear_flags().
int df_d::changeable_flags |
Problem specific control information. This is a combination of enum df_changeable_flags values.
Referenced by df_bb_regno_first_def_find(), df_chain_finalize(), df_chain_remove_problem(), df_insn_rescan_debug_internal(), df_lr_init(), df_set_flags(), and split_live_ranges_for_shrink_wrap().
struct df_ref_info df_d::def_info |
The following information is really the problem data for the scanning instance but it is used too often by the other problems to keep getting it from there.
Referenced by df_free_ref(), df_grow_insn_info(), and df_scan_add_problem().
struct df_reg_info** df_d::def_regs |
The following three arrays are allocated in parallel. They contain the sets of refs of each type for each reg.
Referenced by df_scan_add_problem().
bitmap_head df_d::eh_block_artificial_uses |
The set of hard regs that are in the artificial uses at the end of a basic block that has an EH pred.
Referenced by df_grow_insn_info().
bitmap df_d::entry_block_defs |
The set of hardware registers live on entry to the function.
Referenced by df_get_eh_block_artificial_uses(), and df_grow_insn_info().
struct df_reg_info** df_d::eq_use_regs |
Referenced by df_scan_add_problem().
bitmap df_d::exit_block_uses |
Referenced by df_grow_insn_info(), and df_record_entry_block_defs().
unsigned int* df_d::hard_regs_live_count |
An array [FIRST_PSEUDO_REGISTER], indexed by regno, of the number of refs that qualify as being real hard regs uses. Artificial uses and defs as well as refs in eq notes are ignored. If the ref is a def, it cannot be a MAY_CLOBBER def. If the ref is a use, it cannot be the emim_reg_set or be the frame or arg pointer register. Uses in debug insns are ignored.
IT IS NOT ACCEPTABLE TO MANUALLY CHANGE THIS ARRAY. This array always reflects the actual number of refs in the insn stream that satisfy the above criteria.
Referenced by df_mw_compare().
bitmap_head df_d::hardware_regs_used |
Referenced by df_scan_free().
struct df_insn_info** df_d::insns |
unsigned int df_d::insns_size |
bitmap_head df_d::insns_to_delete |
Insns to delete, rescan or reprocess the notes at next df_rescan_all or df_process_deferred_rescans.
Referenced by df_insn_rescan_debug_internal(), and df_ref_chain_delete().
bitmap_head df_d::insns_to_notes_rescan |
Referenced by df_insn_rescan_debug_internal(), and df_ref_chain_delete().
bitmap_head df_d::insns_to_rescan |
Referenced by df_insn_rescan_debug_internal(), and df_ref_chain_delete().
int df_d::n_blocks |
Referenced by df_lr_confluence_0().
int df_d::n_blocks_inverted |
int df_d::num_problems_defined |
Referenced by df_dump_region(), df_get_bb_dirty(), df_get_bb_info(), df_mark_solutions_dirty(), df_remove_problem(), and df_simple_dataflow().
int* df_d::postorder |
Referenced by df_lr_confluence_0().
int* df_d::postorder_inverted |
struct dataflow* df_d::problems_by_index[DF_LAST_PROBLEM_PLUS1] |
Referenced by df_finish_pass().
struct dataflow* df_d::problems_in_order[DF_LAST_PROBLEM_PLUS1] |
The set of problems to be solved is stored in two arrays. In PROBLEMS_IN_ORDER, the problems are stored in the order that they are solved. This is an internally dense array that may have nulls at the end of it. In PROBLEMS_BY_INDEX, the problem is stored by the value in df_problem.id. These are used to access the problem local data without having to search the first array.
Referenced by df_dump_region(), df_finish_pass(), df_get_bb_dirty(), df_get_bb_info(), df_mark_solutions_dirty(), df_print_word_regset(), df_remove_problem(), and df_simple_dataflow().
bool df_d::redo_entry_and_exit |
True if someone added or deleted something from regs_ever_live so that the entry and exit blocks need be reprocessed.
unsigned int df_d::ref_order |
This counter provides a way to totally order refs without using addresses. It is incremented whenever a ref is created.
unsigned int df_d::regs_inited |
unsigned int df_d::regs_size |
Referenced by df_scan_add_problem().
bitmap_head df_d::regular_block_artificial_uses |
The set of hard regs that are in the artificial uses at the end of a regular basic block.
Referenced by df_grow_insn_info(), and df_scan_free().
struct df_ref_info df_d::use_info |
Referenced by df_grow_insn_info(), df_reorganize_refs_by_insn_bb(), and df_scan_add_problem().
struct df_reg_info** df_d::use_regs |
Referenced by df_scan_add_problem().