@@ -537,8 +537,15 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
537
537
MAKE_NOP (opline );
538
538
block -> successors [0 ] = block -> successors [1 ];
539
539
block -> len -- ;
540
+ cfg -> blocks [block -> successors [0 ]].flags |= ZEND_BB_FOLLOW ;
540
541
break ;
541
542
} 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
+ }
542
549
opline -> opcode = ZEND_JMP ;
543
550
COPY_NODE (opline -> op1 , opline -> op2 );
544
551
break ;
@@ -630,6 +637,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
630
637
opline -> op2 .num = 0 ;
631
638
block -> successors_count = 1 ;
632
639
block -> successors [0 ] = block -> successors [1 ];
640
+ cfg -> blocks [block -> successors [0 ]].flags |= ZEND_BB_FOLLOW ;
633
641
break ;
634
642
}
635
643
} 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)
1855
1863
}
1856
1864
}
1857
1865
1866
+ opt_count = 0 ;
1867
+
1858
1868
/* Jump optimization for each block */
1859
1869
for (b = blocks ; b < end ; b ++ ) {
1860
1870
if (b -> flags & ZEND_BB_REACHABLE ) {
@@ -1873,8 +1883,6 @@ void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx)
1873
1883
}
1874
1884
}
1875
1885
1876
- zend_bitset_clear (usage , bitset_len );
1877
- zend_t_usage (& cfg , op_array , usage , ctx );
1878
1886
assemble_code_blocks (& cfg , op_array , ctx );
1879
1887
1880
1888
if (ctx -> debug_level & ZEND_DUMP_AFTER_BLOCK_PASS ) {
0 commit comments