- /* copy address mode information to load */
- set_ia32_op_type(load, ia32_AddrModeS);
- ia32_copy_am_attrs(load, irn);
- if (is_ia32_is_reload(irn))
- set_ia32_is_reload(load);
-
- /* insert the load into schedule */
- sched_add_before(irn, load);
-
- DBG((dbg, LEVEL_3, "irg %+F: build back AM source for node %+F, inserted load %+F\n", cg->irg, irn, load));
-
- load_res = new_r_Proj(cg->irg, block, load, proj_mode, pnres);
- arch_set_irn_register(cg->arch_env, load_res, out_reg);
-
- /* set the new input operand */
- set_irn_n(irn, n_ia32_binary_right, load_res);
- if(get_irn_mode(irn) == mode_T) {
- const ir_edge_t *edge, *next;
- foreach_out_edge_safe(irn, edge, next) {
- ir_node *node = get_edge_src_irn(edge);
- int pn = get_Proj_proj(node);
- if (pn == pn_ia32_res) {
- exchange(node, irn);
- } else if (pn == pn_ia32_mem) {
- set_Proj_pred(node, load);
- set_Proj_proj(node, pnmem);
- } else {
- panic("Unexpected Proj");
- }
- }
- set_irn_mode(irn, mode_Iu);
- }