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) |
