From 2e05b466631f42bb8d5c6c175c86c2b1bd616ac3 Mon Sep 17 00:00:00 2001 From: Sebastian Hack Date: Wed, 18 Jan 2006 17:14:10 +0000 Subject: [PATCH] Fixed some bugs --- ir/be/ia32/bearch_ia32.c | 2 +- ir/be/ia32/ia32_map_regs.c | 2 +- ir/be/ia32/ia32_transform.c | 15 ++++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index b7faa5b78..0078f394b 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -395,7 +395,7 @@ static const arch_code_generator_if_t *ia32_get_code_generator_if(void *self) { * Returns the default scheduler */ static const list_sched_selector_t *ia32_get_list_sched_selector(const void *self) { - return trivial_selector; + return reg_pressure_selector; } #ifdef WITH_LIBCORE diff --git a/ir/be/ia32/ia32_map_regs.c b/ir/be/ia32/ia32_map_regs.c index 43bd323bd..fe56466ce 100644 --- a/ir/be/ia32/ia32_map_regs.c +++ b/ir/be/ia32/ia32_map_regs.c @@ -69,7 +69,7 @@ long translate_proj_pos(const ir_node *proj) { else if (is_ia32_SwitchJmp(pred)) { return 0; } - else if (is_ia32_Cltd(pred)) { + else if (is_ia32_Cltd(pred) || is_ia32_Mul(pred)) { if (nr == pn_EAX) return 0; if (nr == pn_EDX) diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index 699f5241b..13bb4a59b 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -247,16 +247,17 @@ ir_node *generate_Mul(transform_env_t *env, ir_node *op1, ir_node *op2, op_flavo ir_graph *irg = env->irg; ir_node *block = env->block; ir_mode *mode = env->mode; + ir_node *mul; /* create the mul */ if (is_imm_op) { - res = new_rd_ia32_Mul_i(dbg, irg, block, op1, mode); + mul = new_rd_ia32_Mul_i(dbg, irg, block, op1, mode_T); set_ia32_Immop_attr(res, op2); } else { - res = new_rd_ia32_Mul(dbg, irg, block, op1, op2, mode); + mul = new_rd_ia32_Mul(dbg, irg, block, op1, op2, mode_T); } - set_ia32_flavour(res, mul_flav); + set_ia32_flavour(mul, mul_flav); /* create the mul infrastructure */ if (mul_flav == flavour_Mul) { @@ -268,10 +269,10 @@ ir_node *generate_Mul(transform_env_t *env, ir_node *op1, ir_node *op2, op_flavo pn_bad = pn_EAX; } - res = new_rd_Proj(dbg, irg, block, res, mode, pn_good); - in_keep[0] = new_rd_Proj(dbg, irg, block, res, mode, pn_bad); + res = new_rd_Proj(dbg, irg, block, mul, mode, pn_good); + in_keep[0] = new_rd_Proj(dbg, irg, block, mul, mode, pn_bad); - new_Keep(irg, block, 1, in_keep); + be_new_Keep(&ia32_reg_classes[CLASS_ia32_general_purpose], irg, block, 1, in_keep); return res; } @@ -580,7 +581,7 @@ static ir_node *generate_DivMod(transform_env_t *env, ir_node *dividend, ir_node in_keep[0] = new_rd_Proj(dbg, irg, block, res, mode_Is, pn_DivMod_res_div); } - new_Keep(irg, block, 1, in_keep); + be_new_Keep(&ia32_reg_classes[CLASS_ia32_general_purpose], irg, block, 1, in_keep); } return res; -- 2.20.1