From abf16c18c77815b310af9528106d0c76eb8a81ab Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 17 Apr 2017 12:17:32 +0200 Subject: Fix loop identification When assigning loop headers, we should treat already detected loops as collapsed to their loop header, instead of ignoring them. This fixes the loop header of BB2 in mandel2 if live-range CFG splitting is enabled. --- ext/opcache/Optimizer/zend_cfg.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index 1e9bfe47bc..ec7116691e 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -855,7 +855,10 @@ int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg, uint32 } while (zend_worklist_len(&work)) { j = zend_worklist_pop(&work); - if (blocks[j].loop_header < 0 && j != i) { + while (blocks[j].loop_header >= 0) { + j = blocks[j].loop_header; + } + if (j != i) { blocks[j].loop_header = i; for (k = 0; k < blocks[j].predecessors_count; k++) { zend_worklist_push(&work, cfg->predecessors[blocks[j].predecessor_offset + k]); -- cgit v1.2.1