@@ -4134,8 +4134,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4134
4134
goto jit_failure ;
4135
4135
}
4136
4136
if (opline -> op1_type == IS_CV
4137
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
4138
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
4137
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4138
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4139
4139
}
4140
4140
} else {
4141
4141
CHECK_OP1_TRACE_TYPE ();
@@ -4196,8 +4196,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4196
4196
goto jit_failure ;
4197
4197
}
4198
4198
if (opline -> op1_type == IS_CV
4199
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
4200
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
4199
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4200
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4201
4201
}
4202
4202
} else {
4203
4203
CHECK_OP1_TRACE_TYPE ();
@@ -4268,8 +4268,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4268
4268
goto jit_failure ;
4269
4269
}
4270
4270
if (opline -> op1_type == IS_CV
4271
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
4272
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
4271
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4272
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4273
4273
}
4274
4274
} else {
4275
4275
CHECK_OP1_TRACE_TYPE ();
@@ -4334,8 +4334,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4334
4334
goto jit_failure ;
4335
4335
}
4336
4336
if (opline -> op1_type == IS_CV
4337
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
4338
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
4337
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4338
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4339
4339
}
4340
4340
} else {
4341
4341
CHECK_OP1_TRACE_TYPE ();
@@ -4358,6 +4358,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4358
4358
zend_may_throw (opline , ssa_op , op_array , ssa ))) {
4359
4359
goto jit_failure ;
4360
4360
}
4361
+ if ((opline + 1 )-> op1_type == IS_CV
4362
+ && (ssa_op + 1 )-> op1_def >= 0
4363
+ && ssa -> vars [(ssa_op + 1 )-> op1_def ].alias == NO_ALIAS ) {
4364
+ ssa -> var_info [(ssa_op + 1 )-> op1_def ].guarded_reference = ssa -> var_info [(ssa_op + 1 )-> op1_use ].guarded_reference ;
4365
+ }
4361
4366
goto done ;
4362
4367
case ZEND_ASSIGN_DIM :
4363
4368
op1_info = OP1_INFO ();
@@ -4381,8 +4386,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4381
4386
goto jit_failure ;
4382
4387
}
4383
4388
if (opline -> op1_type == IS_CV
4384
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
4385
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
4389
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4390
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4386
4391
}
4387
4392
} else {
4388
4393
CHECK_OP1_TRACE_TYPE ();
@@ -4396,6 +4401,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4396
4401
zend_may_throw_ex (opline , ssa_op , op_array , ssa , op1_info , op2_info ))) {
4397
4402
goto jit_failure ;
4398
4403
}
4404
+ if ((opline + 1 )-> op1_type == IS_CV
4405
+ && (ssa_op + 1 )-> op1_def >= 0
4406
+ && ssa -> vars [(ssa_op + 1 )-> op1_def ].alias == NO_ALIAS ) {
4407
+ ssa -> var_info [(ssa_op + 1 )-> op1_def ].guarded_reference = ssa -> var_info [(ssa_op + 1 )-> op1_use ].guarded_reference ;
4408
+ }
4399
4409
goto done ;
4400
4410
case ZEND_ASSIGN :
4401
4411
if (opline -> op1_type != IS_CV ) {
@@ -4422,8 +4432,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4422
4432
goto jit_failure ;
4423
4433
}
4424
4434
if (opline -> op1_type == IS_CV
4425
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
4426
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
4435
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4436
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4427
4437
}
4428
4438
if (!zend_jit_assign_to_typed_ref (& dasm_state , opline , opline -> op2_type , op2_addr , 1 )) {
4429
4439
goto jit_failure ;
@@ -4488,6 +4498,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4488
4498
zend_may_throw_ex (opline , ssa_op , op_array , ssa , op1_info , op2_info ))) {
4489
4499
goto jit_failure ;
4490
4500
}
4501
+ if (opline -> op2_type == IS_CV
4502
+ && ssa_op -> op2_def >= 0
4503
+ && ssa -> vars [ssa_op -> op2_def ].alias == NO_ALIAS ) {
4504
+ ssa -> var_info [ssa_op -> op2_def ].guarded_reference = ssa -> var_info [ssa_op -> op2_use ].guarded_reference ;
4505
+ }
4491
4506
goto done ;
4492
4507
case ZEND_CAST :
4493
4508
if (opline -> extended_value != op1_type ) {
@@ -4518,6 +4533,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4518
4533
res_use_info , res_info , RES_REG_ADDR ())) {
4519
4534
goto jit_failure ;
4520
4535
}
4536
+ if (opline -> op1_type == IS_CV
4537
+ && ssa_op -> op1_def >= 0
4538
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4539
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = ssa -> var_info [ssa_op -> op1_use ].guarded_reference ;
4540
+ }
4521
4541
goto done ;
4522
4542
case ZEND_INIT_FCALL :
4523
4543
case ZEND_INIT_FCALL_BY_NAME :
@@ -4566,6 +4586,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4566
4586
op1_info , 0 )) {
4567
4587
goto jit_failure ;
4568
4588
}
4589
+ if (opline -> op1_type == IS_CV
4590
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4591
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
4592
+ }
4569
4593
goto done ;
4570
4594
case ZEND_SEND_VAR :
4571
4595
case ZEND_SEND_VAR_EX :
@@ -4595,6 +4619,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4595
4619
op1_info , op1_addr , op1_def_addr )) {
4596
4620
goto jit_failure ;
4597
4621
}
4622
+ if (opline -> op1_type == IS_CV
4623
+ && ssa_op -> op1_def >= 0
4624
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
4625
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = ssa -> var_info [ssa_op -> op1_use ].guarded_reference ;
4626
+ }
4598
4627
if (frame -> call
4599
4628
&& frame -> call -> func
4600
4629
&& frame -> call -> func -> type == ZEND_USER_FUNCTION ) {
@@ -5096,8 +5125,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5096
5125
goto jit_failure ;
5097
5126
}
5098
5127
if (opline -> op1_type == IS_CV
5099
- && ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
5100
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
5128
+ && ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
5129
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
5101
5130
}
5102
5131
} else {
5103
5132
CHECK_OP1_TRACE_TYPE ();
@@ -5251,7 +5280,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5251
5280
}
5252
5281
if (opline -> op1_type == IS_CV
5253
5282
&& ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
5254
- ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
5283
+ ssa -> var_info [ssa_op -> op1_def >= 0 ? ssa_op -> op1_def : ssa_op -> op1_use ].guarded_reference = 1 ;
5255
5284
}
5256
5285
} else {
5257
5286
CHECK_OP1_TRACE_TYPE ();
@@ -5289,6 +5318,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5289
5318
} else {
5290
5319
op1_info = OP1_INFO ();
5291
5320
}
5321
+ if (ssa -> vars [ssa_op -> op1_def ].alias == NO_ALIAS ) {
5322
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
5323
+ }
5292
5324
if (!zend_jit_bind_global (& dasm_state , opline , op1_info )) {
5293
5325
goto jit_failure ;
5294
5326
}
0 commit comments