X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=inline;f=ir%2Fana%2Fcallgraph.c;h=8e6891e0af2d0d976f860065a7903eacc3055832;hb=46e776e9bca189a6cf06eef7634a162e9b41d386;hp=8e14c5a359f24dd2d97bc01a52b5f47396a4bd5a;hpb=20f31cbacebc66ffc7847b769951d544358259ce;p=libfirm diff --git a/ir/ana/callgraph.c b/ir/ana/callgraph.c index 8e14c5a35..8e6891e0a 100644 --- a/ir/ana/callgraph.c +++ b/ir/ana/callgraph.c @@ -10,14 +10,15 @@ * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. */ #ifdef HAVE_CONFIG_H -#include "config.h" +# include "config.h" #endif #ifdef HAVE_STRING_H -#include +# include #endif - +# ifdef HAVE_STDLIB_H #include +#endif #include "callgraph.h" @@ -182,7 +183,7 @@ static void ana_Call(ir_node *n, void *env) { int i, n_callees; ir_graph *irg; - if (get_irn_op(n) != op_Call) return; + if (! is_Call(n)) return; irg = get_irn_irg(n); n_callees = get_Call_n_callees(n); @@ -191,10 +192,12 @@ static void ana_Call(ir_node *n, void *env) { ir_graph *callee = get_entity_irg(callee_e); if (callee) { - ana_entry buf = { callee, NULL, 0}; + ana_entry buf = { NULL, NULL, 0}; ana_entry *found; int depth; + buf.irg = callee; + pset_insert((pset *)callee->callers, irg, HASH_PTR(irg)); found = pset_find((pset *)irg->callees, &buf, HASH_PTR(callee)); if (found) { /* add Call node to list, compute new nesting. */ @@ -359,7 +362,7 @@ static int current_dfn = 1; /**< Counter to generate depth first numberin /**********************************************************************/ typedef struct scc_info { - bool in_stack; /**< Marks whether node is on the stack. */ + int in_stack; /**< Marks whether node is on the stack. */ int dfn; /**< Depth first search number. */ int uplink; /**< dfn number of ancestor. */ int visited; @@ -402,17 +405,17 @@ static INLINE void mark_irg_in_stack (ir_graph *n) { scc_info *info = get_irg_link(n); assert(info); - info->in_stack = true; + info->in_stack = 1; } static INLINE void mark_irg_not_in_stack (ir_graph *n) { scc_info *info = get_irg_link(n); assert(info); - info->in_stack = false; + info->in_stack = 0; } -static INLINE bool +static INLINE int irg_is_in_stack (ir_graph *n) { scc_info *info = get_irg_link(n); assert(info); @@ -614,12 +617,12 @@ init_scc (void) { } } -/** Returns true if n is a loop header, i.e., it is a Block node +/** Returns non-zero if n is a loop header, i.e., it is a Block node * and has predecessors within the cfloop and out of the cfloop. * * @param root: only needed for assertion. */ -static bool +static int is_head (ir_graph *n, ir_graph *root) { int i, arity; @@ -644,12 +647,12 @@ is_head (ir_graph *n, ir_graph *root) } /** - * Returns true if n is possible loop head of an endless loop. + * Returns non-zero if n is possible loop head of an endless loop. * I.e., it is a Block, Phi or Filter node and has only predecessors * within the loop. * @arg root: only needed for assertion. */ -static bool +static int is_endless_head (ir_graph *n, ir_graph *root) { int i, arity; @@ -679,12 +682,12 @@ is_endless_head (ir_graph *n, ir_graph *root) * Check whether there is a parallel edge in the ip control flow. * Only */ -static bool +static int is_ip_head (ir_graph *n, ir_graph *pred) { int is_be = 0; int iv_rem = get_interprocedural_view(); - set_interprocedural_view(true); + set_interprocedural_view(1); { ir_node *sblock = get_irg_start_block(n); int i, arity = get_Block_n_cfgpreds(sblock); @@ -701,7 +704,7 @@ is_ip_head (ir_graph *n, ir_graph *pred) //printf(" "); DDMG(ip_pred); if ((ip_pred == pred) && is_backedge(sblock, i)) { //printf(" found\n"); - is_be = 1; + is_be = 1; } } }