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 /src | |
parent | 5c0e33c2aaf101aba623d7ebf1282989a8e0d114 (diff) | |
download | luajit-1f578bd424b4499a1d63f4ef3c2647ca0836b877.tar.gz luajit-1f578bd424b4499a1d63f4ef3c2647ca0836b877.tar.bz2 luajit-1f578bd424b4499a1d63f4ef3c2647ca0836b877.zip |
FFI: Fix FOLD rule for TOBIT + CONV num.u32.
Thanks to Jiale Zhi.
Diffstat (limited to 'src')
-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) | |||
1006 | LJFOLD(TOBIT CONV KNUM) | 1006 | LJFOLD(TOBIT CONV KNUM) |
1007 | LJFOLDF(simplify_tobit_conv) | 1007 | LJFOLDF(simplify_tobit_conv) |
1008 | { | 1008 | { |
1009 | if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT || | 1009 | /* Fold even across PHI to avoid expensive num->int conversions in loop. */ |
1010 | (fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { | 1010 | if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT) { |
1011 | /* Fold even across PHI to avoid expensive num->int conversions in loop. */ | ||
1012 | lua_assert(irt_isnum(fleft->t)); | 1011 | lua_assert(irt_isnum(fleft->t)); |
1013 | return fleft->op1; | 1012 | return fleft->op1; |
1013 | } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { | ||
1014 | lua_assert(irt_isnum(fleft->t)); | ||
1015 | fins->o = IR_CONV; | ||
1016 | fins->op1 = fleft->op1; | ||
1017 | fins->op2 = (IRT_INT<<5)|IRT_U32; | ||
1018 | return RETRYFOLD; | ||
1014 | } | 1019 | } |
1015 | return NEXTFOLD; | 1020 | return NEXTFOLD; |
1016 | } | 1021 | } |