libFirm 1.20
|
This struct contains all information about a procedure. More...
Modules | |
Construction Support | |
Traversing | |
Traverse graphs: | |
Nodes | |
ir_node - a datatype representing a Firm node | |
Defines | |
#define | get_irg_data(graph, type, off) (assert(off > 0 && "Invalid graph data offset"), (type *) ((char *) (graph) - (off))) |
Accesses custom graph data. | |
#define | get_irg_data_base(data, off) (assert(off > 0 && "Invalid graph data offset"), (ir_graph *) ((char *) (data) + (off))) |
Returns the pointer to the node some custom data belongs to. | |
Typedefs | |
typedef struct ir_graph | ir_graph |
Procedure Grpah. | |
Enumerations | |
enum | irg_phase_state { phase_building, phase_high, phase_low, phase_backend } |
The states of an ir graph. More... | |
enum | irg_callee_info_state { irg_callee_info_none, irg_callee_info_consistent, irg_callee_info_inconsistent } |
state: callee_information_state Call nodes contain a list of possible callees. More... | |
enum | irg_inline_property { irg_inline_any, irg_inline_forbidden, irg_inline_recomended, irg_inline_forced, irg_inline_forced_no_body } |
property: Tells how to handle an ir graph in inlining. More... | |
enum | ir_resources_t { IR_RESOURCE_NONE = 0, IR_RESOURCE_BLOCK_VISITED = 1 << 0, IR_RESOURCE_BLOCK_MARK = 1 << 1, IR_RESOURCE_IRN_VISITED = 1 << 2, IR_RESOURCE_IRN_LINK = 1 << 3, IR_RESOURCE_LOOP_LINK = 1 << 4, IR_RESOURCE_PHI_LIST = 1 << 5 } |
Debug helpers: You can indicate whether you are currently using visited or block_visited flags. More... | |
enum | ir_graph_state_t { IR_GRAPH_STATE_ARCH_DEP = 1U << 0, IR_GRAPH_STATE_MODEB_LOWERED = 1U << 1, IR_GRAPH_STATE_NORMALISATION2 = 1U << 2, IR_GRAPH_STATE_IMPLICIT_BITFIELD_MASKING = 1U << 3, IR_GRAPH_STATE_OPTIMIZE_UNREACHABLE_CODE = 1U << 4, IR_GRAPH_STATE_NO_CRITICAL_EDGES = 1U << 5, IR_GRAPH_STATE_NO_BADS = 1U << 6, IR_GRAPH_STATE_NO_UNREACHABLE_CODE = 1U << 7, IR_GRAPH_STATE_ONE_RETURN = 1U << 8, IR_GRAPH_STATE_CONSISTENT_DOMINANCE = 1U << 9, IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE = 1U << 10, IR_GRAPH_STATE_CONSISTENT_OUT_EDGES = 1U << 11, IR_GRAPH_STATE_CONSISTENT_OUTS = 1U << 12, IR_GRAPH_STATE_CONSISTENT_LOOPINFO = 1U << 13, IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE = 1U << 14, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS = 1U << 15, IR_GRAPH_STATE_MANY_RETURNS = 1U << 16 } |
graph state. More... | |
Functions | |
ir_graph * | new_ir_graph (ir_entity *ent, int n_loc) |
Create a new ir graph to build ir for a procedure. | |
void | free_ir_graph (ir_graph *irg) |
Frees the passed irgraph. | |
int | is_ir_graph (const void *thing) |
Checks whether a pointer points to a ir graph. | |
ir_entity * | get_irg_entity (const ir_graph *irg) |
Returns the entity of an IR graph. | |
void | set_irg_entity (ir_graph *irg, ir_entity *ent) |
Sets the entity of an IR graph. | |
ir_type * | get_irg_frame_type (ir_graph *irg) |
Returns the frame type of an IR graph. | |
void | set_irg_frame_type (ir_graph *irg, ir_type *ftp) |
Sets the frame type of an IR graph. | |
ir_node * | get_irg_start_block (const ir_graph *irg) |
Returns the start block of an IR graph. | |
void | set_irg_start_block (ir_graph *irg, ir_node *node) |
Sets the start block of an IR graph. | |
ir_node * | get_irg_start (const ir_graph *irg) |
Returns the Start node of an IR graph. | |
void | set_irg_start (ir_graph *irg, ir_node *node) |
Sets the Start node of an IR graph. | |
ir_node * | get_irg_end_block (const ir_graph *irg) |
Returns the end block of an IR graph. | |
void | set_irg_end_block (ir_graph *irg, ir_node *node) |
Sets the end block of an IR graph. | |
ir_node * | get_irg_end (const ir_graph *irg) |
Returns the End node of an IR graph. | |
void | set_irg_end (ir_graph *irg, ir_node *node) |
Sets the End node of an IR graph. | |
ir_node * | get_irg_initial_exec (const ir_graph *irg) |
Returns the node that represents the initial control flow of the given IR graph. | |
void | set_irg_initial_exec (ir_graph *irg, ir_node *node) |
Sets the node that represents the initial control of the given IR graph. | |
ir_node * | get_irg_frame (const ir_graph *irg) |
Returns the node that represents the frame pointer of the given IR graph. | |
void | set_irg_frame (ir_graph *irg, ir_node *node) |
Sets the node that represents the frame pointer of the given IR graph. | |
ir_node * | get_irg_initial_mem (const ir_graph *irg) |
Returns the node that represents the initial memory of the given IR graph. | |
void | set_irg_initial_mem (ir_graph *irg, ir_node *node) |
Sets the node that represents the initial memory of the given IR graph. | |
ir_node * | get_irg_args (const ir_graph *irg) |
Returns the node that represents the argument pointer of the given IR graph. | |
void | set_irg_args (ir_graph *irg, ir_node *node) |
Sets the node that represents the argument pointer of the given IR graph. | |
ir_node * | get_irg_no_mem (const ir_graph *irg) |
Returns the NoMem node of the given IR graph. | |
void | set_irg_no_mem (ir_graph *irg, ir_node *node) |
Sets the NoMem node of graph irg . | |
int | get_irg_n_locs (ir_graph *irg) |
Returns the number of value numbers of an IR graph. | |
long | get_irg_graph_nr (const ir_graph *irg) |
Returns the graph number. | |
size_t | get_irg_idx (const ir_graph *irg) |
Returns the graph number. | |
ir_node * | get_idx_irn (const ir_graph *irg, unsigned idx) |
Returns the node for an index. | |
irg_phase_state | get_irg_phase_state (const ir_graph *irg) |
Returns the phase_state of an IR graph. | |
void | set_irg_phase_state (ir_graph *irg, irg_phase_state state) |
Sets the phase state of an IR graph. | |
op_pin_state | get_irg_pinned (const ir_graph *irg) |
state: op_pin_state_pinned The graph is "op_pin_state_pinned" if all nodes are associated with a basic block. | |
irg_callee_info_state | get_irg_callee_info_state (const ir_graph *irg) |
Returns the callee_info_state of an IR graph. | |
void | set_irg_callee_info_state (ir_graph *irg, irg_callee_info_state s) |
Sets the callee_info_state of an IR graph. | |
irg_inline_property | get_irg_inline_property (const ir_graph *irg) |
Returns the inline property of a graph. | |
void | set_irg_inline_property (ir_graph *irg, irg_inline_property s) |
Sets the inline property of a graph. | |
mtp_additional_properties | get_irg_additional_properties (const ir_graph *irg) |
Returns the mask of the additional graph properties. | |
void | set_irg_additional_properties (ir_graph *irg, mtp_additional_properties property_mask) |
Sets the mask of the additional graph properties. | |
void | add_irg_additional_properties (ir_graph *irg, mtp_additional_properties flag) |
Sets one additional graph property. | |
void | set_irg_link (ir_graph *irg, void *thing) |
A void * field to link arbitrary information to the node. | |
void * | get_irg_link (const ir_graph *irg) |
Return void* field previously set by set_irg_link() | |
void | inc_irg_visited (ir_graph *irg) |
Increments node visited counter by one. | |
ir_visited_t | get_irg_visited (const ir_graph *irg) |
Returns node visited counter. | |
void | set_irg_visited (ir_graph *irg, ir_visited_t i) |
Sets node visited counter. | |
ir_visited_t | get_max_irg_visited (void) |
Returns interprocedural node visited counter. | |
void | set_max_irg_visited (int val) |
Sets interprocedural node visited counter. | |
ir_visited_t | inc_max_irg_visited (void) |
Increment interprocedural node visited counter by one. | |
void | inc_irg_block_visited (ir_graph *irg) |
Increments block visited counter by one. | |
ir_visited_t | get_irg_block_visited (const ir_graph *irg) |
Returns block visited counter. | |
void | set_irg_block_visited (ir_graph *irg, ir_visited_t i) |
Sets block visited counter. | |
void | ir_reserve_resources (ir_graph *irg, ir_resources_t resources) |
Reserves resources of a graph. | |
void | ir_free_resources (ir_graph *irg, ir_resources_t resources) |
Frees previously reserved resources. | |
ir_resources_t | ir_resources_reserved (const ir_graph *irg) |
Returns currently reserved resources. | |
void | set_irg_state (ir_graph *irg, ir_graph_state_t state) |
Sets some state flags on the graph (this does not clear the other flags) | |
void | clear_irg_state (ir_graph *irg, ir_graph_state_t state) |
Clears some state flags of the graph. | |
int | is_irg_state (const ir_graph *irg, ir_graph_state_t state) |
Queries whether a set of graph state flags are activated. | |
void | set_irg_loc_description (ir_graph *irg, int n, void *description) |
Sets a description for local value n. | |
void * | get_irg_loc_description (ir_graph *irg, int n) |
Returns the description for local value n. | |
unsigned | get_irg_estimated_node_cnt (const ir_graph *irg) |
Returns a estimated node count of the irg. | |
unsigned | get_irg_last_idx (const ir_graph *irg) |
Returns the last irn index for this graph. | |
unsigned | get_irg_fp_model (const ir_graph *irg) |
Returns the floating point model of this graph. | |
void | set_irg_fp_model (ir_graph *irg, unsigned model) |
Sets a floating point model for this graph. | |
size_t | register_additional_graph_data (size_t size) |
Requests additional data to be allocated with an ir graph. |
This struct contains all information about a procedure.
It's allocated directly to memory.
The fields of ir_graph:
The beginning and end of a graph:
The following nodes are Projs from the Start node, held in ir_graph for simple access:
Data structures that are private to a graph:
#define get_irg_data | ( | graph, | |
type, | |||
off | |||
) | (assert(off > 0 && "Invalid graph data offset"), (type *) ((char *) (graph) - (off))) |
Accesses custom graph data.
The data must have been registered with register_additional_graph_data() before.
graph | The graph to get the data from. |
type | The type of the data you registered. |
off | The value returned by register_additional_graph_data(). |
type
. #define get_irg_data_base | ( | data, | |
off | |||
) | (assert(off > 0 && "Invalid graph data offset"), (ir_graph *) ((char *) (data) + (off))) |
Returns the pointer to the node some custom data belongs to.
data | The pointer to the custom data. |
off | The number as returned by register_additional_graph_data(). |
Procedure Grpah.
Definition at line 87 of file firm_types.h.
enum ir_graph_state_t |
graph state.
This is used for 2 things:
enum ir_resources_t |
Debug helpers: You can indicate whether you are currently using visited or block_visited flags.
If NDEBUG is not defined, then the compiler will abort if 2 parties try to use the flags.
enum irg_inline_property |
property: Tells how to handle an ir graph in inlining.
enum irg_phase_state |
The states of an ir graph.
state phase values: phase_building, phase_high, phase_low, phase_backend.
The graph is in phase_building during construction of the irgraph. The construction is finished by a call to finalize_cons().
Finalize_cons() sets the state to phase_high. All standard Firm nodes are allowed.
To get the irgraph into phase_low all Sel nodes must be removed and replaced by explicit address computations. SymConst size and type tag nodes must be removed (@@ really?). Initialization of memory allocated by Alloc must be explicit. @@ More conditions?
phase_backend is set if architecture specific machine nodes are inserted (and probably most standard Firm are removed).
void add_irg_additional_properties | ( | ir_graph * | irg, |
mtp_additional_properties | flag | ||
) |
Sets one additional graph property.
void clear_irg_state | ( | ir_graph * | irg, |
ir_graph_state_t | state | ||
) |
Clears some state flags of the graph.
void free_ir_graph | ( | ir_graph * | irg | ) |
Frees the passed irgraph.
Deallocates all nodes in this graph and the ir_graph structure. Sets the field irgraph in the corresponding entity to NULL. Does not remove the irgraph from the list in irprog (requires inefficient search, call remove_irp_irg by hand). Does not free types, entities or modes that are used only by this graph, nor the entity standing for this graph.
Returns the node for an index.
irg | The graph. |
idx | The index you want the node for. |
mtp_additional_properties get_irg_additional_properties | ( | const ir_graph * | irg | ) |
Returns the mask of the additional graph properties.
The properties are automatically inherited from the method type if they were not set using set_irg_additional_properties() or set_irg_additional_properties().
Returns the node that represents the argument pointer of the given IR graph.
ir_visited_t get_irg_block_visited | ( | const ir_graph * | irg | ) |
Returns block visited counter.
irg_callee_info_state get_irg_callee_info_state | ( | const ir_graph * | irg | ) |
Returns the callee_info_state of an IR graph.
unsigned get_irg_estimated_node_cnt | ( | const ir_graph * | irg | ) |
Returns a estimated node count of the irg.
This count is updated after every irg_walk_graph().
unsigned get_irg_fp_model | ( | const ir_graph * | irg | ) |
Returns the floating point model of this graph.
Returns the node that represents the frame pointer of the given IR graph.
long get_irg_graph_nr | ( | const ir_graph * | irg | ) |
Returns the graph number.
size_t get_irg_idx | ( | const ir_graph * | irg | ) |
Returns the graph number.
This is a unique number for the graph and is smaller than get_irp_last_idx() Note: you cannot use this number for get_irp_irg()
Returns the node that represents the initial control flow of the given IR graph.
Returns the node that represents the initial memory of the given IR graph.
irg_inline_property get_irg_inline_property | ( | const ir_graph * | irg | ) |
Returns the inline property of a graph.
unsigned get_irg_last_idx | ( | const ir_graph * | irg | ) |
Returns the last irn index for this graph.
void* get_irg_link | ( | const ir_graph * | irg | ) |
Return void* field previously set by set_irg_link()
void* get_irg_loc_description | ( | ir_graph * | irg, |
int | n | ||
) |
Returns the description for local value n.
int get_irg_n_locs | ( | ir_graph * | irg | ) |
Returns the number of value numbers of an IR graph.
irg_phase_state get_irg_phase_state | ( | const ir_graph * | irg | ) |
Returns the phase_state of an IR graph.
op_pin_state get_irg_pinned | ( | const ir_graph * | irg | ) |
state: op_pin_state_pinned The graph is "op_pin_state_pinned" if all nodes are associated with a basic block.
It is in state "op_pin_state_floats" if nodes are in arbitrary blocks. In state "op_pin_state_floats" the block predecessor is set in all nodes, but this can be an invalid block, i.e., the block is not a dominator of all the uses of the node. The enum op_pin_state is defined in irop.h.
ir_visited_t get_irg_visited | ( | const ir_graph * | irg | ) |
Returns node visited counter.
ir_visited_t get_max_irg_visited | ( | void | ) |
Returns interprocedural node visited counter.
void inc_irg_block_visited | ( | ir_graph * | irg | ) |
Increments block visited counter by one.
void inc_irg_visited | ( | ir_graph * | irg | ) |
Increments node visited counter by one.
ir_visited_t inc_max_irg_visited | ( | void | ) |
Increment interprocedural node visited counter by one.
void ir_free_resources | ( | ir_graph * | irg, |
ir_resources_t | resources | ||
) |
Frees previously reserved resources.
void ir_reserve_resources | ( | ir_graph * | irg, |
ir_resources_t | resources | ||
) |
Reserves resources of a graph.
This is a debug tool: All code should properly allocate the resources it uses so if two interlocked algorithms use the same resources that bug will get detected.
ir_resources_t ir_resources_reserved | ( | const ir_graph * | irg | ) |
Returns currently reserved resources.
int is_ir_graph | ( | const void * | thing | ) |
Checks whether a pointer points to a ir graph.
thing | an arbitrary pointer |
int is_irg_state | ( | const ir_graph * | irg, |
ir_graph_state_t | state | ||
) |
Queries whether a set of graph state flags are activated.
Create a new ir graph to build ir for a procedure.
ent | A pointer to an entity representing the procedure, i.e., the type of the entity must be of a method type. |
n_loc | The number of local variables in this procedure including the procedure parameters. |
This constructor generates the basic infrastructure needed to represent a procedure in FIRM.
It allocates an ir_graph and sets the field irg of the entity ent to point to this graph. Further it allocates the following nodes needed for every procedure:
Further it enters the global store into the data structure of the start block that contains all valid values in this block (set_store()). This data structure is used to build the Phi nodes and removed after completion of the graph. There is no path from end to start in the graph after calling ir_graph.
The op_pin_state of the graph is set to "op_pin_state_pinned" if no global cse was performed on the graph. It is set to "op_pin_state_floats" if global cse was performed (and during construction: did actually change something). Code placement is necessary.
size_t register_additional_graph_data | ( | size_t | size | ) |
Requests additional data to be allocated with an ir graph.
size | The size of the additional data required. |
void set_irg_additional_properties | ( | ir_graph * | irg, |
mtp_additional_properties | property_mask | ||
) |
Sets the mask of the additional graph properties.
Sets the node that represents the argument pointer of the given IR graph.
void set_irg_block_visited | ( | ir_graph * | irg, |
ir_visited_t | i | ||
) |
Sets block visited counter.
void set_irg_callee_info_state | ( | ir_graph * | irg, |
irg_callee_info_state | s | ||
) |
Sets the callee_info_state of an IR graph.
void set_irg_fp_model | ( | ir_graph * | irg, |
unsigned | model | ||
) |
Sets a floating point model for this graph.
Sets the node that represents the frame pointer of the given IR graph.
Sets the node that represents the initial control of the given IR graph.
Sets the node that represents the initial memory of the given IR graph.
void set_irg_inline_property | ( | ir_graph * | irg, |
irg_inline_property | s | ||
) |
Sets the inline property of a graph.
void set_irg_link | ( | ir_graph * | irg, |
void * | thing | ||
) |
A void * field to link arbitrary information to the node.
void set_irg_loc_description | ( | ir_graph * | irg, |
int | n, | ||
void * | description | ||
) |
Sets a description for local value n.
void set_irg_phase_state | ( | ir_graph * | irg, |
irg_phase_state | state | ||
) |
Sets the phase state of an IR graph.
void set_irg_state | ( | ir_graph * | irg, |
ir_graph_state_t | state | ||
) |
Sets some state flags on the graph (this does not clear the other flags)
void set_irg_visited | ( | ir_graph * | irg, |
ir_visited_t | i | ||
) |
Sets node visited counter.
void set_max_irg_visited | ( | int | val | ) |
Sets interprocedural node visited counter.