X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgraph.h;h=5281e814e69f1270e681e4a0dd4ee66b0652e15a;hb=c3c48d7bd83f042cc2951754377de928d66fe51e;hp=c4a18f239c5d444009ceeb53c6bcb703fa7663a7;hpb=f9b36e5483d60c3f4a509bd1f20b73881f42108f;p=libfirm diff --git a/ir/ir/irgraph.h b/ir/ir/irgraph.h index c4a18f239..5281e814e 100644 --- a/ir/ir/irgraph.h +++ b/ir/ir/irgraph.h @@ -75,10 +75,13 @@ typedef struct ir_graph ir_graph; * did actually change something). Code placement is necessary. */ -/* Global variable holding the current_ir_graph. This global variable - is used by the ir construction interface in ircons and by the - optimizations. */ +/** Global variable holding the current ir graph. + * + * This global variable is used by the ir construction + * interface in ircons and by the optimizations. + */ extern ir_graph *current_ir_graph; + ir_graph *get_current_ir_graph(void); void set_current_ir_graph(ir_graph *graph); @@ -100,12 +103,13 @@ void set_interprocedural_view(bool state); ir_graph *new_ir_graph (entity *ent, int n_loc); /** Frees the passed irgraph. - Deallocates all nodes in this graph and the ir_graph structure. - Sets the field irgraph in the corresponding entity to NULL. - Does not remove the irgraph from the list in irprog (requires - inefficient search, call remove_irp_irg by hand). - Does not free types, entities or modes that are used only by this - graph, nor the entity standing for this graph. */ + * Deallocates all nodes in this graph and the ir_graph structure. + * Sets the field irgraph in the corresponding entity to NULL. + * Does not remove the irgraph from the list in irprog (requires + * inefficient search, call remove_irp_irg by hand). + * Does not free types, entities or modes that are used only by this + * graph, nor the entity standing for this graph. + */ void free_ir_graph (ir_graph *irg); /* --- access routines for all ir_graph attributes --- */ @@ -118,8 +122,7 @@ void free_ir_graph (ir_graph *irg); * @return * true if the thing is a ir graph, else false */ -int -is_ir_graph(void *thing); +int is_ir_graph(void *thing); #define get_irg_entity get_irg_ent #define set_irg_entity set_irg_ent @@ -143,23 +146,44 @@ void set_irg_end_block (ir_graph *irg, ir_node *node); ir_node *get_irg_end (ir_graph *irg); void set_irg_end (ir_graph *irg, ir_node *node); +/* The fields end_reg and end_except contain the end nodes of the + interprocedural view. If the view is not constructed they contain + the nomal end node. */ +ir_node *get_irg_end_reg (ir_graph *irg); +void set_irg_end_reg (ir_graph *irg, ir_node *node); + +ir_node *get_irg_end_except (ir_graph *irg); +void set_irg_end_except (ir_graph *irg, ir_node *node); + + /* @@@ oblivious, no more supported. */ ir_node *get_irg_cstore (ir_graph *irg); void set_irg_cstore (ir_graph *irg, ir_node *node); /* end oblivious */ -/* node that represents frame pointer */ +/** Returns the node that represents the frame pointer. */ ir_node *get_irg_frame (ir_graph *irg); +/** Sets the node that represents the frame pointer. */ void set_irg_frame (ir_graph *irg, ir_node *node); -/* node that represents global pointer */ +/** Returns the node that represents the global pointer. */ ir_node *get_irg_globals (ir_graph *irg); +/** Sets the node that represents the global pointer. */ void set_irg_globals (ir_graph *irg, ir_node *node); +/** Returns the node that represents the initial memory. */ +ir_node *get_irg_initial_mem (ir_graph *irg); +/** Sets the node that represents the initial memory. */ +void set_irg_initial_mem (ir_graph *irg, ir_node *node); + +/** Returns the node that represents the argument pointer. */ ir_node *get_irg_args (ir_graph *irg); +/** Sets the node that represents the argument pointer. */ void set_irg_args (ir_graph *irg, ir_node *node); +/** Returns the current block of a graph. */ ir_node *get_irg_current_block (ir_graph *irg); +/** Sets the current block of a graph. */ void set_irg_current_block (ir_graph *irg, ir_node *node); /* Use new_Bad() instead!! */ @@ -172,9 +196,11 @@ ir_node *get_irg_unknown (ir_graph *irg); void set_irg_unknown (ir_graph *irg, ir_node *node); */ +/** Returns teh number of value numbers of a graph. */ int get_irg_n_locs (ir_graph *irg); -INLINE long get_irg_graph_nr(ir_graph *irg); +/** Returns the graph number. */ +long get_irg_graph_nr(ir_graph *irg); /********************************************************************************/ /* States of an ir_graph. */ @@ -200,7 +226,7 @@ typedef enum { irg_phase_state get_irg_phase_state (ir_graph *irg); void set_irg_phase_low(ir_graph *irg); -/* state: pinned +/** state: pinned The graph is "pinned" if all nodes are associated with a basic block. It is in state "floats" if nodes are in arbitrary blocks. In state "floats" the block predecessor is set in all nodes, but this can be an @@ -244,17 +270,48 @@ void set_irg_dom_inconsistent(ir_graph *irg); /* state: loopinfo_state Loop information describes the loops within the control and data flow of the procedure. */ -/* @@@ make unrecognizable for jni script!!! -- Why??? */ typedef enum { - no_loopinfo, - loopinfo_consistent, - loopinfo_inconsistent + loopinfo_none, /**< No loop information is constructed. Default. */ + loopinfo_consistent, /**< IntRAprocedural loop information constructed and valid. */ + loopinfo_inconsistent, /**< IntRAprocedural loop information constructed and invalid. */ + loopinfo_ip_consistent, /**< IntERprocedural loop information constructed and valid. */ + loopinfo_ip_inconsistent, /**< IntERprocedural loop information constructed and invalid. */ + loopinfo_cf_consistent, /**< IntRAprocedural control loop information constructed and valid. */ + loopinfo_cf_inconsistent, /**< IntRAprocedural control loop information constructed and invalid. */ + loopinfo_cf_ip_consistent, /**< IntERprocedural control loop information constructed and valid. */ + loopinfo_cf_ip_inconsistent /**< IntERprocedural control loop information constructed and invalid. */ } irg_loopinfo_state; irg_loopinfo_state get_irg_loopinfo_state(ir_graph *irg); +void set_irg_loopinfo_state(ir_graph *irg, irg_loopinfo_state s); +/* Sets the loopinformation state to the appropriate inconsistent state. + If state is 'none' does not change. */ void set_irg_loopinfo_inconsistent(ir_graph *irg); -/* A void * field to link arbritary information to the node. */ +/** state: callee_information_state + * Call nodes contain a list of possible callees. This list must be + * computed by an anlyses. */ +typedef enum { + irg_callee_info_none, + irg_callee_info_consistent, + irg_callee_info_inconsistent +} irg_callee_info_state; +irg_callee_info_state get_irg_callee_info_state(ir_graph *irg); +void set_irg_callee_info_state(ir_graph *irg, irg_callee_info_state s); + +/** property: + * Tells how to handle an ir graph in inlineing. + */ +typedef enum { + irg_inline_any, /**< No restriction on inlineing. Default. */ + irg_inline_forbidden, /**< The graph may not be inlined. */ + irg_inline_recomended, /**< The graph should be inlined. */ + irg_inline_forced /**< The graph must be inlined. */ +} irg_inline_property; +irg_inline_property get_irg_inline_property(ir_graph *irg); +void set_irg_inline_property(ir_graph *irg, irg_inline_property s); + +/** A void * field to link arbritary information to the node. */ void set_irg_link (ir_graph *irg, void *thing); void *get_irg_link (ir_graph *irg);