Added support for memory phis in liveness
authorSebastian Hack <hack@ipd.info.uni-karlsruhe.de>
Tue, 8 Aug 2006 08:18:02 +0000 (08:18 +0000)
committerSebastian Hack <hack@ipd.info.uni-karlsruhe.de>
Tue, 8 Aug 2006 08:18:02 +0000 (08:18 +0000)
ir/be/belive.c
ir/be/bera.c

index 646cd4b..579c75f 100644 (file)
 #define LV_USE_BINARY_SEARCH
 #undef  LV_INTESIVE_CHECKS
 
+static INLINE int is_liveness_node(const ir_node *irn)
+{
+       return is_Phi(irn) || is_data_node(irn);
+}
+
 int (be_lv_next_irn)(const struct _be_lv_t *lv, const ir_node *bl, unsigned flags, int i)
 {
        return _be_lv_next_irn(lv, bl, flags, i);
@@ -334,7 +339,7 @@ static void liveness_for_node(ir_node *irn, void *data)
        ir_node *def_block;
 
        /* Don't compute liveness information for non-data nodes. */
-       if(!is_data_node(irn))
+       if(!is_liveness_node(irn))
                return;
 
        bitset_clear_all(visited);
@@ -349,7 +354,7 @@ static void liveness_for_node(ir_node *irn, void *data)
                * If the usage is no data node, skip this use, since it does not
                * affect the liveness of the node.
                */
-               if(!is_data_node(use))
+               if(!is_liveness_node(use))
                        continue;
 
                /* Get the block where the usage is in. */
index 9a1bb75..97369e1 100644 (file)
 #include "besched_t.h"
 #include "belive_t.h"
 
+static sched_timestep_t get_time_step(const ir_node *irn)
+{
+       return is_Phi(irn) ? 0 : sched_get_time_step(irn);
+}
+
 int value_dominates(const ir_node *a, const ir_node *b)
 {
        int res = 0;
@@ -35,8 +40,8 @@ int value_dominates(const ir_node *a, const ir_node *b)
         * Dominance is determined by the time steps of the schedule.
         */
        } else {
-               sched_timestep_t as = sched_get_time_step(a);
-               sched_timestep_t bs = sched_get_time_step(b);
+               sched_timestep_t as = get_time_step(a);
+               sched_timestep_t bs = get_time_step(b);
                res = as <= bs;
        }