summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2015-03-02 17:31:18 +0100
committerMike Pall <mike>2015-03-02 17:34:06 +0100
commit1f578bd424b4499a1d63f4ef3c2647ca0836b877 (patch)
tree45b13581dc1ef153155308f83985b8dda2af7180
parent5c0e33c2aaf101aba623d7ebf1282989a8e0d114 (diff)
downloadluajit2-1f578bd424b4499a1d63f4ef3c2647ca0836b877.tar.gz
FFI: Fix FOLD rule for TOBIT + CONV num.u32.
Thanks to Jiale Zhi.
-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)
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;
}