diff options
author | Mike Pall <mike> | 2015-03-02 17:31:18 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2015-03-02 17:34:06 +0100 |
commit | 1f578bd424b4499a1d63f4ef3c2647ca0836b877 (patch) | |
tree | 45b13581dc1ef153155308f83985b8dda2af7180 | |
parent | 5c0e33c2aaf101aba623d7ebf1282989a8e0d114 (diff) | |
download | luajit2-1f578bd424b4499a1d63f4ef3c2647ca0836b877.tar.gz |
FFI: Fix FOLD rule for TOBIT + CONV num.u32.
Thanks to Jiale Zhi.
-rw-r--r-- | src/lj_opt_fold.c | 11 |
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; } |