aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_opt_fold.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index 7698b373..f809a991 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -1167,11 +1167,16 @@ LJFOLDF(simplify_conv_flt_num)
1167LJFOLD(TOBIT CONV KNUM) 1167LJFOLD(TOBIT CONV KNUM)
1168LJFOLDF(simplify_tobit_conv) 1168LJFOLDF(simplify_tobit_conv)
1169{ 1169{
1170 if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT || 1170 /* Fold even across PHI to avoid expensive num->int conversions in loop. */
1171 (fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { 1171 if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT) {
1172 /* Fold even across PHI to avoid expensive num->int conversions in loop. */
1173 lua_assert(irt_isnum(fleft->t)); 1172 lua_assert(irt_isnum(fleft->t));
1174 return fleft->op1; 1173 return fleft->op1;
1174 } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) {
1175 lua_assert(irt_isnum(fleft->t));
1176 fins->o = IR_CONV;
1177 fins->op1 = fleft->op1;
1178 fins->op2 = (IRT_INT<<5)|IRT_U32;
1179 return RETRYFOLD;
1175 } 1180 }
1176 return NEXTFOLD; 1181 return NEXTFOLD;
1177} 1182}