diff options
-rw-r--r-- | src/lj_opt_fold.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 6df1a08a..8ccfc6bd 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -661,6 +661,25 @@ LJFOLDF(simplify_intsub_k) | |||
661 | return RETRYFOLD; | 661 | return RETRYFOLD; |
662 | } | 662 | } |
663 | 663 | ||
664 | LJFOLD(ADD any KINT64) | ||
665 | LJFOLDF(simplify_intadd_k64) | ||
666 | { | ||
667 | if (ir_kint64(fright)->u64 == 0) /* i + 0 ==> i */ | ||
668 | return LEFTFOLD; | ||
669 | return NEXTFOLD; | ||
670 | } | ||
671 | |||
672 | LJFOLD(SUB any KINT64) | ||
673 | LJFOLDF(simplify_intsub_k64) | ||
674 | { | ||
675 | uint64_t k = ir_kint64(fright)->u64; | ||
676 | if (k == 0) /* i - 0 ==> i */ | ||
677 | return LEFTFOLD; | ||
678 | fins->o = IR_ADD; /* i - k ==> i + (-k) */ | ||
679 | fins->op2 = (IRRef1)lj_ir_kint64(J, -k); /* Overflow for -2^63 ok. */ | ||
680 | return RETRYFOLD; | ||
681 | } | ||
682 | |||
664 | LJFOLD(SUB any any) | 683 | LJFOLD(SUB any any) |
665 | LJFOLD(SUBOV any any) | 684 | LJFOLD(SUBOV any any) |
666 | LJFOLDF(simplify_intsub) | 685 | LJFOLDF(simplify_intsub) |