GCC Middle and Back End API Reference
|
Data Fields | |
bool | cannot_delete |
bool | wild_read |
bool | non_frame_wild_read |
bool | frame_read |
bool | stack_pointer_based |
bool | contains_cselib_groups |
rtx | insn |
store_info_t | store_rec |
read_info_t | read_rec |
regset | fixed_regs_live |
struct insn_info * | prev_insn |
struct insn_info * | next_local_store |
One of these records is created for each insn.
bool insn_info::cannot_delete |
Set true if the insn contains a store but the insn itself cannot be deleted. This is set if the insn is a parallel and there is more than one non dead output or if the insn is in some way volatile.
Referenced by dse_step3(), replace_read(), set_all_positions_unneeded(), and set_position_unneeded().
bool insn_info::contains_cselib_groups |
This is true if any of the sets within the store contains a cselib base. Such stores can only be deleted by the local algorithm.
Referenced by record_store().
regset insn_info::fixed_regs_live |
The live fixed registers. We assume only fixed registers can cause trouble by being clobbered from an expanded pattern; storing only the live fixed registers (rather than all registers) means less memory needs to be allocated / copied for the individual stores.
bool insn_info::frame_read |
This field is only used for the processing of const functions. These functions cannot read memory, but they can read the stack because that is where they may get their parms. We need to be this conservative because, like the store motion pass, we don't consider CALL_INSN_FUNCTION_USAGE when processing call insns. Moreover, we need to distinguish two cases: 1. Before reload (register elimination), the stores related to outgoing arguments are stack pointer based and thus deemed of non-constant base in this pass. This requires special handling but also means that the frame pointer based stores need not be killed upon encountering a const function call. 2. After reload, the stores related to outgoing arguments can be either stack pointer or hard frame pointer based. This means that we have no other choice than also killing all the frame pointer based stores upon encountering a const function call. This field is set after reload for const function calls. Having this set is less severe than a wild read, it just means that all the frame related stores are killed rather than all the stores.
rtx insn_info::insn |
The insn.
Referenced by dse_step3(), dse_transfer_function(), and scan_stores_spill().
struct insn_info* insn_info::next_local_store |
The linked list of insns that are in consideration for removal in the forwards pass through the basic block. This pointer may be trash as it is not cleared when a wild read occurs. The only time it is guaranteed to be correct is when the traversal starts at active_local_stores.
bool insn_info::non_frame_wild_read |
This is true only for CALL instructions which could potentially read any non-frame memory location. This field is used by the global algorithm.
struct insn_info* insn_info::prev_insn |
The prev insn in the basic block.
Referenced by get_bitmap_index(), and scan_stores_spill().
read_info_t insn_info::read_rec |
The linked list of mem uses in this insn. Only the reads from rtx bases are listed here. The reads to cselib bases are completely processed during the first scan and so are never created.
Referenced by scan_stores_spill().
bool insn_info::stack_pointer_based |
This field is only used for the processing of const functions. It is set if the insn may contain a stack pointer based store.
Referenced by record_store().
store_info_t insn_info::store_rec |
The list of mem sets or mem clobbers that are contained in this insn. If the insn is deletable, it contains only one mem set. But it could also contain clobbers. Insns that contain more than one mem set are not deletable, but each of those mems are here in order to provide info to delete other insns.
Referenced by check_mem_read_use(), dse_step3(), and scan_stores_spill().
bool insn_info::wild_read |
This field is only used by the global algorithm. It is set true if the insn contains any read of mem except for a (1). This is also set if the insn is a call or has a clobber mem. If the insn contains a wild read, the use_rec will be null.
Referenced by can_escape(), and get_bitmap_index().