From 82bbb89e3fee377d14576d4dfcccb72dede81d62 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Tue, 16 Oct 2007 20:57:43 +0000 Subject: [PATCH] Decompose Mul(x, 2**b + 2**a) into y = x + x << (b - a), y << a instead of y = x << a, y + y << (b - a). This is beneficial for address mode generation. [r16240] --- ir/ir/irarch.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ir/ir/irarch.c b/ir/ir/irarch.c index 051512af8..17c8f4138 100644 --- a/ir/ir/irarch.c +++ b/ir/ir/irarch.c @@ -326,11 +326,16 @@ static instruction *decompose_simple_cases(mul_env *env, unsigned char *R, int r assert(r == 2); ins = env->root; + if (R[1] <= env->max_S) { + ins = emit_LEA(env, ins, ins, R[1]); + if (R[0] != 0) { + ins = emit_SHIFT(env, ins, R[0]); + } + return ins; + } if (R[0] != 0) { ins = emit_SHIFT(env, ins, R[0]); } - if (R[1] <= env->max_S) - return emit_LEA(env, ins, ins, R[1]); ins2 = emit_SHIFT(env, env->root, R[0] + R[1]); return emit_LEA(env, ins, ins2, 0); -- 2.20.1