- be_peephole_IncSP_IncSP() must return the new node
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 19 Jun 2008 03:55:54 +0000 (03:55 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 19 Jun 2008 03:55:54 +0000 (03:55 +0000)
[r20167]

ir/be/arm/arm_optimize.c
ir/be/bepeephole.c
ir/be/bepeephole.h
ir/be/ia32/ia32_optimize.c

index d3669f5..49091cb 100644 (file)
@@ -123,7 +123,7 @@ static void peephole_be_IncSP(ir_node *node) {
        arm_vals v;
 
        /* first optimize incsp->incsp combinations */
-       be_peephole_IncSP_IncSP(node);
+       node = be_peephole_IncSP_IncSP(node);
 
        offset = be_get_IncSP_offset(node);
        /* can be transformed into Add OR Sub */
index 91a7f60..b31a820 100644 (file)
@@ -265,7 +265,7 @@ static void kill_barriers(ir_graph *irg) {
  * Tries to optimize a beIncSp node with it's previous IncSP node.
  * Must be run from a be_peephole_opt() context.
  */
-void be_peephole_IncSP_IncSP(ir_node *node)
+ir_node *be_peephole_IncSP_IncSP(ir_node *node)
 {
        int      pred_offs;
        int      curr_offs;
@@ -273,27 +273,27 @@ void be_peephole_IncSP_IncSP(ir_node *node)
        ir_node *pred = be_get_IncSP_pred(node);
 
        if (!be_is_IncSP(pred))
-               return;
+               return node;
 
        if (get_irn_n_edges(pred) > 1)
-               return;
+               return node;
 
        pred_offs = be_get_IncSP_offset(pred);
        curr_offs = be_get_IncSP_offset(node);
 
        if (pred_offs == BE_STACK_FRAME_SIZE_EXPAND) {
                if (curr_offs != BE_STACK_FRAME_SIZE_SHRINK) {
-                       return;
+                       return node;
                }
                offs = 0;
        } else if (pred_offs == BE_STACK_FRAME_SIZE_SHRINK) {
                if (curr_offs != BE_STACK_FRAME_SIZE_EXPAND) {
-                       return;
+                       return node;
                }
                offs = 0;
        } else if (curr_offs == BE_STACK_FRAME_SIZE_EXPAND ||
                   curr_offs == BE_STACK_FRAME_SIZE_SHRINK) {
-               return;
+               return node;
        } else {
                offs = curr_offs + pred_offs;
        }
@@ -310,6 +310,7 @@ void be_peephole_IncSP_IncSP(ir_node *node)
        be_kill_node(node);
 
        be_peephole_after_exchange(pred);
+       return pred;
 }
 
 void be_peephole_opt(be_irg_t *birg)
index cb7dd0b..764c9f3 100644 (file)
@@ -68,8 +68,10 @@ void be_peephole_after_exchange(ir_node *new_node);
  * Must be run from a be_peephole_opt() context.
  *
  * @param node  a be_IncSP node
+ *
+ * @return the new IncSP node or node itself
  */
-void be_peephole_IncSP_IncSP(ir_node *node);
+ir_node *be_peephole_IncSP_IncSP(ir_node *node);
 
 /**
  * Do peephole optimisations. It traverses the schedule of all blocks in
index f67ae7e..77bc380 100644 (file)
@@ -523,7 +523,7 @@ static void peephole_be_IncSP(ir_node *node)
        int                    offset;
 
        /* first optimize incsp->incsp combinations */
-       be_peephole_IncSP_IncSP(node);
+       node = be_peephole_IncSP_IncSP(node);
 
        /* transform IncSP->Store combinations to Push where possible */
        peephole_IncSP_Store_to_push(node);