@@ -360,19 +360,17 @@ static zend_bool opline_supports_assign_contraction(
360
360
return 1 ;
361
361
}
362
362
363
- static bool variable_redefined_in_range (zend_ssa * ssa , int var , int start , int end )
363
+ static bool variable_defined_or_used_in_range (zend_ssa * ssa , int var , int start , int end )
364
364
{
365
365
while (start < end ) {
366
- if (ssa -> ops [start ].op1_def >= 0
367
- && ssa -> vars [ssa -> ops [start ].op1_def ].var == var ) {
368
- return 1 ;
369
- }
370
- if (ssa -> ops [start ].op2_def >= 0
371
- && ssa -> vars [ssa -> ops [start ].op2_def ].var == var ) {
372
- return 1 ;
373
- }
374
- if (ssa -> ops [start ].result_def >= 0
375
- && ssa -> vars [ssa -> ops [start ].result_def ].var == var ) {
366
+ const zend_ssa_op * ssa_op = & ssa -> ops [start ];
367
+ if ((ssa_op -> op1_def >= 0 && ssa -> vars [ssa_op -> op1_def ].var == var ) ||
368
+ (ssa_op -> op2_def >= 0 && ssa -> vars [ssa_op -> op2_def ].var == var ) ||
369
+ (ssa_op -> result_def >= 0 && ssa -> vars [ssa_op -> result_def ].var == var ) ||
370
+ (ssa_op -> op1_use >= 0 && ssa -> vars [ssa_op -> op1_use ].var == var ) ||
371
+ (ssa_op -> op2_use >= 0 && ssa -> vars [ssa_op -> op2_use ].var == var ) ||
372
+ (ssa_op -> result_use >= 0 && ssa -> vars [ssa_op -> result_use ].var == var )
373
+ ) {
376
374
return 1 ;
377
375
}
378
376
start ++ ;
@@ -1310,7 +1308,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1310
1308
&& opline_supports_assign_contraction (
1311
1309
ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
1312
1310
src_var , opline -> result .var )
1313
- && !variable_redefined_in_range (ssa , EX_VAR_TO_NUM (opline -> result .var ),
1311
+ && !variable_defined_or_used_in_range (ssa , EX_VAR_TO_NUM (opline -> result .var ),
1314
1312
ssa -> vars [src_var ].definition + 1 , op_1 )
1315
1313
) {
1316
1314
@@ -1467,7 +1465,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1467
1465
&& opline_supports_assign_contraction (
1468
1466
ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
1469
1467
src_var , opline -> op1 .var )
1470
- && !variable_redefined_in_range (ssa , EX_VAR_TO_NUM (opline -> op1 .var ),
1468
+ && !variable_defined_or_used_in_range (ssa , EX_VAR_TO_NUM (opline -> op1 .var ),
1471
1469
ssa -> vars [src_var ].definition + 1 , op_1 )
1472
1470
) {
1473
1471
0 commit comments