diff options
author | Mike Pall <mike> | 2010-12-06 13:26:58 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-12-06 13:26:58 +0100 |
commit | f6c4e8d3d70aa891de5a923a88ff670caef0a59d (patch) | |
tree | dd66555879a5dd7ac20382a6487cf6b634f900c1 /src | |
parent | a5bdae8f23e1175b542b9bf4950d108c7d4d982f (diff) | |
download | luajit-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.c | 5 |
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; |