X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_intrinsics.c;h=52b0e95f33c0c345177b073d2edd21536e9a0cb2;hb=a1a465eb2b3f54027b29f829423fffd0396937f4;hp=436a889e0c6bf9b87dac6ada50e8eabb539a1950;hpb=f88e86f1a13d0d1983db56af8670be3e7a4c86ab;p=libfirm diff --git a/ir/be/ia32/ia32_intrinsics.c b/ir/be/ia32/ia32_intrinsics.c index 436a889e0..52b0e95f3 100644 --- a/ir/be/ia32/ia32_intrinsics.c +++ b/ir/be/ia32/ia32_intrinsics.c @@ -55,7 +55,7 @@ static void resolve_call(ir_node *call, ir_node *l_res, ir_node *h_res, ir_graph set_Tuple_pred(call, pn_Call_M_regular, get_irg_no_mem(irg)); set_Tuple_pred(call, pn_Call_X_except, get_irg_bad(irg)); set_Tuple_pred(call, pn_Call_T_result, res); - set_Tuple_pred(call, pn_Call_M_except, get_irg_bad(irg)); + set_Tuple_pred(call, pn_Call_M_except, get_irg_no_mem(irg)); set_Tuple_pred(call, pn_Call_P_value_res_base, get_irg_bad(irg)); } @@ -135,6 +135,7 @@ static int map_Shl(ir_node *call, void *ctx) { /* l_res = SHL a_l, cnt */ h_res = new_rd_ia32_l_Shl(dbg, irg, block, a_l, cnt, h_res_mode); + add_irn_dep(h_res, l_res); resolve_call(call, l_res, h_res, irg, block); @@ -162,6 +163,7 @@ static int map_Shr(ir_node *call, void *ctx) { /* h_res = SHR a_h, cnt */ h_res = new_rd_ia32_l_Shr(dbg, irg, block, a_h, cnt, h_res_mode); + add_irn_dep(h_res, l_res); resolve_call(call, l_res, h_res, irg, block); @@ -189,6 +191,7 @@ static int map_Shrs(ir_node *call, void *ctx) { /* h_res = SAR a_h, cnt */ h_res = new_rd_ia32_l_Shrs(dbg, irg, block, a_h, cnt, h_res_mode); + add_irn_dep(h_res, l_res); resolve_call(call, l_res, h_res, irg, block); @@ -258,6 +261,7 @@ static int map_Minus(ir_node *call, void *ctx) { /* too bad: we need 0 in a register here */ cnst = new_Const_long(h_res_mode, 0); h_res = new_rd_ia32_l_SubC(dbg, irg, block, cnst, a_h, h_res_mode); + add_irn_dep(h_res, l_res); resolve_call(call, l_res, h_res, irg, block); @@ -298,6 +302,7 @@ static int map_Abs(ir_node *call, void *ctx) { sub_h = new_rd_ia32_l_Eor(dbg, irg, block, a_h, sign, h_res_mode); l_res = new_rd_ia32_l_Sub(dbg, irg, block, sub_l, sign, l_res_mode); h_res = new_rd_ia32_l_SubC(dbg, irg, block, sub_h, sign, l_res_mode); + add_irn_dep(h_res, l_res); resolve_call(call, l_res, h_res, irg, block);