From 85b4431f6974e337b6bdaf7a88b569fbdd77f3de Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Tue, 10 Oct 2006 15:48:47 +0000 Subject: [PATCH] Bugfix: add eax resp. edx proj for MulS if missing --- ir/be/ia32/ia32_transform.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index ee0751547..2569c8314 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -2851,11 +2851,24 @@ static ir_node *gen_ia32_l_MulS(ia32_transform_env_t *env) { ir_node *new_op = gen_binop(env, get_binop_left(env->irn), get_binop_right(env->irn), new_rd_ia32_MulS); ir_node *muls = get_Proj_pred(new_op); + ir_node *proj; /* MulS cannot have AM for destination */ if (get_ia32_am_support(muls) != ia32_am_None) set_ia32_am_support(muls, ia32_am_Source); + /* check if EAX and EDX proj exist, add missing one */ + proj = get_proj_for_pn(env->irn, pn_ia32_MulS_EAX); + if (! proj) { + proj = new_r_Proj(env->irg, env->block, muls, get_ia32_res_mode(env->irn), pn_ia32_MulS_EAX); + be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], env->irg, env->block, 1, &proj); + } + proj = get_proj_for_pn(env->irn, pn_ia32_MulS_EDX); + if (! proj) { + proj = new_r_Proj(env->irg, env->block, muls, get_ia32_res_mode(env->irn), pn_ia32_MulS_EDX); + be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], env->irg, env->block, 1, &proj); + } + return muls; } -- 2.20.1