X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgraph_t.h;h=1b98e7159f22627c25a9c518582a228307f4fecf;hb=cb91bddc9cacdab7c28e4336847bd3dc248aa549;hp=8040fdf84870176fa5f2ba5fe8744e129b64af09;hpb=bdadb741281a7605235767c99d1440ab1edb3848;p=libfirm diff --git a/ir/ir/irgraph_t.h b/ir/ir/irgraph_t.h index 8040fdf84..1b98e7159 100644 --- a/ir/ir/irgraph_t.h +++ b/ir/ir/irgraph_t.h @@ -19,13 +19,19 @@ */ -# ifndef _IRGRAPH_T_H_ -# define _IRGRAPH_T_H_ -# include "obst.h" -# include "pset.h" -# include "irgraph.h" -# include "firm_common_t.h" -# include "irtypeinfo.h" +#ifndef _IRGRAPH_T_H_ +#define _IRGRAPH_T_H_ + +#include "irgraph.h" + +#include "firm_common_t.h" +#include "irtypeinfo.h" +#include "irprog.h" + +#include "irloop.h" + +#include "obst.h" +#include "pset.h" #define FRAME_TP_SUFFIX "frame_tp" @@ -60,13 +66,13 @@ struct ir_graph { /* -- Fields indicating different states of irgraph -- */ irg_phase_state phase_state; /**< compiler phase */ - op_pinned pinned; /**< Flag for status of nodes */ + op_pin_state op_pin_state_pinned; /**< Flag for status of nodes */ irg_outs_state outs_state; /**< Out edges. */ irg_dom_state dom_state; /**< Dominator information */ - irg_typeinfo_state typeinfo_state; /**< Validity of type information */ + irg_typeinfo_state typeinfo_state; /**< Validity of type information */ irg_callee_info_state callee_info_state; /**< Validity of callee information */ irg_inline_property inline_property; /**< How to handle inlineing. */ - irg_loopinfo_state loopinfo_state; /**< state of loop information */ + irg_loopinfo_state loopinfo_state; /**< state of loop information */ /* -- Fields for construction -- */ #if USE_EXPLICIT_PHI_IN_STACK @@ -81,12 +87,20 @@ struct ir_graph { struct ir_node **outs; /**< Space for the out arrays. */ #ifdef DEBUG_libfirm - int n_outs; /* < Size wasted for outs */ + int n_outs; /* < Size wasted for outs */ #endif /* defined DEBUG_libfirm */ struct ir_loop *loop; /**< The outermost loop */ void *link; /**< A void* field to link any information to the node. */ + ir_graph **callers; /**< For callgraph analyses. */ + int *caller_isbe; /**< For callgraph analyses: set if backedge. */ + ir_graph **callees; /**< For callgraph analyses. */ + int *callee_isbe; /**< For callgraph analyses: set if backedge. */ + int callgraph_loop_depth; + int callgraph_recursion_depth; + ir_loop *l; + /* -- Fields for Walking the graph -- */ unsigned long visited; /**< this flag is an identifier for ir walk. it will be incremented @@ -106,13 +120,13 @@ void init_irgraph(void); ir_graph *new_const_code_irg(void); /** - * Set the pinned state of a graph. + * Set the op_pin_state_pinned state of a graph. * * @irg the IR graph * @p new pin state */ INLINE void -set_irg_pinned (ir_graph *irg, op_pinned p); +set_irg_pinned (ir_graph *irg, op_pin_state p); /** Returns the obstack associated with the graph. */ struct obstack *get_irg_obstack(ir_graph *irg); @@ -320,9 +334,9 @@ __set_irg_phase_low(ir_graph *irg) { irg->phase_state = phase_low; } -static INLINE op_pinned +static INLINE op_pin_state __get_irg_pinned(ir_graph *irg) { - return irg->pinned; + return irg->op_pin_state_pinned; } static INLINE irg_outs_state @@ -356,8 +370,8 @@ __set_irg_loopinfo_state(ir_graph *irg, irg_loopinfo_state s) { } static INLINE void -__set_irg_pinned(ir_graph *irg, op_pinned p) { - irg->pinned = p; +__set_irg_pinned(ir_graph *irg, op_pin_state p) { + irg->op_pin_state_pinned = p; } static INLINE irg_callee_info_state @@ -367,7 +381,14 @@ __get_irg_callee_info_state(ir_graph *irg) { static INLINE void __set_irg_callee_info_state(ir_graph *irg, irg_callee_info_state s) { + irg_callee_info_state irp_state = get_irp_callee_info_state(); + irg->callee_info_state = s; + + /* I could compare ... but who knows? */ + if ((irp_state == irg_callee_info_consistent) || + ((irp_state == irg_callee_info_inconsistent) && (s == irg_callee_info_none))) + set_irp_callee_info_state(s); } static INLINE irg_inline_property @@ -439,8 +460,8 @@ __inc_irg_block_visited(ir_graph *irg) #define set_irg_bad(irg, node) __set_irg_bad(irg, node) #define get_irg_current_block(irg) __get_irg_current_block(irg) #define set_irg_current_block(irg, node) __set_irg_current_block(irg, node) -#define get_irg_ent(irg) __get_irg_ent(irg) -#define set_irg_ent(irg, ent) __set_irg_ent(irg, ent) +#define get_irg_entity(irg) __get_irg_ent(irg) +#define set_irg_entity(irg, ent) __set_irg_ent(irg, ent) #define get_irg_frame_type(irg) __get_irg_frame_type(irg) #define set_irg_frame_type(irg, ftp) __set_irg_frame_type(irg, ftp) #define get_irg_obstack(irg) __get_irg_obstack(irg)