]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
FFI: Fix FOLD rule for TOBIT + CONV num.u32.
authorMike Pall <mike>
Mon, 2 Mar 2015 16:31:18 +0000 (17:31 +0100)
committerMike Pall <mike>
Mon, 2 Mar 2015 16:34:06 +0000 (17:34 +0100)
Thanks to Jiale Zhi.

src/lj_opt_fold.c

index 7d45b7b5b57ecd930cdc2012fd02094b76177645..d00fdd56f5a8f445147eabc926836d03c9bc2a1e 100644 (file)
@@ -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;
 }