summaryrefslogtreecommitdiff
path: root/src/lj_opt_sink.c
diff options
context:
space:
mode:
authorMike Pall <mike>2016-06-05 12:53:37 +0200
committerMike Pall <mike>2016-06-05 12:53:37 +0200
commita7bec69a7593b2887a6d1d8dd13272aa005c36fa (patch)
treed4271ce7cbfeef0e3e21b8de59fc07abc5c9da73 /src/lj_opt_sink.c
parent32063075636d4f4017f318fc0a367dd49c730895 (diff)
downloadluajit2-a7bec69a7593b2887a6d1d8dd13272aa005c36fa.tar.gz
Fix PHI remarking in SINK pass.
Thanks to Vyacheslav Egorov.
Diffstat (limited to 'src/lj_opt_sink.c')
-rw-r--r--src/lj_opt_sink.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/lj_opt_sink.c b/src/lj_opt_sink.c
index 975ee831..c988cdfb 100644
--- a/src/lj_opt_sink.c
+++ b/src/lj_opt_sink.c
@@ -153,10 +153,9 @@ static void sink_remark_phi(jit_State *J)
remark = 0;
for (ir = IR(J->cur.nins-1); ir->o == IR_PHI; ir--) {
IRIns *irl = IR(ir->op1), *irr = IR(ir->op2);
- if (((irl->t.irt ^ irr->t.irt) & IRT_MARK))
- remark = 1;
- else if (irl->prev == irr->prev)
+ if (!((irl->t.irt ^ irr->t.irt) & IRT_MARK) && irl->prev == irr->prev)
continue;
+ remark |= (~(irl->t.irt & irr->t.irt) & IRT_MARK);
irt_setmark(IR(ir->op1)->t);
irt_setmark(IR(ir->op2)->t);
}