@@ -174,8 +174,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
174174 while (opline < end ) {
175175 /* Constant Propagation: strip X = QM_ASSIGN(const) */
176176 if ((opline -> op1_type & (IS_TMP_VAR |IS_VAR )) &&
177- opline -> opcode != ZEND_FREE &&
178- !zend_bitset_in (used_ext , VAR_NUM (opline -> op1 .var ))) {
177+ opline -> opcode != ZEND_FREE ) {
179178 src = VAR_SOURCE (opline -> op1 );
180179 if (src &&
181180 src -> opcode == ZEND_QM_ASSIGN &&
@@ -197,65 +196,14 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
197196 literal_dtor (& ZEND_OP1_LITERAL (src ));
198197 MAKE_NOP (src );
199198 } else {
200- zend_op * target_opline ;
201-
202- switch (opline -> opcode ) {
203- case ZEND_JMPZ :
204- if (zend_is_true (& c )) {
205- MAKE_NOP (opline );
206- DEL_SOURCE (block , block -> successors [0 ]);
207- block -> successors_count = 1 ;
208- block -> successors [0 ] = block -> successors [1 ];
209- } else {
210- opline -> opcode = ZEND_JMP ;
211- COPY_NODE (opline -> op1 , opline -> op2 );
212- opline -> op2_type = IS_UNUSED ;
213- DEL_SOURCE (block , block -> successors [1 ]);
214- block -> successors_count = 1 ;
215- }
216- break ;
217- case ZEND_JMPNZ :
218- if (zend_is_true (& c )) {
219- opline -> opcode = ZEND_JMP ;
220- COPY_NODE (opline -> op1 , opline -> op2 );
221- opline -> op2_type = IS_UNUSED ;
222- DEL_SOURCE (block , block -> successors [1 ]);
223- block -> successors_count = 1 ;
224- } else {
225- MAKE_NOP (opline );
226- DEL_SOURCE (block , block -> successors [0 ]);
227- block -> successors_count = 1 ;
228- block -> successors [0 ] = block -> successors [1 ];
229- }
230- break ;
231- case ZEND_JMPZNZ :
232- if (zend_is_true (& c )) {
233- target_opline = ZEND_OFFSET_TO_OPLINE (opline , opline -> extended_value );
234- DEL_SOURCE (block , block -> successors [0 ]);
235- block -> successors_count = 1 ;
236- block -> successors [0 ] = block -> successors [1 ];
237- } else {
238- target_opline = ZEND_OP2_JMP_ADDR (opline );
239- DEL_SOURCE (block , block -> successors [1 ]);
240- block -> successors_count = 1 ;
241- }
242- ZEND_SET_OP_JMP_ADDR (opline , opline -> op1 , target_opline );
243- opline -> op1_type = IS_UNUSED ;
244- opline -> extended_value = 0 ;
245- opline -> opcode = ZEND_JMP ;
246- break ;
247- default :
248- break ;
249- }
250199 zval_ptr_dtor_nogc (& c );
251200 }
252201 }
253202 }
254203 }
255204
256205 /* Constant Propagation: strip X = QM_ASSIGN(const) */
257- if ((opline -> op2_type & (IS_TMP_VAR |IS_VAR )) &&
258- !zend_bitset_in (used_ext , VAR_NUM (opline -> op2 .var ))) {
206+ if (opline -> op2_type & (IS_TMP_VAR |IS_VAR )) {
259207 src = VAR_SOURCE (opline -> op2 );
260208 if (src &&
261209 src -> opcode == ZEND_QM_ASSIGN &&
0 commit comments