diff options
| author | Mike Pall <mike> | 2010-12-08 20:57:21 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-12-08 20:57:21 +0100 |
| commit | f308e00e03c28227cade61c9429dbf3ac526eb9a (patch) | |
| tree | 4a3043870ecb278fa3bc1cd14f5eacc33111ee14 | |
| parent | 70071241bfbd06a02d61c6bfcc66e35eb7704d81 (diff) | |
| download | luajit-f308e00e03c28227cade61c9429dbf3ac526eb9a.tar.gz luajit-f308e00e03c28227cade61c9429dbf3ac526eb9a.tar.bz2 luajit-f308e00e03c28227cade61c9429dbf3ac526eb9a.zip | |
Add FOLD rule to reassociate 64 bit (x+k1)+k2.
| -rw-r--r-- | src/lj_opt_fold.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index cf5de82f..8fc646c9 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
| @@ -983,6 +983,20 @@ LJFOLDF(reassoc_intarith_k) | |||
| 983 | return NEXTFOLD; | 983 | return NEXTFOLD; |
| 984 | } | 984 | } |
| 985 | 985 | ||
| 986 | LJFOLD(ADD ADD KINT64) | ||
| 987 | LJFOLDF(reassoc_intarith_k64) | ||
| 988 | { | ||
| 989 | IRIns *irk = IR(fleft->op2); | ||
| 990 | if (irk->o == IR_KINT64) { | ||
| 991 | uint64_t k = ir_kint64(irk)->u64 + ir_kint64(fright)->u64; | ||
| 992 | PHIBARRIER(fleft); | ||
| 993 | fins->op1 = fleft->op1; | ||
| 994 | fins->op2 = (IRRef1)lj_ir_kint64(J, k); | ||
| 995 | return RETRYFOLD; /* (i o k1) o k2 ==> i o (k1 o k2) */ | ||
| 996 | } | ||
| 997 | return NEXTFOLD; | ||
| 998 | } | ||
| 999 | |||
| 986 | LJFOLD(MIN MIN any) | 1000 | LJFOLD(MIN MIN any) |
| 987 | LJFOLD(MAX MAX any) | 1001 | LJFOLD(MAX MAX any) |
| 988 | LJFOLD(BAND BAND any) | 1002 | LJFOLD(BAND BAND any) |
