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)
{
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))
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.
*/
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);