diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 2f903e27..1a830eb8 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -1038,8 +1038,15 @@ LJFOLD(SUB any KNUM) LJFOLDF(simplify_numsub_k) { lua_Number n = knumright; - if (n == 0.0) /* x - (+-0) ==> x */ - return LEFTFOLD; + if (n == 0.0) { + /* x - (+0) ==> x */ + if (!signbit(n)) + return LEFTFOLD; + /* x - (-0) ==> x + 0 */ + /* Note: x + 0 != x for x = -0 */ + fins->o = IR_ADD; + fins->op2 = (IRRef1)lj_ir_knum(J, 0.0); + } return NEXTFOLD; }