瀏覽代碼

FFI: Fix FOLD rule for TOBIT + CONV num.u32.

Thanks to Jiale Zhi.
Mike Pall 10 年之前
父節點
當前提交
1f578bd424
共有 1 個文件被更改,包括 8 次插入3 次删除
  1. 8 3
      src/lj_opt_fold.c

+ 8 - 3
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;
 }