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 | |
| 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.
| -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; |
