Skip to content

Commit 5197d0c

Browse files
committed
Reduced number of CFG pass iterations
1 parent 6daa54d commit 5197d0c

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

ext/opcache/Optimizer/block_pass.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,15 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
537537
MAKE_NOP(opline);
538538
block->successors[0] = block->successors[1];
539539
block->len--;
540+
cfg->blocks[block->successors[0]].flags |= ZEND_BB_FOLLOW;
540541
break;
541542
} else {
543+
zend_basic_block *next = cfg->blocks + block->successors[1];
544+
545+
next->flags &= ~ZEND_BB_FOLLOW;
546+
if (!(next->flags & (ZEND_BB_TARGET|ZEND_BB_PROTECTED))) {
547+
next->flags &= ~ZEND_BB_REACHABLE;
548+
}
542549
opline->opcode = ZEND_JMP;
543550
COPY_NODE(opline->op1, opline->op2);
544551
break;
@@ -630,6 +637,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
630637
opline->op2.num = 0;
631638
block->successors_count = 1;
632639
block->successors[0] = block->successors[1];
640+
cfg->blocks[block->successors[0]].flags |= ZEND_BB_FOLLOW;
633641
break;
634642
}
635643
} else if (opline->op1_type == IS_TMP_VAR &&
@@ -1855,6 +1863,8 @@ void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx)
18551863
}
18561864
}
18571865

1866+
opt_count = 0;
1867+
18581868
/* Jump optimization for each block */
18591869
for (b = blocks; b < end; b++) {
18601870
if (b->flags & ZEND_BB_REACHABLE) {
@@ -1873,8 +1883,6 @@ void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx)
18731883
}
18741884
}
18751885

1876-
zend_bitset_clear(usage, bitset_len);
1877-
zend_t_usage(&cfg, op_array, usage, ctx);
18781886
assemble_code_blocks(&cfg, op_array, ctx);
18791887

18801888
if (ctx->debug_level & ZEND_DUMP_AFTER_BLOCK_PASS) {

0 commit comments

Comments
 (0)