libFirm
irgraph.h File Reference

Entry point to the representation of procedure code. More...

#include <stddef.h>
#include "firm_types.h"
#include "begin.h"
#include "end.h"

Go to the source code of this file.

Macros

#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.

Enumerations

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  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_constraints_t {
  IR_GRAPH_CONSTRAINT_ARCH_DEP = 1U << 0, IR_GRAPH_CONSTRAINT_MODEB_LOWERED = 1U << 1, IR_GRAPH_CONSTRAINT_NORMALISATION2 = 1U << 2, IR_GRAPH_CONSTRAINT_OPTIMIZE_UNREACHABLE_CODE = 1U << 3,
  IR_GRAPH_CONSTRAINT_CONSTRUCTION = 1U << 4, IR_GRAPH_CONSTRAINT_TARGET_LOWERED = 1U << 5, IR_GRAPH_CONSTRAINT_BACKEND = 1U << 6
}
 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. More...
enum  ir_graph_properties_t {
  IR_GRAPH_PROPERTIES_NONE = 0, IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES = 1U << 0, IR_GRAPH_PROPERTY_NO_BADS = 1U << 1, IR_GRAPH_PROPERTY_NO_TUPLES = 1U << 2,
  IR_GRAPH_PROPERTY_NO_UNREACHABLE_CODE = 1U << 3, IR_GRAPH_PROPERTY_ONE_RETURN = 1U << 4, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE = 1U << 5, IR_GRAPH_PROPERTY_CONSISTENT_POSTDOMINANCE = 1U << 6,
  IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE_FRONTIERS = 1U << 7, IR_GRAPH_PROPERTY_CONSISTENT_OUT_EDGES = 1U << 8, IR_GRAPH_PROPERTY_CONSISTENT_OUTS = 1U << 9, IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO = 1U << 10,
  IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE = 1U << 11, IR_GRAPH_PROPERTY_MANY_RETURNS = 1U << 12, IR_GRAPH_PROPERTIES_CONTROL_FLOW, IR_GRAPH_PROPERTIES_ALL
}
 graph state. More...

Functions

ir_graphnew_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_entityget_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_typeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_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_nodeget_idx_irn (const ir_graph *irg, unsigned idx)
 Returns the node for an index.
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.
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 add_irg_constraints (ir_graph *irg, ir_graph_constraints_t constraints)
 sets constraints on the graph irg
void clear_irg_constraints (ir_graph *irg, ir_graph_constraints_t constraints)
 clears some graph constraints
int irg_is_constrained (const ir_graph *irg, ir_graph_constraints_t constraints)
 queries whether irg is at least as constrained as constraints.
void add_irg_properties (ir_graph *irg, ir_graph_properties_t props)
 sets some state properties on the graph
void clear_irg_properties (ir_graph *irg, ir_graph_properties_t props)
 clears some graph properties
int irg_has_properties (const ir_graph *irg, ir_graph_properties_t props)
 queries whether irg has the props properties set
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.
void assure_irg_properties (ir_graph *irg, ir_graph_properties_t props)
 Ensures that a graph fulfills all properties stated in state.
void confirm_irg_properties (ir_graph *irg, ir_graph_properties_t props)
 Invalidates all graph properties/analysis data except the ones specified in props.
size_t register_additional_graph_data (size_t size)
 Requests additional data to be allocated with an ir graph.

Detailed Description

Entry point to the representation of procedure code.

Author
Martin Trapp, Christian Schaefer, Goetz Lindenmaier

Definition in file irgraph.h.