From 1f578bd424b4499a1d63f4ef3c2647ca0836b877 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 2 Mar 2015 17:31:18 +0100 Subject: [PATCH] FFI: Fix FOLD rule for TOBIT + CONV num.u32. Thanks to Jiale Zhi. --- src/lj_opt_fold.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 7d45b7b5..d00fdd56 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -1006,11 +1006,16 @@ LJFOLDF(simplify_conv_flt_num) LJFOLD(TOBIT CONV KNUM) LJFOLDF(simplify_tobit_conv) { - if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT || - (fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { - /* Fold even across PHI to avoid expensive num->int conversions in loop. */ + /* Fold even across PHI to avoid expensive num->int conversions in loop. */ + if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT) { lua_assert(irt_isnum(fleft->t)); return fleft->op1; + } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { + lua_assert(irt_isnum(fleft->t)); + fins->o = IR_CONV; + fins->op1 = fleft->op1; + fins->op2 = (IRT_INT<<5)|IRT_U32; + return RETRYFOLD; } return NEXTFOLD; }