diff options
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r-- | src/lj_opt_fold.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 325b0372..edd376c9 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -701,7 +701,7 @@ LJFOLDF(shortcut_dropleft) | |||
701 | } | 701 | } |
702 | 702 | ||
703 | /* Note: no safe shortcuts with STRTO and TOSTR ("1e2" ==> +100 ==> "100"). */ | 703 | /* Note: no safe shortcuts with STRTO and TOSTR ("1e2" ==> +100 ==> "100"). */ |
704 | LJFOLD(NEG NEG KNUM) | 704 | LJFOLD(NEG NEG any) |
705 | LJFOLD(BNOT BNOT) | 705 | LJFOLD(BNOT BNOT) |
706 | LJFOLD(BSWAP BSWAP) | 706 | LJFOLD(BSWAP BSWAP) |
707 | LJFOLDF(shortcut_leftleft) | 707 | LJFOLDF(shortcut_leftleft) |
@@ -1067,6 +1067,18 @@ LJFOLDF(simplify_intsub_k) | |||
1067 | return RETRYFOLD; | 1067 | return RETRYFOLD; |
1068 | } | 1068 | } |
1069 | 1069 | ||
1070 | LJFOLD(SUB KINT any) | ||
1071 | LJFOLD(SUB KINT64 any) | ||
1072 | LJFOLDF(simplify_intsub_kleft) | ||
1073 | { | ||
1074 | if (fleft->o == IR_KINT ? (fleft->i == 0) : (ir_kint64(fleft)->u64 == 0)) { | ||
1075 | fins->o = IR_NEG; /* 0 - i ==> -i */ | ||
1076 | fins->op1 = fins->op2; | ||
1077 | return RETRYFOLD; | ||
1078 | } | ||
1079 | return NEXTFOLD; | ||
1080 | } | ||
1081 | |||
1070 | LJFOLD(ADD any KINT64) | 1082 | LJFOLD(ADD any KINT64) |
1071 | LJFOLDF(simplify_intadd_k64) | 1083 | LJFOLDF(simplify_intadd_k64) |
1072 | { | 1084 | { |