X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_optimize.c;h=73ff3ba4ef4327a5bf697c9ac60d5f801dbdede8;hb=87fea9e1e34fcdd7b43ab60cb03b08c716f69571;hp=40735ae65c488a8f06c58c4dba8907de6f06e204;hpb=81e6beaffdd36bd64f736991cca76a2c9fce2dd6;p=libfirm diff --git a/ir/be/ia32/ia32_optimize.c b/ir/be/ia32/ia32_optimize.c index 40735ae65..73ff3ba4e 100644 --- a/ir/be/ia32/ia32_optimize.c +++ b/ir/be/ia32/ia32_optimize.c @@ -61,8 +61,6 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;) static const arch_env_t *arch_env; static ia32_code_gen_t *cg; -static void peephole_IncSP_IncSP(ir_node *node); - #if 0 static void peephole_ia32_Store_IncSP_to_push(ir_node *node) { @@ -95,7 +93,7 @@ static void peephole_ia32_Store_IncSP_to_push(ir_node *node) if(!be_is_IncSP(incsp)) return; - peephole_IncSP_IncSP(incsp); + be_peephole_IncSP_IncSP(incsp); /* must be in the same block */ if(get_nodes_block(incsp) != get_nodes_block(node)) @@ -477,58 +475,6 @@ static void peephole_IncSP_Store_to_push(ir_node *irn) be_set_IncSP_pred(irn, curr_sp); } -/** - * Tries to optimize two following IncSP. - */ -static void peephole_IncSP_IncSP(ir_node *node) -{ - int pred_offs; - int curr_offs; - int offs; - ir_node *pred = be_get_IncSP_pred(node); - ir_node *predpred; - - if(!be_is_IncSP(pred)) - return; - - if(get_irn_n_edges(pred) > 1) - return; - - 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; - } - offs = 0; - } else if(pred_offs == BE_STACK_FRAME_SIZE_SHRINK) { - if(curr_offs != BE_STACK_FRAME_SIZE_EXPAND) { - return; - } - offs = 0; - } else if(curr_offs == BE_STACK_FRAME_SIZE_EXPAND - || curr_offs == BE_STACK_FRAME_SIZE_SHRINK) { - return; - } else { - offs = curr_offs + pred_offs; - } - - /* add pred offset to ours and remove pred IncSP */ - be_set_IncSP_offset(node, offs); - - predpred = be_get_IncSP_pred(pred); - be_peephole_before_exchange(pred, predpred); - - /* rewire dependency edges */ - edges_reroute_kind(pred, predpred, EDGE_KIND_DEP, current_ir_graph); - be_set_IncSP_pred(node, predpred); - sched_remove(pred); - be_kill_node(pred); - - be_peephole_after_exchange(predpred); -} - /** * Find a free GP register if possible, else return NULL. */ @@ -634,7 +580,7 @@ static void peephole_be_IncSP(ir_node *node) int offset; /* first optimize incsp->incsp combinations */ - peephole_IncSP_IncSP(node); + be_peephole_IncSP_IncSP(node); /* transform IncSP->Store combinations to Push where possible */ peephole_IncSP_Store_to_push(node);