-#if 0
-/**
- * Creates a Push instruction before the given schedule point.
- *
- * @param dbgi debug info
- * @param block the block
- * @param stack the previous stack value
- * @param schedpoint the new node is added before this node
- * @param reg the register to pop
- *
- * @return the new stack value
- */
-static ir_node *create_push(dbg_info *dbgi, ir_node *block,
- ir_node *stack, ir_node *schedpoint)
-{
- const arch_register_t *esp = &ia32_gp_regs[REG_ESP];
-
- ir_node *val = ia32_new_NoReg_gp(cg);
- ir_node *noreg = ia32_new_NoReg_gp(cg);
- ir_node *nomem = new_NoMem();
- ir_node *push = new_bd_ia32_Push(dbgi, block, noreg, noreg, nomem, val, stack);
- sched_add_before(schedpoint, push);
-
- stack = new_r_Proj(push, mode_Iu, pn_ia32_Push_stack);
- arch_set_irn_register(stack, esp);
-
- return stack;
-}
-
-static void peephole_store_incsp(ir_node *store)
-{
- dbg_info *dbgi;
- ir_node *node;
- ir_node *block;
- ir_node *noreg;
- ir_node *mem;
- ir_node *push;
- ir_node *val;
- ir_node *base;
- ir_node *index;
- ir_node *am_base = get_irn_n(store, n_ia32_Store_base);
- if (!be_is_IncSP(am_base)
- || get_nodes_block(am_base) != get_nodes_block(store))
- return;
- mem = get_irn_n(store, n_ia32_Store_mem);
- if (!is_ia32_NoReg_GP(get_irn_n(store, n_ia32_Store_index))
- || !is_NoMem(mem))
- return;
-
- int incsp_offset = be_get_IncSP_offset(am_base);
- if (incsp_offset <= 0)
- return;
-
- /* we have to be at offset 0 */
- int my_offset = get_ia32_am_offs_int(store);
- if (my_offset != 0) {
- /* TODO here: find out wether there is a store with offset 0 before
- * us and wether we can move it down to our place */
- return;
- }
- ir_mode *ls_mode = get_ia32_ls_mode(store);
- int my_store_size = get_mode_size_bytes(ls_mode);
-
- if (my_offset + my_store_size > incsp_offset)
- return;
-
- /* correctness checking:
- - noone else must write to that stackslot
- (because after translation incsp won't allocate it anymore)
- */
- sched_foreach_reverse_from(store, node) {
- int i, arity;
-
- if (node == am_base)
- break;
-
- /* make sure noone else can use the space on the stack */
- arity = get_irn_arity(node);
- for (i = 0; i < arity; ++i) {
- ir_node *pred = get_irn_n(node, i);
- if (pred != am_base)
- continue;
-
- if (i == n_ia32_base &&
- (get_ia32_op_type(node) == ia32_AddrModeS
- || get_ia32_op_type(node) == ia32_AddrModeD)) {
- int node_offset = get_ia32_am_offs_int(node);
- ir_mode *node_ls_mode = get_ia32_ls_mode(node);
- int node_size = get_mode_size_bytes(node_ls_mode);
- /* overlapping with our position? abort */
- if (node_offset < my_offset + my_store_size
- && node_offset + node_size >= my_offset)
- return;
- /* otherwise it's fine */
- continue;
- }
-
- /* strange use of esp: abort */
- return;
- }
- }
-
- /* all ok, change to push */
- dbgi = get_irn_dbg_info(store);
- block = get_nodes_block(store);
- noreg = ia32_new_NoReg_gp(cg);
- val = get_irn_n(store, n_ia32_Store_val);
-
- push = new_bd_ia32_Push(dbgi, block, noreg, noreg, mem,
-
- create_push(dbgi, current_ir_graph, block, am_base, store);
-}
-#endif
-