diff options
Diffstat (limited to 'ext/opcache/Optimizer/zend_dfg.c')
-rw-r--r-- | ext/opcache/Optimizer/zend_dfg.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/ext/opcache/Optimizer/zend_dfg.c b/ext/opcache/Optimizer/zend_dfg.c index c1972128d5..abc9b3a1f5 100644 --- a/ext/opcache/Optimizer/zend_dfg.c +++ b/ext/opcache/Optimizer/zend_dfg.c @@ -26,7 +26,6 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg zend_basic_block *blocks = cfg->blocks; int blocks_count = cfg->blocks_count; zend_bitset tmp, def, use, in, out; - zend_op *opline; uint32_t k, var_num; int j; @@ -39,15 +38,17 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg /* Collect "def" and "use" sets */ for (j = 0; j < blocks_count; j++) { + zend_op *opline, *end; if ((blocks[j].flags & ZEND_BB_REACHABLE) == 0) { continue; } - for (k = blocks[j].start; k <= blocks[j].end; k++) { - opline = op_array->opcodes + k; + + opline = op_array->opcodes + blocks[j].start; + end = opline + blocks[j].len; + for (; opline < end; opline++) { if (opline->opcode != ZEND_OP_DATA) { zend_op *next = opline + 1; - if (k < blocks[j].end && - next->opcode == ZEND_OP_DATA) { + if (next < end && next->opcode == ZEND_OP_DATA) { if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) { var_num = EX_VAR_TO_NUM(next->op1.var); if (!DFG_ISSET(def, set_size, j, var_num)) { |