diff options
-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) |