mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-04-20 05:53:26 +00:00
Add more FOLD rules for integer conversions.
Thanks to Peter Cawley. #1246
This commit is contained in:
parent
833600390c
commit
2d54213e7c
@ -1135,7 +1135,7 @@ LJFOLDF(shortcut_conv_num_int)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LJFOLD(CONV CONV IRCONV_INT_NUM) /* _INT */
|
LJFOLD(CONV CONV IRCONV_INT_NUM) /* _INT */
|
||||||
LJFOLD(CONV CONV IRCONV_U32_NUM) /* _U32*/
|
LJFOLD(CONV CONV IRCONV_U32_NUM) /* _U32 */
|
||||||
LJFOLDF(simplify_conv_int_num)
|
LJFOLDF(simplify_conv_int_num)
|
||||||
{
|
{
|
||||||
/* Fold even across PHI to avoid expensive num->int conversions in loop. */
|
/* Fold even across PHI to avoid expensive num->int conversions in loop. */
|
||||||
@ -1170,8 +1170,10 @@ LJFOLDF(simplify_conv_i64_num)
|
|||||||
|
|
||||||
LJFOLD(CONV CONV IRCONV_INT_I64) /* _INT or _U32 */
|
LJFOLD(CONV CONV IRCONV_INT_I64) /* _INT or _U32 */
|
||||||
LJFOLD(CONV CONV IRCONV_INT_U64) /* _INT or _U32 */
|
LJFOLD(CONV CONV IRCONV_INT_U64) /* _INT or _U32 */
|
||||||
|
LJFOLD(CONV CONV IRCONV_INT_U32) /* _INT or _U32 */
|
||||||
LJFOLD(CONV CONV IRCONV_U32_I64) /* _INT or _U32 */
|
LJFOLD(CONV CONV IRCONV_U32_I64) /* _INT or _U32 */
|
||||||
LJFOLD(CONV CONV IRCONV_U32_U64) /* _INT or _U32 */
|
LJFOLD(CONV CONV IRCONV_U32_U64) /* _INT or _U32 */
|
||||||
|
LJFOLD(CONV CONV IRCONV_U32_INT) /* _INT or _U32 */
|
||||||
LJFOLDF(simplify_conv_int_i64)
|
LJFOLDF(simplify_conv_int_i64)
|
||||||
{
|
{
|
||||||
int src;
|
int src;
|
||||||
@ -1216,14 +1218,13 @@ LJFOLDF(simplify_tobit_conv)
|
|||||||
return NEXTFOLD;
|
return NEXTFOLD;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Shortcut floor/ceil/round + IRT_NUM <- IRT_INT/IRT_U32 conversion. */
|
/* Shortcut floor/ceil/trunc + IRT_NUM <- integer conversion. */
|
||||||
LJFOLD(FPMATH CONV IRFPM_FLOOR)
|
LJFOLD(FPMATH CONV IRFPM_FLOOR)
|
||||||
LJFOLD(FPMATH CONV IRFPM_CEIL)
|
LJFOLD(FPMATH CONV IRFPM_CEIL)
|
||||||
LJFOLD(FPMATH CONV IRFPM_TRUNC)
|
LJFOLD(FPMATH CONV IRFPM_TRUNC)
|
||||||
LJFOLDF(simplify_floor_conv)
|
LJFOLDF(simplify_floor_conv)
|
||||||
{
|
{
|
||||||
if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT ||
|
if ((uint32_t)(fleft->op2 & IRCONV_SRCMASK) - (uint32_t)IRT_I8 <= (uint32_t)(IRT_U64 - IRT_U8))
|
||||||
(fleft->op2 & IRCONV_SRCMASK) == IRT_U32)
|
|
||||||
return LEFTFOLD;
|
return LEFTFOLD;
|
||||||
return NEXTFOLD;
|
return NEXTFOLD;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user