@@ -1520,6 +1520,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1520
1520
/* break missing intentionally */
1521
1521
case ZEND_ASSIGN_DIM :
1522
1522
if (opline -> op1_type == IS_CV ) {
1523
+ if ((opline + 1 )-> op1_type == IS_CV
1524
+ && (opline + 1 )-> op1 .var == opline -> op1 .var ) {
1525
+ /* skip $a[x] = $a; */
1526
+ break ;
1527
+ }
1523
1528
ADD_OP1_DATA_TRACE_GUARD ();
1524
1529
ADD_OP2_TRACE_GUARD ();
1525
1530
ADD_OP1_TRACE_GUARD ();
@@ -1553,6 +1558,12 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1553
1558
break ;
1554
1559
}
1555
1560
if (opline -> opcode == ZEND_ASSIGN_OBJ_OP ) {
1561
+ if (opline -> op1_type == IS_CV
1562
+ && (opline + 1 )-> op1_type == IS_CV
1563
+ && (opline + 1 )-> op1 .var == opline -> op1 .var ) {
1564
+ /* skip $a->prop += $a; */
1565
+ break ;
1566
+ }
1556
1567
ADD_OP1_DATA_TRACE_GUARD ();
1557
1568
}
1558
1569
ADD_OP1_TRACE_GUARD ();
@@ -4219,6 +4230,12 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4219
4230
opline -> extended_value , MAY_BE_ANY , OP1_DATA_INFO ())) {
4220
4231
break ;
4221
4232
}
4233
+ if (opline -> op1_type == IS_CV
4234
+ && (opline + 1 )-> op1_type == IS_CV
4235
+ && (opline + 1 )-> op1 .var == opline -> op1 .var ) {
4236
+ /* skip $a[x] += $a; */
4237
+ break ;
4238
+ }
4222
4239
op1_info = OP1_INFO ();
4223
4240
op1_addr = OP1_REG_ADDR ();
4224
4241
if (opline -> op1_type == IS_VAR ) {
@@ -4336,6 +4353,12 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4336
4353
|| Z_STRVAL_P (RT_CONSTANT (opline , opline -> op2 ))[0 ] == '\0' ) {
4337
4354
break ;
4338
4355
}
4356
+ if (opline -> op1_type == IS_CV
4357
+ && (opline + 1 )-> op1_type == IS_CV
4358
+ && (opline + 1 )-> op1 .var == opline -> op1 .var ) {
4359
+ /* skip $a->prop += $a; */
4360
+ break ;
4361
+ }
4339
4362
if (!zend_jit_supported_binary_op (
4340
4363
opline -> extended_value , MAY_BE_ANY , OP1_DATA_INFO ())) {
4341
4364
break ;
@@ -4480,6 +4503,12 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4480
4503
case ZEND_ASSIGN_DIM :
4481
4504
op1_info = OP1_INFO ();
4482
4505
op1_addr = OP1_REG_ADDR ();
4506
+ if (opline -> op1_type == IS_CV
4507
+ && (opline + 1 )-> op1_type == IS_CV
4508
+ && (opline + 1 )-> op1 .var == opline -> op1 .var ) {
4509
+ /* skip $a[x] = $a; */
4510
+ break ;
4511
+ }
4483
4512
if (opline -> op1_type == IS_VAR ) {
4484
4513
if (orig_op1_type != IS_UNKNOWN
4485
4514
&& (orig_op1_type & IS_TRACE_INDIRECT )
0 commit comments