summaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-03-07 20:21:38 +0100
committerMike Pall <mike>2011-03-07 20:21:38 +0100
commit54978e481befa5988df1dc3edc76c9467d5c47b4 (patch)
tree5095152718f54b08f0f4d3f9fe4f566a4c5ee590 /src/lj_opt_fold.c
parenta30f58b54ba645ec0b1efe7087f615451033eb38 (diff)
downloadluajit-54978e481befa5988df1dc3edc76c9467d5c47b4.tar.gz
luajit-54978e481befa5988df1dc3edc76c9467d5c47b4.tar.bz2
luajit-54978e481befa5988df1dc3edc76c9467d5c47b4.zip
DUALNUM: Make overflow guards weak. Add IR_USE and IR_MULOV.
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r--src/lj_opt_fold.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index e7a1ca54..495b784d 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -247,6 +247,19 @@ LJFOLDF(kfold_intarith)
247 return INTFOLD(kfold_intop(fleft->i, fright->i, (IROp)fins->o)); 247 return INTFOLD(kfold_intop(fleft->i, fright->i, (IROp)fins->o));
248} 248}
249 249
250LJFOLD(ADDOV KINT KINT)
251LJFOLD(SUBOV KINT KINT)
252LJFOLD(MULOV KINT KINT)
253LJFOLDF(kfold_intovarith)
254{
255 lua_Number n = lj_vm_foldarith((lua_Number)fleft->i, (lua_Number)fright->i,
256 fins->o - IR_ADDOV);
257 int32_t k = lj_num2int(n);
258 if (n != (lua_Number)k)
259 return FAILFOLD;
260 return INTFOLD(k);
261}
262
250LJFOLD(BNOT KINT) 263LJFOLD(BNOT KINT)
251LJFOLDF(kfold_bnot) 264LJFOLDF(kfold_bnot)
252{ 265{
@@ -992,6 +1005,21 @@ LJFOLDF(simplify_intadd_k)
992 return NEXTFOLD; 1005 return NEXTFOLD;
993} 1006}
994 1007
1008LJFOLD(MULOV any KINT)
1009LJFOLDF(simplify_intmul_k)
1010{
1011 if (fright->i == 0) /* i * 0 ==> 0 */
1012 return RIGHTFOLD;
1013 if (fright->i == 1) /* i * 1 ==> i */
1014 return LEFTFOLD;
1015 if (fright->i == 2) { /* i * 2 ==> i + i */
1016 fins->o = IR_ADDOV;
1017 fins->op2 = fins->op1;
1018 return RETRYFOLD;
1019 }
1020 return NEXTFOLD;
1021}
1022
995LJFOLD(SUB any KINT) 1023LJFOLD(SUB any KINT)
996LJFOLDF(simplify_intsub_k) 1024LJFOLDF(simplify_intsub_k)
997{ 1025{
@@ -1484,6 +1512,7 @@ LJFOLDF(abc_invar)
1484LJFOLD(ADD any any) 1512LJFOLD(ADD any any)
1485LJFOLD(MUL any any) 1513LJFOLD(MUL any any)
1486LJFOLD(ADDOV any any) 1514LJFOLD(ADDOV any any)
1515LJFOLD(MULOV any any)
1487LJFOLDF(comm_swap) 1516LJFOLDF(comm_swap)
1488{ 1517{
1489 if (fins->op1 < fins->op2) { /* Move lower ref to the right. */ 1518 if (fins->op1 < fins->op2) { /* Move lower ref to the right. */