diff options
| author | Mike Pall <mike> | 2012-04-11 16:22:05 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2012-04-11 16:22:05 +0200 |
| commit | 3ed5172fe49ab9cd08e803c3bec1fc29492e24fe (patch) | |
| tree | d2ece70de48960d7f9b6c2f1e9be02959211b7bc /src | |
| parent | 39112fd6fb219ba3164bb26ae7b823d6cff5ac20 (diff) | |
| download | luajit-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.tar.gz luajit-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.tar.bz2 luajit-3ed5172fe49ab9cd08e803c3bec1fc29492e24fe.zip | |
Fix DSE of USTORE. Have to remove OBAR, too.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_opt_mem.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c index d64d2e6e..17e29569 100644 --- a/src/lj_opt_mem.c +++ b/src/lj_opt_mem.c | |||
| @@ -422,6 +422,19 @@ TRef LJ_FASTCALL lj_opt_dse_ustore(jit_State *J) | |||
| 422 | store->t.irt = IRT_NIL; | 422 | store->t.irt = IRT_NIL; |
| 423 | store->op1 = store->op2 = 0; | 423 | store->op1 = store->op2 = 0; |
| 424 | store->prev = 0; | 424 | store->prev = 0; |
| 425 | if (ref+1 < J->cur.nins && | ||
| 426 | store[1].o == IR_OBAR && store[1].op1 == xref) { | ||
| 427 | IRRef1 *bp = &J->chain[IR_OBAR]; | ||
| 428 | IRIns *obar; | ||
| 429 | for (obar = IR(*bp); *bp > ref+1; obar = IR(*bp)) | ||
| 430 | bp = &obar->prev; | ||
| 431 | /* Remove OBAR, too. */ | ||
| 432 | *bp = obar->prev; | ||
| 433 | obar->o = IR_NOP; | ||
| 434 | obar->t.irt = IRT_NIL; | ||
| 435 | obar->op1 = obar->op2 = 0; | ||
| 436 | obar->prev = 0; | ||
| 437 | } | ||
| 425 | /* Now emit the new store instead. */ | 438 | /* Now emit the new store instead. */ |
| 426 | } | 439 | } |
| 427 | goto doemit; | 440 | goto doemit; |
