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

Data Fields

struct btr_def_snext_this_bb
struct btr_def_snext_this_group
basic_block bb
int luid
rtx insn
int btr
int cost
btr_def_group group
btr_user uses
char has_ambiguous_use
char other_btr_uses_before_def
char other_btr_uses_after_use
char own_end
bitmap live_range

Detailed Description

btr_def structs appear on three lists:

  1. A list of all btr_def structures (head is ALL_BTR_DEFS, linked by the NEXT field).
  2. A list of branch reg definitions per basic block (head is BB_BTR_DEFS[i], linked by the NEXT_THIS_BB field).
  3. A list of all branch reg definitions belonging to the same group (head is in a BTR_DEF_GROUP struct, linked by NEXT_THIS_GROUP field).

Field Documentation

basic_block btr_def_s::bb
int btr_def_s::btr

Referenced by btr_def_live_range(), and compute_out().

int btr_def_s::cost
btr_def_group btr_def_s::group

For a branch register setting insn that has a constant source (i.e. a label), group links together all the insns with the same source. For other branch register setting insns, group is NULL.

char btr_def_s::has_ambiguous_use

If this def has a reaching use which is not a simple use in a branch instruction, then has_ambiguous_use will be true, and we will not attempt to migrate this definition.

Referenced by btr_def_live_range().

rtx btr_def_s::insn

Referenced by btr_def_live_range().

bitmap btr_def_s::live_range
int btr_def_s::luid
struct btr_def_s* btr_def_s::next_this_bb
struct btr_def_s* btr_def_s::next_this_group
char btr_def_s::other_btr_uses_after_use
char btr_def_s::other_btr_uses_before_def

live_range is an approximation to the true live range for this def/use web, because it records the set of blocks that contain the live range. There could be other live ranges for the same branch register in that set of blocks, either in the block containing the def (before the def), or in a block containing a use (after the use). If there are such other live ranges, then other_btr_uses_before_def or other_btr_uses_after_use must be set true as appropriate.

char btr_def_s::own_end

We set own_end when we have moved a definition into a dominator. Thus, when a later combination removes this definition again, we know to clear out trs_live_at_end again.

btr_user btr_def_s::uses

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