From f6c4e8d3d70aa891de5a923a88ff670caef0a59d Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 6 Dec 2010 13:26:58 +0100 Subject: [PATCH] Add FOLD rule to turn i << 1 into i + i. --- src/lj_opt_fold.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index cae4e5e4..feddba87 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -859,6 +859,11 @@ LJFOLDF(simplify_shift_ik) int32_t k = (fright->i & mask); if (k == 0) /* i o 0 ==> i */ return LEFTFOLD; + if (k == 1 && fins->o == IR_BSHL) { /* i << 1 ==> i + i */ + fins->o = IR_ADD; + fins->op2 = fins->op1; + return RETRYFOLD; + } if (k != fright->i) { /* i o k ==> i o (k & mask) */ fins->op2 = (IRRef1)lj_ir_kint(J, k); return RETRYFOLD;