Improve and correct fp-vrp transformation.
[libfirm] / ir / ir / irgraph_t.h
index e0ade39..6b0e0ad 100644 (file)
@@ -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"
@@ -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)
@@ -219,7 +188,7 @@ static inline void _set_irg_args(ir_graph *irg, ir_node *node)
 
 static inline ir_node *_get_irg_bad(const ir_graph *irg)
 {
-       return get_irn_intra_n(irg->anchor, anchor_bad);
+       return get_irn_n(irg->anchor, anchor_bad);
 }
 
 static inline void _set_irg_bad(ir_graph *irg, ir_node *node)
@@ -229,7 +198,7 @@ static inline void _set_irg_bad(ir_graph *irg, ir_node *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 +206,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 +261,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 +302,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 +337,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 +406,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)
@@ -516,7 +475,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 +486,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,16 +522,10 @@ 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)
@@ -565,8 +534,6 @@ static inline int _get_interprocedural_view(void)
 #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)