@@ -345,19 +345,17 @@ static bool opline_supports_assign_contraction(
345
345
return 1 ;
346
346
}
347
347
348
- static bool variable_redefined_in_range (zend_ssa * ssa , int var , int start , int end )
348
+ static bool variable_defined_or_used_in_range (zend_ssa * ssa , int var , int start , int end )
349
349
{
350
350
while (start < end ) {
351
- if (ssa -> ops [start ].op1_def >= 0
352
- && ssa -> vars [ssa -> ops [start ].op1_def ].var == var ) {
353
- return 1 ;
354
- }
355
- if (ssa -> ops [start ].op2_def >= 0
356
- && ssa -> vars [ssa -> ops [start ].op2_def ].var == var ) {
357
- return 1 ;
358
- }
359
- if (ssa -> ops [start ].result_def >= 0
360
- && ssa -> vars [ssa -> ops [start ].result_def ].var == var ) {
351
+ const zend_ssa_op * ssa_op = & ssa -> ops [start ];
352
+ if ((ssa_op -> op1_def >= 0 && ssa -> vars [ssa_op -> op1_def ].var == var ) ||
353
+ (ssa_op -> op2_def >= 0 && ssa -> vars [ssa_op -> op2_def ].var == var ) ||
354
+ (ssa_op -> result_def >= 0 && ssa -> vars [ssa_op -> result_def ].var == var ) ||
355
+ (ssa_op -> op1_use >= 0 && ssa -> vars [ssa_op -> op1_use ].var == var ) ||
356
+ (ssa_op -> op2_use >= 0 && ssa -> vars [ssa_op -> op2_use ].var == var ) ||
357
+ (ssa_op -> result_use >= 0 && ssa -> vars [ssa_op -> result_use ].var == var )
358
+ ) {
361
359
return 1 ;
362
360
}
363
361
start ++ ;
@@ -1331,7 +1329,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1331
1329
&& opline_supports_assign_contraction (
1332
1330
ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
1333
1331
src_var , opline -> result .var )
1334
- && !variable_redefined_in_range (ssa , EX_VAR_TO_NUM (opline -> result .var ),
1332
+ && !variable_defined_or_used_in_range (ssa , EX_VAR_TO_NUM (opline -> result .var ),
1335
1333
ssa -> vars [src_var ].definition + 1 , op_1 )
1336
1334
) {
1337
1335
@@ -1490,7 +1488,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1490
1488
&& opline_supports_assign_contraction (
1491
1489
ssa , & op_array -> opcodes [ssa -> vars [src_var ].definition ],
1492
1490
src_var , opline -> op1 .var )
1493
- && !variable_redefined_in_range (ssa , EX_VAR_TO_NUM (opline -> op1 .var ),
1491
+ && !variable_defined_or_used_in_range (ssa , EX_VAR_TO_NUM (opline -> op1 .var ),
1494
1492
ssa -> vars [src_var ].definition + 1 , op_1 )
1495
1493
) {
1496
1494
0 commit comments