libFirm
callgraph.h
1 /*
2  * This file is part of libFirm.
3  * Copyright (C) 2012 University of Karlsruhe.
4  */
5 
13 #ifndef FIRM_ANA_CALLGRAPH_H
14 #define FIRM_ANA_CALLGRAPH_H
15 
16 #include <stddef.h>
17 #include "firm_types.h"
18 
19 #include "begin.h"
20 
41 typedef enum {
47 
50 
53 
55 FIRM_API size_t get_irg_n_callers(const ir_graph *irg);
56 
58 FIRM_API ir_graph *get_irg_caller(const ir_graph *irg, size_t pos);
59 
61 FIRM_API int is_irg_caller_backedge(const ir_graph *irg, size_t pos);
62 
64 FIRM_API int has_irg_caller_backedge(const ir_graph *irg);
65 
67 FIRM_API size_t get_irg_caller_loop_depth(const ir_graph *irg, size_t pos);
68 
70 FIRM_API size_t get_irg_n_callees(const ir_graph *irg);
71 
73 FIRM_API ir_graph *get_irg_callee(const ir_graph *irg, size_t pos);
74 
76 FIRM_API int is_irg_callee_backedge(const ir_graph *irg, size_t pos);
77 
79 FIRM_API int has_irg_callee_backedge(const ir_graph *irg);
80 
82 FIRM_API size_t get_irg_callee_loop_depth(const ir_graph *irg, size_t pos);
83 
85 FIRM_API double get_irg_method_execution_frequency(const ir_graph *irg);
86 
92 FIRM_API void compute_callgraph(void);
93 
95 FIRM_API void free_callgraph(void);
96 
97 
99 typedef void callgraph_walk_func(ir_graph *g, void *env);
100 
116 FIRM_API void callgraph_walk(callgraph_walk_func *pre,
117  callgraph_walk_func *post, void *env);
118 
122 FIRM_API void find_callgraph_recursions(void);
123 
134 FIRM_API void analyse_loop_nesting_depth(void);
135 
137 typedef enum {
144 
147 
150 
153 
156 #include "end.h"
157 
158 #endif
size_t get_irg_caller_loop_depth(const ir_graph *irg, size_t pos)
Returns the maximal loop depth of call nodes that call along this edge.
void free_callgraph(void)
Destruct the callgraph.
size_t get_irg_callee_loop_depth(const ir_graph *irg, size_t pos)
Returns the maximal loop depth of call nodes that call along this edge.
Loop nesting depth information is computed and correct.
Definition: callgraph.h:140
void analyse_loop_nesting_depth(void)
Computes the interprocedural loop nesting information.
irp_callgraph_state
Flag to indicate state of callgraph.
Definition: callgraph.h:41
void set_irp_loop_nesting_depth_state_inconsistent(void)
Marks the nesting depth state of the program representation as inconsistent.
size_t get_irg_n_callees(const ir_graph *irg)
Returns the number of procedures that are called by the given irg.
int is_irg_caller_backedge(const ir_graph *irg, size_t pos)
Returns non-zero if the caller at position pos is "a backedge", i.e.
int is_irg_callee_backedge(const ir_graph *irg, size_t pos)
Returns non-zero if the callee at position pos is "a backedge", i.e.
Loop nesting depths are not computed, no memory is allocated, access fails.
Definition: callgraph.h:138
loop_nesting_depth_state
The state of loop nesting depth.
Definition: callgraph.h:137
void set_irp_loop_nesting_depth_state(loop_nesting_depth_state s)
Sets the nesting depth state of the program representation.
No callgraph allocated.
Definition: callgraph.h:42
loop_nesting_depth_state get_irp_loop_nesting_depth_state(void)
Returns the nesting depth state of the program representation.
double get_irg_method_execution_frequency(const ir_graph *irg)
Returns the method execution frequency of a graph.
Loop nesting depth is computed but the graphs have been changed since.
Definition: callgraph.h:141
Callgraph constistent but calltree is inconsistent.
Definition: callgraph.h:43
Both callgraph and calltree are consistent.
Definition: callgraph.h:45
void compute_callgraph(void)
Construct the callgraph.
ir_graph * get_irg_caller(const ir_graph *irg, size_t pos)
Returns the caller at position pos.
ir_graph * get_irg_callee(const ir_graph *irg, size_t pos)
Returns the callee at position pos.
void callgraph_walk_func(ir_graph *g, void *env)
A function type for functions passed to the callgraph walker.
Definition: callgraph.h:99
int has_irg_callee_backedge(const ir_graph *irg)
Returns non-zero if the irg has a backedge callee.
size_t get_irg_n_callers(const ir_graph *irg)
Returns the number of procedures that call the given irg.
Callgraph is allocated but inconsistent.
Definition: callgraph.h:44
irp_callgraph_state get_irp_callgraph_state(void)
Returns the callgraph state of the program representation.
void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env)
Walks over the callgraph.
struct ir_graph ir_graph
Procedure Graph.
Definition: firm_types.h:74
int has_irg_caller_backedge(const ir_graph *irg)
Returns non-zero if the irg has a backedge caller.
void find_callgraph_recursions(void)
Compute the backedges that represent recursions and a looptree.
void set_irp_callgraph_state(irp_callgraph_state s)
Sets the callgraph state of the program representation.