X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgraph_t.h;h=b431f063cc5f0fe77e1bb8502e526e7863b69352;hb=a08e6f04aa3669cff094f94a9484c7c2bb1314d0;hp=e0ade39dae032f43f9e3b8e8c4a4134369dca8b1;hpb=abbf9492df1993d211412ba520feb81de0688c2a;p=libfirm diff --git a/ir/ir/irgraph_t.h b/ir/ir/irgraph_t.h index e0ade39da..b431f063c 100644 --- a/ir/ir/irgraph_t.h +++ b/ir/ir/irgraph_t.h @@ -31,7 +31,6 @@ #include "irtypes.h" #include "irprog.h" -#include "pseudo_irg.h" #include "type_t.h" #include "entity_t.h" #include "iredgekinds.h" @@ -94,7 +93,7 @@ struct obstack *get_irg_obstack(const ir_graph *irg); * @param irg the IR graph * @param n the IR node */ -int node_is_in_irgs_storage(ir_graph *irg, ir_node *n); +int node_is_in_irgs_storage(const ir_graph *irg, const ir_node *n); /*-------------------------------------------------------------------*/ /* inline functions for graphs */ @@ -108,7 +107,7 @@ static inline int _is_ir_graph(const void *thing) /** Returns the start block of a graph. */ static inline ir_node *_get_irg_start_block(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_start_block); + return get_irn_n(irg->anchor, anchor_start_block); } static inline void _set_irg_start_block(ir_graph *irg, ir_node *node) @@ -118,7 +117,7 @@ static inline void _set_irg_start_block(ir_graph *irg, ir_node *node) static inline ir_node *_get_irg_start(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_start); + return get_irn_n(irg->anchor, anchor_start); } static inline void _set_irg_start(ir_graph *irg, ir_node *node) @@ -128,7 +127,7 @@ static inline void _set_irg_start(ir_graph *irg, ir_node *node) static inline ir_node *_get_irg_end_block(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_end_block); + return get_irn_n(irg->anchor, anchor_end_block); } static inline void _set_irg_end_block(ir_graph *irg, ir_node *node) @@ -139,7 +138,7 @@ static inline void _set_irg_end_block(ir_graph *irg, ir_node *node) static inline ir_node *_get_irg_end(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_end); + return get_irn_n(irg->anchor, anchor_end); } static inline void _set_irg_end(ir_graph *irg, ir_node *node) @@ -147,29 +146,9 @@ static inline void _set_irg_end(ir_graph *irg, ir_node *node) set_irn_n(irg->anchor, anchor_end, node); } -static inline ir_node *_get_irg_end_reg(const ir_graph *irg) -{ - return get_irn_intra_n(irg->anchor, anchor_end_reg); -} - -static inline void _set_irg_end_reg(ir_graph *irg, ir_node *node) -{ - set_irn_n(irg->anchor, anchor_end_reg, node); -} - -static inline ir_node *_get_irg_end_except(const ir_graph *irg) -{ - return get_irn_intra_n(irg->anchor, anchor_end_except); -} - -static inline void _set_irg_end_except(ir_graph *irg, ir_node *node) -{ - set_irn_n(irg->anchor, anchor_end_except, node); -} - static inline ir_node *_get_irg_initial_exec(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_initial_exec); + return get_irn_n(irg->anchor, anchor_initial_exec); } static inline void _set_irg_initial_exec(ir_graph *irg, ir_node *node) @@ -179,7 +158,7 @@ static inline void _set_irg_initial_exec(ir_graph *irg, ir_node *node) static inline ir_node *_get_irg_frame(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_frame); + return get_irn_n(irg->anchor, anchor_frame); } static inline void _set_irg_frame(ir_graph *irg, ir_node *node) @@ -187,19 +166,9 @@ static inline void _set_irg_frame(ir_graph *irg, ir_node *node) set_irn_n(irg->anchor, anchor_frame, node); } -static inline ir_node *_get_irg_tls(const ir_graph *irg) -{ - return get_irn_intra_n(irg->anchor, anchor_tls); -} - -static inline void _set_irg_tls(ir_graph *irg, ir_node *node) -{ - set_irn_n(irg->anchor, anchor_tls, node); -} - static inline ir_node *_get_irg_initial_mem(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_initial_mem); + return get_irn_n(irg->anchor, anchor_initial_mem); } static inline void _set_irg_initial_mem(ir_graph *irg, ir_node *node) @@ -209,7 +178,7 @@ static inline void _set_irg_initial_mem(ir_graph *irg, ir_node *node) static inline ir_node *_get_irg_args(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_args); + return get_irn_n(irg->anchor, anchor_args); } static inline void _set_irg_args(ir_graph *irg, ir_node *node) @@ -217,19 +186,9 @@ static inline void _set_irg_args(ir_graph *irg, ir_node *node) set_irn_n(irg->anchor, anchor_args, node); } -static inline ir_node *_get_irg_bad(const ir_graph *irg) -{ - return get_irn_intra_n(irg->anchor, anchor_bad); -} - -static inline void _set_irg_bad(ir_graph *irg, ir_node *node) -{ - set_irn_n(irg->anchor, anchor_bad, node); -} - static inline ir_node * _get_irg_no_mem(const ir_graph *irg) { - return get_irn_intra_n(irg->anchor, anchor_no_mem); + return get_irn_n(irg->anchor, anchor_no_mem); } static inline void _set_irg_no_mem(ir_graph *irg, ir_node *node) @@ -237,16 +196,6 @@ static inline void _set_irg_no_mem(ir_graph *irg, ir_node *node) set_irn_n(irg->anchor, anchor_no_mem, node); } -static inline ir_node *_get_irg_current_block(const ir_graph *irg) -{ - return irg->current_block; -} - -static inline void _set_irg_current_block(ir_graph *irg, ir_node *node) -{ - irg->current_block = node; -} - static inline ir_entity *_get_irg_entity(const ir_graph *irg) { assert(irg); @@ -302,15 +251,15 @@ static inline void _set_irg_outs_inconsistent(ir_graph *irg) irg->outs_state = outs_inconsistent; } -static inline irg_extblk_state _get_irg_extblk_state(const ir_graph *irg) +static inline irg_extblk_info_state _get_irg_extblk_state(const ir_graph *irg) { - return irg->extblk_state; + return irg->extblk_state; } static inline void _set_irg_extblk_inconsistent(ir_graph *irg) { - if (irg->extblk_state == extblk_valid) - irg->extblk_state = extblk_invalid; + if (irg->extblk_state == ir_extblk_info_valid) + irg->extblk_state = ir_extblk_info_invalid; } static inline irg_dom_state _get_irg_dom_state(const ir_graph *irg) @@ -343,7 +292,7 @@ static inline void _set_irg_loopinfo_state(ir_graph *irg, irg_loopinfo_state s) static inline void _set_irg_loopinfo_inconsistent(ir_graph *irg) { - irg->loopinfo_state &= ~loopinfo_valid; + irg->loopinfo_state = (irg_loopinfo_state) (irg->loopinfo_state & ~loopinfo_valid); } static inline void _set_irg_pinned(ir_graph *irg, op_pin_state p) @@ -378,21 +327,21 @@ static inline void _set_irg_inline_property(ir_graph *irg, irg_inline_property s irg->inline_property = s; } -static inline unsigned _get_irg_additional_properties(const ir_graph *irg) +static inline mtp_additional_properties _get_irg_additional_properties(const ir_graph *irg) { if (irg->additional_properties & mtp_property_inherited) return get_method_additional_properties(get_entity_type(irg->ent)); return irg->additional_properties; } -static inline void _set_irg_additional_properties(ir_graph *irg, unsigned mask) +static inline void _set_irg_additional_properties(ir_graph *irg, mtp_additional_properties mask) { irg->additional_properties = mask & ~mtp_property_inherited; } -static inline void _set_irg_additional_property(ir_graph *irg, mtp_additional_property flag) +static inline void _add_irg_additional_properties(ir_graph *irg, mtp_additional_properties flag) { - unsigned prop = irg->additional_properties; + mtp_additional_properties prop = irg->additional_properties; if (prop & mtp_property_inherited) prop = get_method_additional_properties(get_entity_type(irg->ent)); @@ -447,12 +396,12 @@ static inline unsigned _get_irg_fp_model(const ir_graph *irg) static inline void _set_irg_state(ir_graph *irg, ir_graph_state_t state) { - irg->state |= state; + irg->state = (ir_graph_state_t) (irg->state | state); } static inline void _clear_irg_state(ir_graph *irg, ir_graph_state_t state) { - irg->state &= ~state; + irg->state = (ir_graph_state_t) (irg->state & ~state); } static inline int _is_irg_state(const ir_graph *irg, ir_graph_state_t state) @@ -466,7 +415,8 @@ static inline int _is_irg_state(const ir_graph *irg, ir_graph_state_t state) * @param irn The node. * @return The index allocated for the node. */ -static inline unsigned irg_register_node_idx(ir_graph *irg, ir_node *irn) { +static inline unsigned irg_register_node_idx(ir_graph *irg, ir_node *irn) +{ unsigned idx = irg->last_node_idx++; if (idx >= (unsigned)ARR_LEN(irg->idx_irn_map)) ARR_RESIZE(ir_node *, irg->idx_irn_map, idx + 1); @@ -497,7 +447,7 @@ static inline void irg_kill_node(ir_graph *irg, ir_node *n) * @return The node with that index or NULL, if there is no node with that index. * @note The node you got might be dead. */ -static inline ir_node *_get_idx_irn(ir_graph *irg, unsigned idx) +static inline ir_node *_get_idx_irn(const ir_graph *irg, unsigned idx) { assert(idx < (unsigned) ARR_LEN(irg->idx_irn_map)); return irg->idx_irn_map[idx]; @@ -516,7 +466,7 @@ static inline int get_irg_n_anchors(const ir_graph *irg) */ static inline ir_node *get_irg_anchor(const ir_graph *irg, int idx) { - return get_irn_intra_n(irg->anchor, idx); + return get_irn_n(irg->anchor, idx); } /** @@ -527,16 +477,32 @@ static inline void set_irg_anchor(ir_graph *irg, int idx, ir_node *irn) set_irn_n(irg->anchor, idx, irn); } -#ifdef INTERPROCEDURAL_VIEW -extern int firm_interprocedural_view; -static inline int _get_interprocedural_view(void) + +/** + * Register a phase on an irg. + * The phase will then be managed by the irg. This means you can easily + * access the phase when you only have a graph handle, the memory will be + * freed when the graph is freed and some care is taken that the phase data + * will be invalidated/preserved on events like dead code elemination and + * code selection. + */ +void irg_register_phase(ir_graph *irg, ir_phase_id id, ir_phase *phase); + +/** + * Frees all phase infos attached to an irg + */ +void irg_invalidate_phases(ir_graph *irg); + +/** + * return phase with given id + */ +static inline ir_phase *irg_get_phase(const ir_graph *irg, ir_phase_id id) { - return firm_interprocedural_view; + assert(id <= PHASE_LAST); + return irg->phases[id]; } -#define get_interprocedural_view() _get_interprocedural_view() -#endif #define is_ir_graph(thing) _is_ir_graph(thing) #define get_irg_start_block(irg) _get_irg_start_block(irg) @@ -547,26 +513,16 @@ static inline int _get_interprocedural_view(void) #define set_irg_end_block(irg, node) _set_irg_end_block(irg, node) #define get_irg_end(irg) _get_irg_end(irg) #define set_irg_end(irg, node) _set_irg_end(irg, node) -#define get_irg_end_reg(irg) _get_irg_end_reg(irg) -#define set_irg_end_reg(irg, node) _set_irg_end_reg(irg, node) -#define get_irg_end_except(irg) _get_irg_end_except(irg) -#define set_irg_end_except(irg, node) _set_irg_end_except(irg, node) #define get_irg_initial_exec(irg) _get_irg_initial_exec(irg) #define set_irg_initial_exec(irg, node) _set_irg_initial_exec(irg, node) #define get_irg_frame(irg) _get_irg_frame(irg) #define set_irg_frame(irg, node) _set_irg_frame(irg, node) -#define get_irg_tls(irg) _get_irg_tls(irg) -#define set_irg_tls(irg, node) _set_irg_tls(irg, node) #define get_irg_initial_mem(irg) _get_irg_initial_mem(irg) #define set_irg_initial_mem(irg, node) _set_irg_initial_mem(irg, node) #define get_irg_args(irg) _get_irg_args(irg) #define set_irg_args(irg, node) _set_irg_args(irg, node) -#define get_irg_bad(irg) _get_irg_bad(irg) -#define set_irg_bad(irg, node) _set_irg_bad(irg, node) #define get_irg_no_mem(irg) _get_irg_no_mem(irg) #define set_irn_no_mem(irg, node) _set_irn_no_mem(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_entity(irg) _get_irg_entity(irg) #define set_irg_entity(irg, ent) _set_irg_entity(irg, ent) #define get_irg_frame_type(irg) _get_irg_frame_type(irg)