libFirm
Loading...
Searching...
No Matches
irgraph.h
1/*
2 * This file is part of libFirm.
3 * Copyright (C) 2012 University of Karlsruhe.
4 */
5
11#ifndef FIRM_IR_IRGRAPH_H
12#define FIRM_IR_IRGRAPH_H
13
14#include <stddef.h>
15#include "firm_types.h"
16
17#include "begin.h"
18
124FIRM_API ir_graph *new_ir_graph(ir_entity *ent, int n_loc);
125
133FIRM_API void free_ir_graph(ir_graph *irg);
134
136FIRM_API ir_entity *get_irg_entity(const ir_graph *irg);
138FIRM_API void set_irg_entity(ir_graph *irg, ir_entity *ent);
139
143FIRM_API void set_irg_frame_type(ir_graph *irg, ir_type *ftp);
144
148FIRM_API void set_irg_start_block(ir_graph *irg, ir_node *node);
149
151FIRM_API ir_node *get_irg_start(const ir_graph *irg);
153FIRM_API void set_irg_start(ir_graph *irg, ir_node *node);
154
156FIRM_API ir_node *get_irg_end_block(const ir_graph *irg);
158FIRM_API void set_irg_end_block(ir_graph *irg, ir_node *node);
159
161FIRM_API ir_node *get_irg_end(const ir_graph *irg);
163FIRM_API void set_irg_end(ir_graph *irg, ir_node *node);
164
166FIRM_API ir_node *get_irg_frame(const ir_graph *irg);
168FIRM_API void set_irg_frame(ir_graph *irg, ir_node *node);
169
173FIRM_API void set_irg_initial_mem(ir_graph *irg, ir_node *node);
174
176FIRM_API ir_node *get_irg_args(const ir_graph *irg);
178FIRM_API void set_irg_args(ir_graph *irg, ir_node *node);
179
181FIRM_API ir_node *get_irg_no_mem(const ir_graph *irg);
183FIRM_API void set_irg_no_mem(ir_graph *irg, ir_node *node);
184
186FIRM_API int get_irg_n_locs(ir_graph *irg);
187
189FIRM_API long get_irg_graph_nr(const ir_graph *irg);
190
196FIRM_API size_t get_irg_idx(const ir_graph *irg);
197
207FIRM_API ir_node *get_idx_irn(const ir_graph *irg, unsigned idx);
208
217
230
233
236
238FIRM_API void set_irg_link(ir_graph *irg, void *thing);
240FIRM_API void *get_irg_link(const ir_graph *irg);
241
244FIRM_API void inc_irg_visited(ir_graph *irg);
247FIRM_API ir_visited_t get_irg_visited(const ir_graph *irg);
250FIRM_API void set_irg_visited(ir_graph *irg, ir_visited_t i);
253FIRM_API ir_visited_t get_max_irg_visited(void);
256FIRM_API void set_max_irg_visited(int val);
259FIRM_API ir_visited_t inc_max_irg_visited(void);
260
264FIRM_API void inc_irg_block_visited(ir_graph *irg);
267FIRM_API ir_visited_t get_irg_block_visited(const ir_graph *irg);
270FIRM_API void set_irg_block_visited(ir_graph *irg, ir_visited_t i);
271
286ENUM_BITSET(ir_resources_t)
287
288
295FIRM_API void ir_reserve_resources(ir_graph *irg, ir_resources_t resources);
297FIRM_API void ir_free_resources(ir_graph *irg, ir_resources_t resources);
300
346ENUM_BITSET(ir_graph_constraints_t)
347
348
349FIRM_API void add_irg_constraints(ir_graph *irg,
350 ir_graph_constraints_t constraints);
353 ir_graph_constraints_t constraints);
355FIRM_API int irg_is_constrained(const ir_graph *irg,
356 ir_graph_constraints_t constraints);
357
425ENUM_BITSET(ir_graph_properties_t)
426
427
440FIRM_API int irg_has_properties(const ir_graph *irg,
442
448
455
457FIRM_API void set_irg_loc_description(ir_graph *irg, int n, void *description);
458
460FIRM_API void *get_irg_loc_description(ir_graph *irg, int n);
461
463FIRM_API unsigned get_irg_last_idx(const ir_graph *irg);
464
467#include "end.h"
468
469#endif
ir_node * get_idx_irn(const ir_graph *irg, unsigned idx)
Returns the node for an index.
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_graph_properties_t
graph state.
Definition irgraph.h:363
void clear_irg_constraints(ir_graph *irg, ir_graph_constraints_t constraints)
clears some graph constraints
void set_irg_end(ir_graph *irg, ir_node *node)
Sets the End node of an IR graph.
ir_node * get_irg_start(const ir_graph *irg)
Returns the Start node of an IR graph.
void set_irg_loc_description(ir_graph *irg, int n, void *description)
Sets a description for local value n.
size_t get_irg_idx(const ir_graph *irg)
Returns the graph number.
ir_type * get_irg_frame_type(ir_graph *irg)
Returns the frame type of an IR graph.
void set_irg_visited(ir_graph *irg, ir_visited_t i)
Sets node visited counter.
irg_callee_info_state get_irg_callee_info_state(const ir_graph *irg)
Returns the callee_info_state 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_block(ir_graph *irg, ir_node *node)
Sets the end block of an IR graph.
int get_irg_n_locs(ir_graph *irg)
Returns the number of value numbers of an IR graph.
void add_irg_constraints(ir_graph *irg, ir_graph_constraints_t constraints)
sets constraints on the graph irg
ir_entity * get_irg_entity(const ir_graph *irg)
Returns the entity of an IR graph.
ir_node * get_irg_end_block(const ir_graph *irg)
Returns the end block of an IR graph.
ir_node * get_irg_start_block(const ir_graph *irg)
Returns the start block of an IR graph.
ir_visited_t inc_max_irg_visited(void)
Increment interprocedural node visited counter by one.
irg_callee_info_state
state: callee_information_state Call nodes contain a list of possible callees.
Definition irgraph.h:225
void inc_irg_block_visited(ir_graph *irg)
Increments block visited counter by one.
long get_irg_graph_nr(const ir_graph *irg)
Returns the graph number.
ir_graph * new_ir_graph(ir_entity *ent, int n_loc)
Create a new ir graph to build ir for a procedure.
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_initial_mem(const ir_graph *irg)
Returns the node that represents the initial memory 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 confirm_irg_properties(ir_graph *irg, ir_graph_properties_t props)
Invalidates all graph properties/analysis data except the ones specified in props.
ir_resources_t
Debug helpers: You can indicate whether you are currently using visited or block_visited flags.
Definition irgraph.h:277
int irg_is_constrained(const ir_graph *irg, ir_graph_constraints_t constraints)
queries whether irg is at least as constrained as constraints.
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_block_visited(ir_graph *irg, ir_visited_t i)
Sets block visited counter.
void * get_irg_link(const ir_graph *irg)
Return void* field previously set by set_irg_link()
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 basi...
void ir_reserve_resources(ir_graph *irg, ir_resources_t resources)
Reserves resources of a graph.
void set_max_irg_visited(int val)
Sets interprocedural node visited counter.
void * get_irg_loc_description(ir_graph *irg, int n)
Returns the description for local value n.
int irg_has_properties(const ir_graph *irg, ir_graph_properties_t props)
queries whether irg has all properties in props set.
ir_visited_t get_irg_visited(const ir_graph *irg)
Returns node visited counter.
void clear_irg_properties(ir_graph *irg, ir_graph_properties_t props)
Clears the graph properties in props on irg.
void ir_free_resources(ir_graph *irg, ir_resources_t resources)
Frees previously reserved resources.
void set_irg_frame_type(ir_graph *irg, ir_type *ftp)
Sets the frame type of an IR graph.
ir_graph_constraints_t
graph constraints: These are typically used when lowering a graph for a target machine,...
Definition irgraph.h:307
unsigned get_irg_last_idx(const ir_graph *irg)
Returns the last irn index for this graph.
ir_visited_t get_irg_block_visited(const ir_graph *irg)
Returns block visited counter.
ir_node * get_irg_no_mem(const ir_graph *irg)
Returns the NoMem node of the given IR graph.
ir_visited_t get_max_irg_visited(void)
Returns interprocedural node visited counter.
void inc_irg_visited(ir_graph *irg)
Increments node visited counter by one.
void set_irg_link(ir_graph *irg, void *thing)
A void * field to link arbitrary information to the node.
void set_irg_no_mem(ir_graph *irg, ir_node *node)
Sets the NoMem node of graph irg.
void set_irg_start_block(ir_graph *irg, ir_node *node)
Sets the start block of an IR graph.
void add_irg_properties(ir_graph *irg, ir_graph_properties_t props)
Sets the graph properties in props on irg.
void assure_irg_properties(ir_graph *irg, ir_graph_properties_t props)
Ensures that a graph fulfills all properties stated in state.
void set_irg_callee_info_state(ir_graph *irg, irg_callee_info_state s)
Sets the callee_info_state of an IR graph.
ir_resources_t ir_resources_reserved(const ir_graph *irg)
Returns currently reserved resources.
void free_ir_graph(ir_graph *irg)
Frees the passed irgraph.
struct ir_graph ir_graph
Procedure Graph.
Definition firm_types.h:74
void set_irg_entity(ir_graph *irg, ir_entity *ent)
Sets the entity of an IR graph.
void set_irg_start(ir_graph *irg, ir_node *node)
Sets the Start node of an 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_GRAPH_PROPERTY_ONE_RETURN
graph contains at most one return
Definition irgraph.h:378
@ IR_GRAPH_PROPERTY_CONSISTENT_POSTDOMINANCE
postdominance information about the graph is valid
Definition irgraph.h:382
@ IR_GRAPH_PROPERTY_MANY_RETURNS
graph contains as many returns as possible
Definition irgraph.h:397
@ IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE
dominance information about the graph is valid
Definition irgraph.h:380
@ IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE_FRONTIERS
dominance frontiers information is calculated
Definition irgraph.h:384
@ IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO
loopinfo is computed and up to date
Definition irgraph.h:393
@ IR_GRAPH_PROPERTY_NO_TUPLES
No tuple nodes exist in the graph.
Definition irgraph.h:370
@ IR_GRAPH_PROPERTY_CONSISTENT_OUTS
outs (irouts) are computed and up to date
Definition irgraph.h:391
@ IR_GRAPH_PROPERTY_NO_UNREACHABLE_CODE
there exists no (obviously) unreachable code in the graph.
Definition irgraph.h:376
@ IR_GRAPH_PROPERTY_NO_CRITICAL_EDGES
graph contains no critical edges
Definition irgraph.h:366
@ IR_GRAPH_PROPERTIES_ALL
List of all graph properties.
Definition irgraph.h:415
@ IR_GRAPH_PROPERTY_CONSISTENT_OUT_EDGES
out edges (=iredges) are enable and there are no unused nodes that can be reached by following them
Definition irgraph.h:389
@ IR_GRAPH_PROPERTY_NO_BADS
graph contains no Bad nodes
Definition irgraph.h:368
@ IR_GRAPH_PROPERTY_CONSISTENT_ENTITY_USAGE
entity usage information is computed and up to date
Definition irgraph.h:395
@ IR_GRAPH_PROPERTIES_NONE
Definition irgraph.h:364
@ IR_GRAPH_PROPERTIES_CONTROL_FLOW
List of all graph properties that are only affected by control flow changes.
Definition irgraph.h:403
@ irg_callee_info_inconsistent
Definition irgraph.h:228
@ irg_callee_info_consistent
Definition irgraph.h:227
@ irg_callee_info_none
Definition irgraph.h:226
@ IR_RESOURCE_BLOCK_VISITED
Block visited flags are used.
Definition irgraph.h:279
@ IR_RESOURCE_BLOCK_MARK
Block mark bits are used.
Definition irgraph.h:280
@ IR_RESOURCE_IRN_VISITED
IR-node visited flags are used.
Definition irgraph.h:281
@ IR_RESOURCE_IRN_LINK
IR-node link fields are used.
Definition irgraph.h:282
@ IR_RESOURCE_NONE
no resource
Definition irgraph.h:278
@ IR_RESOURCE_LOOP_LINK
IR-loop link fields are used.
Definition irgraph.h:283
@ IR_RESOURCE_PHI_LIST
Block Phi lists are used.
Definition irgraph.h:284
@ IR_GRAPH_CONSTRAINT_TARGET_LOWERED
Intermediate language constructs not supported by the backend have been lowered.
Definition irgraph.h:339
@ IR_GRAPH_CONSTRAINT_MODEB_LOWERED
mode_b nodes have been lowered so you should not create any new nodes with mode_b (except for Cmp)
Definition irgraph.h:316
@ IR_GRAPH_CONSTRAINT_BACKEND
We have a backend graph: all data values have register constraints annotated.
Definition irgraph.h:344
@ IR_GRAPH_CONSTRAINT_OPTIMIZE_UNREACHABLE_CODE
Allows localopts to remove edges to unreachable code.
Definition irgraph.h:328
@ IR_GRAPH_CONSTRAINT_ARCH_DEP
Should not construct more nodes which irarch potentially breaks down.
Definition irgraph.h:311
@ IR_GRAPH_CONSTRAINT_NORMALISATION2
There are normalisations where there is no "best" representative.
Definition irgraph.h:322
@ IR_GRAPH_CONSTRAINT_CONSTRUCTION
The graph is being constructed: We have a current_block set, and blocks contain mapping of variable n...
Definition irgraph.h:334
struct ir_node ir_node
Procedure Graph Node.
Definition firm_types.h:53
op_pin_state
pinned states.
Definition firm_types.h:201
struct ir_entity ir_entity
Entity.
Definition firm_types.h:83
struct ir_type ir_type
Type.
Definition firm_types.h:71