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 /src | |
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.
Diffstat (limited to 'src')
-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) |