GCC Middle and Back End API Reference
ira_allocno Struct Reference

#include <ira-int.h>

Collaboration diagram for ira_allocno:

Data Fields

int num
int regno
ENUM_BITFIELD(machine_mode)
mode ENUM_BITFIELD(reg_class)
aclass unsigned int 
dont_reassign_p: 1
unsigned int bad_spill_p: 1
unsigned int assigned_p: 1
unsigned int conflict_vec_p: 1
short int hard_regno
ira_allocno_t next_regno_allocno
ira_loop_tree_node_t loop_tree_node
int nrefs
int freq
int class_cost
int updated_class_cost
int memory_cost
int updated_memory_cost
int excess_pressure_points_num
ira_pref_t allocno_prefs
ira_copy_t allocno_copies
ira_allocno_t cap
ira_allocno_t cap_member
int num_objects
ira_object_t objects [2]
int call_freq
int calls_crossed_num
int cheap_calls_crossed_num
int * hard_reg_costs
int * updated_hard_reg_costs
int * conflict_hard_reg_costs
int * updated_conflict_hard_reg_costs
void * add_data

Detailed Description

A structure representing an allocno (allocation entity). Allocno represents a pseudo-register in an allocation region. If pseudo-register does not live in a region but it lives in the nested regions, it is represented in the region by special allocno called cap. There may be more one cap representing the same pseudo-register in region. It means that the corresponding pseudo-register lives in more one non-intersected subregion.


Field Documentation

void* ira_allocno::add_data

Different additional data. It is used to decrease size of allocno data footprint.

ira_copy_t ira_allocno::allocno_copies

Copies to other non-conflicting allocnos. The copies can represent move insn or potential move insn usually because of two operand insn constraints.

ira_pref_t ira_allocno::allocno_prefs

Allocno hard reg preferences.

unsigned int ira_allocno::assigned_p

TRUE if a hard register or memory has been assigned to the allocno.

unsigned int ira_allocno::bad_spill_p

TRUE value means that there is no sense to spill the allocno during coloring because the spill will result in additional reloads in reload pass.

int ira_allocno::call_freq

Accumulated frequency of calls which given allocno intersects.

int ira_allocno::calls_crossed_num

Accumulated number of the intersected calls.

ira_allocno_t ira_allocno::cap

It is a allocno (cap) representing given allocno on upper loop tree level.

ira_allocno_t ira_allocno::cap_member

It is a link to allocno (cap) on lower loop level represented by given cap. Null if given allocno is not a cap.

int ira_allocno::cheap_calls_crossed_num

The number of calls across which it is live, but which should not affect register preferences.

int ira_allocno::class_cost

Minimal accumulated and updated costs of usage register of the allocno class.

int* ira_allocno::conflict_hard_reg_costs

Array of decreasing costs (accumulated and the one updated during coloring) for allocnos conflicting with given allocno for hard regno of the allocno class. The member value can be NULL if all costs are the same. These costs are used to reflect preferences of other allocnos not assigned yet during assigning to given allocno.

unsigned int ira_allocno::conflict_vec_p

TRUE if conflicts for given allocno are represented by vector of pointers to the conflicting allocnos. Otherwise, we use a bit vector where a bit with given index represents allocno with the same number.

ENUM_BITFIELD (machine_mode) mode ENUM_BITFIELD (reg_class) aclass unsigned int ira_allocno::dont_reassign_p

Mode of the allocno which is the mode of the corresponding pseudo-register. Register class which should be used for allocation for given allocno. NO_REGS means that we should use memory. During the reload, value TRUE means that we should not reassign a hard register to the allocno got memory earlier. It is set up when we removed memory-memory move insn before each iteration of the reload.

int ira_allocno::excess_pressure_points_num

Accumulated number of points where the allocno lives and there is excess pressure for its class. Excess pressure for a register class at some point means that there are more allocnos of given register class living at the point than number of hard-registers of the class available for the allocation.

int ira_allocno::freq

Accumulated frequency of usage of the allocno.

int* ira_allocno::hard_reg_costs

Array of usage costs (accumulated and the one updated during coloring) for each hard register of the allocno class. The member value can be NULL if all costs are the same and equal to CLASS_COST. For example, the costs of two different hard registers can be different if one hard register is callee-saved and another one is callee-used and the allocno lives through calls. Another example can be case when for some insn the corresponding pseudo-register value should be put in specific register class (e.g. AREG for x86) which is a strict subset of the allocno class (GENERAL_REGS for x86). We have updated costs to reflect the situation when the usage cost of a hard register is decreased because the allocno is connected to another allocno by a copy and the another allocno has been assigned to the hard register.

short int ira_allocno::hard_regno

Hard register assigned to given allocno. Negative value means that memory was allocated to the allocno. During the reload, spilled allocno has value equal to the corresponding stack slot number (0, ...) - 2. Value -1 is used for allocnos spilled by the reload (at this point pseudo-register has only one allocno) which did not get stack slot yet.

ira_loop_tree_node_t ira_allocno::loop_tree_node

There may be different allocnos with the same regno in different regions. Allocnos are bound to the corresponding loop tree node. Pseudo-register may have only one regular allocno with given loop tree node but more than one cap (see comments above).

int ira_allocno::memory_cost

Minimal accumulated, and updated costs of memory for the allocno. At the allocation start, the original and updated costs are equal. The updated cost may be changed after finishing allocation in a region and starting allocation in a subregion. The change reflects the cost of spill/restore code on the subregion border if we assign memory to the pseudo in the subregion.

ira_allocno_t ira_allocno::next_regno_allocno

Allocnos with the same regno are linked by the following member. Allocnos corresponding to inner loops are first in the list (it corresponds to depth-first traverse of the loops).

int ira_allocno::nrefs

Accumulated usage references of the allocno. Here and below, word 'accumulated' means info for given region and all nested subregions. In this case, 'accumulated' means sum of references of the corresponding pseudo-register in this region and in all nested subregions recursively.

int ira_allocno::num

The allocno order number starting with 0. Each allocno has an unique number and the number is never changed for the allocno.

int ira_allocno::num_objects

The number of objects tracked in the following array.

ira_object_t ira_allocno::objects[2]

An array of structures describing conflict information and live ranges for each object associated with the allocno. There may be more than one such object in cases where the allocno represents a multi-word register.

int ira_allocno::regno

Regno for allocno or cap.

int ira_allocno::updated_class_cost
int * ira_allocno::updated_conflict_hard_reg_costs
int * ira_allocno::updated_hard_reg_costs
int ira_allocno::updated_memory_cost

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