libFirm
|
This struct contains all information about a procedure. More...
Modules | |
Construction Support | |
Nodes | |
ir_node - a datatype representing a Firm node | |
Traversing | |
Traverse graphs: | |
Typedefs | |
typedef struct ir_graph | ir_graph |
Procedure Graph. More... | |
Functions | |
ir_graph * | new_ir_graph (ir_entity *ent, int n_loc) |
Create a new ir graph to build ir for a procedure. More... | |
void | free_ir_graph (ir_graph *irg) |
Frees the passed irgraph. More... | |
ir_entity * | get_irg_entity (const ir_graph *irg) |
Returns the entity of an IR graph. More... | |
void | set_irg_entity (ir_graph *irg, ir_entity *ent) |
Sets the entity of an IR graph. More... | |
ir_type * | get_irg_frame_type (ir_graph *irg) |
Returns the frame type of an IR graph. More... | |
void | set_irg_frame_type (ir_graph *irg, ir_type *ftp) |
Sets the frame type of an IR graph. More... | |
ir_node * | get_irg_start_block (const ir_graph *irg) |
Returns the start block of an IR graph. More... | |
void | set_irg_start_block (ir_graph *irg, ir_node *node) |
Sets the start block of an IR graph. More... | |
ir_node * | get_irg_start (const ir_graph *irg) |
Returns the Start node of an IR graph. More... | |
void | set_irg_start (ir_graph *irg, ir_node *node) |
Sets the Start node of an IR graph. More... | |
ir_node * | get_irg_end_block (const ir_graph *irg) |
Returns the end block of an IR graph. More... | |
void | set_irg_end_block (ir_graph *irg, ir_node *node) |
Sets the end block of an IR graph. More... | |
ir_node * | get_irg_end (const ir_graph *irg) |
Returns the End node of an IR graph. More... | |
void | set_irg_end (ir_graph *irg, ir_node *node) |
Sets the End node of an IR graph. More... | |
ir_node * | get_irg_frame (const ir_graph *irg) |
Returns the node that represents the frame pointer of the given IR graph. More... | |
void | set_irg_frame (ir_graph *irg, ir_node *node) |
Sets the node that represents the frame pointer of the given IR graph. More... | |
ir_node * | get_irg_initial_mem (const ir_graph *irg) |
Returns the node that represents the initial memory of the given IR graph. More... | |
void | set_irg_initial_mem (ir_graph *irg, ir_node *node) |
Sets the node that represents the initial memory of the given IR graph. More... | |
ir_node * | get_irg_args (const ir_graph *irg) |
Returns the node that represents the argument pointer of the given IR graph. More... | |
void | set_irg_args (ir_graph *irg, ir_node *node) |
Sets the node that represents the argument pointer of the given IR graph. More... | |
ir_node * | get_irg_no_mem (const ir_graph *irg) |
Returns the NoMem node of the given IR graph. More... | |
void | set_irg_no_mem (ir_graph *irg, ir_node *node) |
Sets the NoMem node of graph irg . More... | |
int | get_irg_n_locs (ir_graph *irg) |
Returns the number of value numbers of an IR graph. More... | |
long | get_irg_graph_nr (const ir_graph *irg) |
Returns the graph number. More... | |
size_t | get_irg_idx (const ir_graph *irg) |
Returns the graph number. More... | |
ir_node * | get_idx_irn (const ir_graph *irg, unsigned idx) |
Returns the node for an index. More... | |
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. More... | |
irg_callee_info_state | get_irg_callee_info_state (const ir_graph *irg) |
Returns the callee_info_state of an IR graph. More... | |
void | set_irg_callee_info_state (ir_graph *irg, irg_callee_info_state s) |
Sets the callee_info_state of an IR graph. More... | |
void | set_irg_link (ir_graph *irg, void *thing) |
A void * field to link arbitrary information to the node. More... | |
void * | get_irg_link (const ir_graph *irg) |
Return void* field previously set by set_irg_link() More... | |
void | inc_irg_visited (ir_graph *irg) |
Increments node visited counter by one. More... | |
ir_visited_t | get_irg_visited (const ir_graph *irg) |
Returns node visited counter. More... | |
void | set_irg_visited (ir_graph *irg, ir_visited_t i) |
Sets node visited counter. More... | |
ir_visited_t | get_max_irg_visited (void) |
Returns interprocedural node visited counter. More... | |
void | set_max_irg_visited (int val) |
Sets interprocedural node visited counter. More... | |
ir_visited_t | inc_max_irg_visited (void) |
Increment interprocedural node visited counter by one. More... | |
void | inc_irg_block_visited (ir_graph *irg) |
Increments block visited counter by one. More... | |
ir_visited_t | get_irg_block_visited (const ir_graph *irg) |
Returns block visited counter. More... | |
void | set_irg_block_visited (ir_graph *irg, ir_visited_t i) |
Sets block visited counter. More... | |
void | ir_reserve_resources (ir_graph *irg, ir_resources_t resources) |
Reserves resources of a graph. More... | |
void | ir_free_resources (ir_graph *irg, ir_resources_t resources) |
Frees previously reserved resources. More... | |
ir_resources_t | ir_resources_reserved (const ir_graph *irg) |
Returns currently reserved resources. More... | |
void | add_irg_constraints (ir_graph *irg, ir_graph_constraints_t constraints) |
sets constraints on the graph irg More... | |
void | clear_irg_constraints (ir_graph *irg, ir_graph_constraints_t constraints) |
clears some graph constraints More... | |
int | irg_is_constrained (const ir_graph *irg, ir_graph_constraints_t constraints) |
queries whether irg is at least as constrained as constraints . More... | |
void | add_irg_properties (ir_graph *irg, ir_graph_properties_t props) |
sets some state properties on the graph More... | |
void | clear_irg_properties (ir_graph *irg, ir_graph_properties_t props) |
clears some graph properties More... | |
int | irg_has_properties (const ir_graph *irg, ir_graph_properties_t props) |
queries whether irg has the props properties set More... | |
void | set_irg_loc_description (ir_graph *irg, int n, void *description) |
Sets a description for local value n. More... | |
void * | get_irg_loc_description (ir_graph *irg, int n) |
Returns the description for local value n. More... | |
unsigned | get_irg_last_idx (const ir_graph *irg) |
Returns the last irn index for this graph. More... | |
void | assure_irg_properties (ir_graph *irg, ir_graph_properties_t props) |
Ensures that a graph fulfills all properties stated in state . More... | |
void | confirm_irg_properties (ir_graph *irg, ir_graph_properties_t props) |
Invalidates all graph properties/analysis data except the ones specified in props . More... | |
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 by the anchor for simple access:
Data structures that are private to a graph:
Procedure Graph.
Definition at line 74 of file firm_types.h.
graph constraints: These are typically used when lowering a graph for a target machine, typically you get stricter constraints the closer you get to a real machine.
graph state.
The properties about a graph. Graph transformations may destroy these properties and have to explicitely state when they did not affect some properties and want to keep them.
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.
state: callee_information_state Call nodes contain a list of possible callees.
This list must be computed by an analysis.
It's strange that this state is administered on irg basis, as the information must be computed for the whole program, or not?
Enumerator | |
---|---|
irg_callee_info_none | |
irg_callee_info_consistent | |
irg_callee_info_inconsistent |
void add_irg_constraints | ( | ir_graph * | irg, |
ir_graph_constraints_t | constraints | ||
) |
sets constraints
on the graph irg
void add_irg_properties | ( | ir_graph * | irg, |
ir_graph_properties_t | props | ||
) |
sets some state properties on the graph
void assure_irg_properties | ( | ir_graph * | irg, |
ir_graph_properties_t | props | ||
) |
Ensures that a graph fulfills all properties stated in state
.
Performs graph transformations if necessary.
void clear_irg_constraints | ( | ir_graph * | irg, |
ir_graph_constraints_t | constraints | ||
) |
clears some graph constraints
void clear_irg_properties | ( | ir_graph * | irg, |
ir_graph_properties_t | props | ||
) |
clears some graph properties
void confirm_irg_properties | ( | ir_graph * | irg, |
ir_graph_properties_t | props | ||
) |
Invalidates all graph properties/analysis data except the ones specified in props
.
This should be called after a transformation phase.
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. Removes the irgraph from the list in irprog. 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. |
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.
Returns the end block of an IR graph.
Referenced by new_rd_End().
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 memory of the given IR 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.
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.
Returns the start block of an IR graph.
Referenced by new_rd_Address(), new_rd_Align(), new_rd_Bad(), new_rd_Const(), new_rd_Dummy(), new_rd_NoMem(), new_rd_Offset(), new_rd_Size(), new_rd_Start(), and new_rd_Unknown().
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 irg_has_properties | ( | const ir_graph * | irg, |
ir_graph_properties_t | props | ||
) |
queries whether irg
has the props
properties set
int irg_is_constrained | ( | const ir_graph * | irg, |
ir_graph_constraints_t | constraints | ||
) |
queries whether irg
is at least as constrained as constraints
.
Referenced by new_d_Add(), new_d_Address(), new_d_Align(), new_d_Alloc(), new_d_And(), new_d_Bad(), new_d_Bitcast(), new_d_Block(), new_d_Builtin(), new_d_Call(), new_d_Cmp(), new_d_Cond(), new_d_Confirm(), new_d_Const(), new_d_Conv(), new_d_CopyB(), new_d_Div(), new_d_Dummy(), new_d_End(), new_d_Eor(), new_d_Free(), new_d_IJmp(), new_d_Jmp(), new_d_Load(), new_d_Member(), new_d_Minus(), new_d_Mod(), new_d_Mul(), new_d_Mulh(), new_d_Mux(), new_d_NoMem(), new_d_Not(), new_d_Offset(), new_d_Or(), new_d_Phi(), new_d_Pin(), new_d_Proj(), new_d_Raise(), new_d_Return(), new_d_Sel(), new_d_Shl(), new_d_Shr(), new_d_Shrs(), new_d_Size(), new_d_Start(), new_d_Store(), new_d_Sub(), new_d_Switch(), new_d_Sync(), new_d_Tuple(), new_d_Unknown(), and new_rd_Block().
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 new_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.
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.
Sets the node that represents the frame pointer of the given IR graph.
Sets the node that represents the initial memory of the given IR 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_visited | ( | ir_graph * | irg, |
ir_visited_t | i | ||
) |
Sets node visited counter.
void set_max_irg_visited | ( | int | val | ) |
Sets interprocedural node visited counter.