aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
authorMike Pall <mike>2015-03-02 17:34:33 +0100
committerMike Pall <mike>2015-03-02 17:34:33 +0100
commit2c0748f6914d901e402cf87fd53e998aaaef1d6f (patch)
tree812ccb5b529632a7d5bdb44a518dafa5e905706e /src/lj_opt_fold.c
parente1a8f3ba0b8cee42ca82655e891d16b46912d339 (diff)
parent1f578bd424b4499a1d63f4ef3c2647ca0836b877 (diff)
downloadluajit-2c0748f6914d901e402cf87fd53e998aaaef1d6f.tar.gz
luajit-2c0748f6914d901e402cf87fd53e998aaaef1d6f.tar.bz2
luajit-2c0748f6914d901e402cf87fd53e998aaaef1d6f.zip
Merge branch 'master' into v2.1
Diffstat (limited to 'src/lj_opt_fold.c')
-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}