@@ -370,19 +370,17 @@ static bool opline_supports_assign_contraction(
370370 return 1 ;
371371}
372372
373- static bool variable_redefined_in_range (zend_ssa * ssa , int var , int start , int end )
373+ static bool variable_defined_or_used_in_range (zend_ssa * ssa , int var , int start , int end )
374374{
375375 while (start < end ) {
376- if (ssa -> ops [start ].op1_def >= 0
377- && ssa -> vars [ssa -> ops [start ].op1_def ].var == var ) {
378- return 1 ;
379- }
380- if (ssa -> ops [start ].op2_def >= 0
381- && ssa -> vars [ssa -> ops [start ].op2_def ].var == var ) {
382- return 1 ;
383- }
384- if (ssa -> ops [start ].result_def >= 0
385- && ssa -> vars [ssa -> ops [start ].result_def ].var == var ) {
376+ const zend_ssa_op * ssa_op = & ssa -> ops [start ];
377+ if ((ssa_op -> op1_def >= 0 && ssa -> vars [ssa_op -> op1_def ].var == var ) ||
378+ (ssa_op -> op2_def >= 0 && ssa -> vars [ssa_op -> op2_def ].var == var ) ||
379+ (ssa_op -> result_def >= 0 && ssa -> vars [ssa_op -> result_def ].var == var ) ||
380+ (ssa_op -> op1_use >= 0 && ssa -> vars [ssa_op -> op1_use ].var == var ) ||
381+ (ssa_op -> op2_use >= 0 && ssa -> vars [ssa_op -> op2_use ].var == var ) ||
382+ (ssa_op -> result_use >= 0 && ssa -> vars [ssa_op -> result_use ].var == var )
383+ ) {
386384 return 1 ;
387385 }
388386 start ++ ;
@@ -1357,7 +1355,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
13571355 && opline_supports_assign_contraction (
13581356 ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
13591357 src_var , opline -> result .var )
1360- && !variable_redefined_in_range (ssa , EX_VAR_TO_NUM (opline -> result .var ),
1358+ && !variable_defined_or_used_in_range (ssa , EX_VAR_TO_NUM (opline -> result .var ),
13611359 ssa -> vars [src_var ].definition + 1 , op_1 )
13621360 ) {
13631361
@@ -1514,7 +1512,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
15141512 && opline_supports_assign_contraction (
15151513 ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
15161514 src_var , opline -> op1 .var )
1517- && !variable_redefined_in_range (ssa , EX_VAR_TO_NUM (opline -> op1 .var ),
1515+ && !variable_defined_or_used_in_range (ssa , EX_VAR_TO_NUM (opline -> op1 .var ),
15181516 ssa -> vars [src_var ].definition + 1 , op_1 )
15191517 ) {
15201518
0 commit comments