GCC Middle and Back End API Reference
insn_info Struct Reference
Collaboration diagram for insn_info:

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_infoprev_insn
struct insn_infonext_local_store

Detailed Description

One of these records is created for each insn.


Field Documentation

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
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().


The documentation for this struct was generated from the following file: