diff options
Diffstat (limited to 'src')
| -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) |
