aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-12-06 13:26:58 +0100
committerMike Pall <mike>2010-12-06 13:26:58 +0100
commitf6c4e8d3d70aa891de5a923a88ff670caef0a59d (patch)
treedd66555879a5dd7ac20382a6487cf6b634f900c1 /src
parenta5bdae8f23e1175b542b9bf4950d108c7d4d982f (diff)
downloadluajit-f6c4e8d3d70aa891de5a923a88ff670caef0a59d.tar.gz
luajit-f6c4e8d3d70aa891de5a923a88ff670caef0a59d.tar.bz2
luajit-f6c4e8d3d70aa891de5a923a88ff670caef0a59d.zip
Add FOLD rule to turn i << 1 into i + i.
Diffstat (limited to 'src')
-rw-r--r--src/lj_opt_fold.c5
1 files changed, 5 insertions, 0 deletions
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)
859 int32_t k = (fright->i & mask); 859 int32_t k = (fright->i & mask);
860 if (k == 0) /* i o 0 ==> i */ 860 if (k == 0) /* i o 0 ==> i */
861 return LEFTFOLD; 861 return LEFTFOLD;
862 if (k == 1 && fins->o == IR_BSHL) { /* i << 1 ==> i + i */
863 fins->o = IR_ADD;
864 fins->op2 = fins->op1;
865 return RETRYFOLD;
866 }
862 if (k != fright->i) { /* i o k ==> i o (k & mask) */ 867 if (k != fright->i) { /* i o k ==> i o (k & mask) */
863 fins->op2 = (IRRef1)lj_ir_kint(J, k); 868 fins->op2 = (IRRef1)lj_ir_kint(J, k);
864 return RETRYFOLD; 869 return RETRYFOLD;