Skip to content

Commit 8b31f8a

Browse files
committed
Merge branch 'master' into jit-dynasm
* master: Fixed edge-case in SSA use/def chain construction and type inference.
2 parents b8265fb + 6b8f83a commit 8b31f8a

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

ext/opcache/Optimizer/zend_ssa.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,13 @@ END_EXTERN_C()
188188
static zend_always_inline int zend_ssa_next_use(const zend_ssa_op *ssa_op, int var, int use)
189189
{
190190
ssa_op += use;
191-
if (ssa_op->result_use == var) {
191+
if (ssa_op->op1_use == var) {
192+
return ssa_op->op1_use_chain;
193+
} else if (ssa_op->op2_use == var) {
194+
return ssa_op->op2_use_chain;
195+
} else {
192196
return ssa_op->res_use_chain;
193197
}
194-
return (ssa_op->op1_use == var) ? ssa_op->op1_use_chain : ssa_op->op2_use_chain;
195198
}
196199

197200
static zend_always_inline zend_ssa_phi* zend_ssa_next_use_phi(const zend_ssa *ssa, int var, const zend_ssa_phi *p)
@@ -218,7 +221,7 @@ static zend_always_inline zend_bool zend_ssa_is_no_val_use(const zend_op *opline
218221
return ssa_op->op2_use == var && ssa_op->op1_use != var;
219222
}
220223
if (ssa_op->result_use == var && opline->opcode != ZEND_ADD_ARRAY_ELEMENT) {
221-
return 1;
224+
return ssa_op->op1_use != var && ssa_op->op2_use != var;
222225
}
223226
return 0;
224227
}

0 commit comments

Comments
 (0)