aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 7d45b7b5..d00fdd56 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -1006,11 +1006,16 @@ LJFOLDF(simplify_conv_flt_num)
1006LJFOLD(TOBIT CONV KNUM) 1006LJFOLD(TOBIT CONV KNUM)
1007LJFOLDF(simplify_tobit_conv) 1007LJFOLDF(simplify_tobit_conv)
1008{ 1008{
1009 if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT || 1009 /* Fold even across PHI to avoid expensive num->int conversions in loop. */
1010 (fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { 1010 if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT) {
1011 /* Fold even across PHI to avoid expensive num->int conversions in loop. */
1012 lua_assert(irt_isnum(fleft->t)); 1011 lua_assert(irt_isnum(fleft->t));
1013 return fleft->op1; 1012 return fleft->op1;
1013 } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) {
1014 lua_assert(irt_isnum(fleft->t));
1015 fins->o = IR_CONV;
1016 fins->op1 = fleft->op1;
1017 fins->op2 = (IRT_INT<<5)|IRT_U32;
1018 return RETRYFOLD;
1014 } 1019 }
1015 return NEXTFOLD; 1020 return NEXTFOLD;
1016} 1021}