diff options
author | Mike Pall <mike> | 2011-10-25 21:16:27 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-10-25 21:16:27 +0200 |
commit | 455917fa0a0b9db21936a4f68994ea6b1134d027 (patch) | |
tree | 1238c88ac42409d1a577a1932b46af05fa4c69de /src | |
parent | 17cb366fc9e1cd07bfd091a6bfa8dd370aa573a4 (diff) | |
download | luajit-455917fa0a0b9db21936a4f68994ea6b1134d027.tar.gz luajit-455917fa0a0b9db21936a4f68994ea6b1134d027.tar.bz2 luajit-455917fa0a0b9db21936a4f68994ea6b1134d027.zip |
Add more FOLD rules for shift + BAND simplifications.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_opt_fold.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 2a388278..e7d4f9cd 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -1402,6 +1402,36 @@ LJFOLDF(simplify_shift2_ki) | |||
1402 | return NEXTFOLD; | 1402 | return NEXTFOLD; |
1403 | } | 1403 | } |
1404 | 1404 | ||
1405 | LJFOLD(BSHL BAND KINT) | ||
1406 | LJFOLD(BSHR BAND KINT) | ||
1407 | LJFOLD(BROL BAND KINT) | ||
1408 | LJFOLD(BROR BAND KINT) | ||
1409 | LJFOLDF(simplify_shiftk_andk) | ||
1410 | { | ||
1411 | IRIns *irk = IR(fleft->op2); | ||
1412 | PHIBARRIER(fleft); | ||
1413 | if (irk->o == IR_KINT) { /* (i & k1) o k2 ==> (i o k2) & (k1 o k2) */ | ||
1414 | int32_t k = kfold_intop(irk->i, fright->i, (IROp)fins->o); | ||
1415 | fins->op1 = fleft->op1; | ||
1416 | fins->op1 = (IRRef1)lj_opt_fold(J); | ||
1417 | fins->op2 = (IRRef1)lj_ir_kint(J, k); | ||
1418 | fins->ot = IRTI(IR_BAND); | ||
1419 | return RETRYFOLD; | ||
1420 | } | ||
1421 | return NEXTFOLD; | ||
1422 | } | ||
1423 | |||
1424 | LJFOLD(BAND BSHL KINT) | ||
1425 | LJFOLD(BAND BSHR KINT) | ||
1426 | LJFOLDF(simplify_andk_shiftk) | ||
1427 | { | ||
1428 | IRIns *irk = IR(fleft->op2); | ||
1429 | if (irk->o == IR_KINT && | ||
1430 | kfold_intop(-1, irk->i, (IROp)fleft->o) == fright->i) | ||
1431 | return LEFTFOLD; /* (i o k1) & k2 ==> i, if (-1 o k1) == k2 */ | ||
1432 | return NEXTFOLD; | ||
1433 | } | ||
1434 | |||
1405 | /* -- Reassociation ------------------------------------------------------- */ | 1435 | /* -- Reassociation ------------------------------------------------------- */ |
1406 | 1436 | ||
1407 | LJFOLD(ADD ADD KINT) | 1437 | LJFOLD(ADD ADD KINT) |