@@ -370,19 +370,17 @@ static bool opline_supports_assign_contraction(
370
370
return 1 ;
371
371
}
372
372
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 )
374
374
{
375
375
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
+ ) {
386
384
return 1 ;
387
385
}
388
386
start ++ ;
@@ -1357,7 +1355,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1357
1355
&& opline_supports_assign_contraction (
1358
1356
ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
1359
1357
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 ),
1361
1359
ssa -> vars [src_var ].definition + 1 , op_1 )
1362
1360
) {
1363
1361
@@ -1514,7 +1512,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1514
1512
&& opline_supports_assign_contraction (
1515
1513
ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
1516
1514
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 ),
1518
1516
ssa -> vars [src_var ].definition + 1 , op_1 )
1519
1517
) {
1520
1518
0 commit comments