@@ -363,15 +363,6 @@ static zend_always_inline zend_ssa_alias_kind zend_jit_var_may_alias(const zend_
363
363
return NO_ALIAS ;
364
364
}
365
365
366
- #define STACK_VAR_TYPE (_var ) \
367
- STACK_TYPE(stack, EX_VAR_TO_NUM(_var))
368
-
369
- #define SET_STACK_VAR_TYPE (_var , _type ) do { \
370
- SET_STACK_TYPE(stack, EX_VAR_TO_NUM(_var), _type); \
371
- } while (0)
372
-
373
-
374
-
375
366
static zend_always_inline void zend_jit_trace_add_op_guard (const zend_op_array * op_array ,
376
367
const zend_ssa * ssa ,
377
368
zend_ssa * tssa ,
@@ -397,14 +388,14 @@ static zend_always_inline void zend_jit_trace_add_op_guard(const zend_op_array
397
388
#define CHECK_OP_TRACE_TYPE (_var , _ssa_var , op_info , op_type ) do { \
398
389
if (op_type != IS_UNKNOWN) { \
399
390
if ((op_info & MAY_BE_GUARD) != 0 \
400
- && op_type != STACK_VAR_TYPE( _var)) { \
391
+ && op_type != STACK_TYPE(stack, EX_VAR_TO_NUM( _var) )) { \
401
392
if (!zend_jit_type_guard(&dasm_state, opline, _var, op_type)) { \
402
393
goto jit_failure; \
403
394
} \
404
395
if (zend_jit_var_may_alias(op_array, op_array_ssa, _var) != NO_ALIAS) { \
405
- SET_STACK_VAR_TYPE( _var, IS_UNKNOWN); \
396
+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM( _var) , IS_UNKNOWN); \
406
397
} else { \
407
- SET_STACK_VAR_TYPE( _var, op_type); \
398
+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM( _var) , op_type); \
408
399
op_info &= ~MAY_BE_GUARD; \
409
400
} \
410
401
ssa->var_info[_ssa_var].type &= op_info; \
@@ -426,15 +417,6 @@ static zend_always_inline void zend_jit_trace_add_op_guard(const zend_op_array
426
417
#define CHECK_OP1_DATA_TRACE_TYPE () \
427
418
CHECK_OP_TRACE_TYPE((opline+1)->op1.var, (ssa_op+1)->op1_use, op1_data_info, op3_type)
428
419
429
- #define SET_OP1_STACK_VAR_TYPE (_type ) \
430
- SET_STACK_VAR_TYPE(opline->op1.var, _type)
431
- #define SET_OP2_STACK_VAR_TYPE ( _type ) \
432
- SET_STACK_VAR_TYPE(opline->op2.var, _type)
433
- #define SET_OP1_DATA_STACK_VAR_TYPE (_type ) \
434
- SET_STACK_VAR_TYPE((opline+1)->op1.var, _type)
435
- #define SET_RES_STACK_VAR_TYPE (_type ) \
436
- SET_STACK_VAR_TYPE(opline->result.var, _type)
437
-
438
420
static zend_always_inline size_t zend_jit_trace_frame_size (const zend_op_array * op_array )
439
421
{
440
422
if (op_array && op_array -> type == ZEND_USER_FUNCTION ) {
@@ -476,7 +458,7 @@ static void zend_jit_trace_send_type(const zend_op *opline, zend_jit_trace_stack
476
458
}
477
459
}
478
460
}
479
- SET_STACK_VAR_TYPE ( opline -> result .var , type );
461
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> result .var ) , type );
480
462
}
481
463
482
464
static zend_ssa * zend_jit_trace_build_ssa (const zend_op_array * op_array , zend_script * script )
@@ -3473,7 +3455,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3473
3455
res_use_info = RES_USE_INFO ();
3474
3456
} else {
3475
3457
#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO
3476
- res_use_info = zend_jit_trace_type_to_info (STACK_VAR_TYPE (opline -> result .var ));
3458
+ res_use_info = zend_jit_trace_type_to_info (
3459
+ STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> result .var )));
3477
3460
#else
3478
3461
res_use_info = -1 ;
3479
3462
#endif
@@ -3561,7 +3544,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3561
3544
res_use_info = RES_USE_INFO ();
3562
3545
} else {
3563
3546
#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO
3564
- res_use_info = zend_jit_trace_type_to_info (STACK_VAR_TYPE (opline -> result .var ));
3547
+ res_use_info = zend_jit_trace_type_to_info (
3548
+ STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> result .var )));
3565
3549
#else
3566
3550
res_use_info = -1 ;
3567
3551
#endif
@@ -3635,7 +3619,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3635
3619
res_use_info = RES_USE_INFO ();
3636
3620
} else {
3637
3621
#if USE_ABSTRACT_STACK_FOR_RES_USE_INFO
3638
- res_use_info = zend_jit_trace_type_to_info (STACK_VAR_TYPE (opline -> result .var ));
3622
+ res_use_info = zend_jit_trace_type_to_info (
3623
+ STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> result .var )));
3639
3624
#else
3640
3625
res_use_info = -1 ;
3641
3626
#endif
@@ -5255,22 +5240,22 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5255
5240
} else if (opline -> opcode == ZEND_QM_ASSIGN ) {
5256
5241
if (opline -> op1_type != IS_CONST ) {
5257
5242
/* copy */
5258
- type = STACK_VAR_TYPE ( opline -> op1 .var );
5243
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 .var ) );
5259
5244
}
5260
5245
} else if (opline -> opcode == ZEND_ASSIGN ) {
5261
5246
if (opline -> op2_type != IS_CONST
5262
5247
&& ssa_op -> op1_use >= 0
5263
5248
/* assignment to typed reference may cause conversion */
5264
5249
&& (ssa -> var_info [ssa_op -> op1_use ].type & MAY_BE_REF ) == 0 ) {
5265
5250
/* copy */
5266
- type = STACK_VAR_TYPE ( opline -> op2 .var );
5251
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op2 .var ) );
5267
5252
}
5268
5253
} else if (opline -> opcode == ZEND_POST_INC
5269
5254
|| opline -> opcode == ZEND_POST_DEC ) {
5270
5255
/* copy */
5271
- type = STACK_VAR_TYPE ( opline -> op1 .var );
5256
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 .var ) );
5272
5257
}
5273
- SET_RES_STACK_VAR_TYPE ( type );
5258
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> result . var ), type );
5274
5259
if (type != IS_UNKNOWN ) {
5275
5260
ssa -> var_info [ssa_op -> result_def ].type &= ~MAY_BE_GUARD ;
5276
5261
if (opline -> opcode == ZEND_FETCH_THIS
@@ -5291,10 +5276,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5291
5276
type = concrete_type (ssa -> var_info [ssa_op -> op1_def ].type );
5292
5277
} else if (opline -> opcode == ZEND_ASSIGN ) {
5293
5278
if (!(OP1_INFO () & MAY_BE_REF )
5294
- || STACK_VAR_TYPE ( opline -> op1 .var ) != IS_UNKNOWN ) {
5279
+ || STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 .var ) ) != IS_UNKNOWN ) {
5295
5280
if (opline -> op2_type != IS_CONST ) {
5296
5281
/* copy */
5297
- type = STACK_VAR_TYPE ( opline -> op2 .var );
5282
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op2 .var ) );
5298
5283
}
5299
5284
}
5300
5285
} else if (opline -> opcode == ZEND_SEND_VAR
@@ -5305,9 +5290,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5305
5290
|| opline -> opcode == ZEND_JMP_NULL
5306
5291
|| opline -> opcode == ZEND_FE_RESET_R ) {
5307
5292
/* keep old value */
5308
- type = STACK_VAR_TYPE ( opline -> op1 .var );
5293
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 .var ) );
5309
5294
}
5310
- SET_OP1_STACK_VAR_TYPE ( type );
5295
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 . var ), type );
5311
5296
if (type != IS_UNKNOWN ) {
5312
5297
ssa -> var_info [ssa_op -> op1_def ].type &= ~MAY_BE_GUARD ;
5313
5298
if (ra && ra [ssa_op -> op1_def ]) {
@@ -5323,9 +5308,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5323
5308
type = concrete_type (ssa -> var_info [ssa_op -> op2_def ].type );
5324
5309
} else if (opline -> opcode == ZEND_ASSIGN ) {
5325
5310
/* keep old value */
5326
- type = STACK_VAR_TYPE ( opline -> op2 .var );
5311
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op2 .var ) );
5327
5312
}
5328
- SET_OP2_STACK_VAR_TYPE ( type );
5313
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op2 . var ), type );
5329
5314
if (type != IS_UNKNOWN ) {
5330
5315
ssa -> var_info [ssa_op -> op2_def ].type &= ~MAY_BE_GUARD ;
5331
5316
if (ra && ra [ssa_op -> op2_def ]) {
@@ -5356,9 +5341,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5356
5341
|| (opline - 1 )-> opcode == ZEND_ASSIGN_OBJ
5357
5342
|| (opline - 1 )-> opcode == ZEND_ASSIGN_STATIC_PROP ) {
5358
5343
/* keep old value */
5359
- type = STACK_VAR_TYPE ( opline -> op1 .var );
5344
+ type = STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 .var ) );
5360
5345
}
5361
- SET_OP1_STACK_VAR_TYPE ( type );
5346
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 . var ), type );
5362
5347
if (type != IS_UNKNOWN ) {
5363
5348
ssa -> var_info [ssa_op -> op1_def ].type &= ~MAY_BE_GUARD ;
5364
5349
if (ra && ra [ssa_op -> op1_def ]) {
@@ -5379,7 +5364,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5379
5364
&& has_concrete_type (ssa -> var_info [ssa_op -> result_def ].type )) {
5380
5365
type = concrete_type (ssa -> var_info [ssa_op -> result_def ].type );
5381
5366
}
5382
- SET_RES_STACK_VAR_TYPE ( type );
5367
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> result . var ), type );
5383
5368
if (ra && ra [ssa_op -> result_def ]) {
5384
5369
SET_STACK_REG (stack , EX_VAR_TO_NUM (opline -> result .var ), ra [ssa_op -> result_def ]-> reg );
5385
5370
}
@@ -5399,7 +5384,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5399
5384
&& has_concrete_type (ssa -> var_info [ssa_op -> op1_def ].type )) {
5400
5385
type = concrete_type (ssa -> var_info [ssa_op -> op1_def ].type );
5401
5386
}
5402
- SET_OP1_STACK_VAR_TYPE ( type );
5387
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> op1 . var ), type );
5403
5388
if (ra && ra [ssa_op -> op1_def ]) {
5404
5389
SET_STACK_REG (stack , EX_VAR_TO_NUM (opline -> op1 .var ), ra [ssa_op -> op1_def ]-> reg );
5405
5390
}
@@ -5530,7 +5515,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5530
5515
&& (p + 1 )-> op == ZEND_JIT_TRACE_VM ) {
5531
5516
const zend_op * opline = (p + 1 )-> opline - 1 ;
5532
5517
if (opline -> result_type != IS_UNUSED ) {
5533
- SET_RES_STACK_VAR_TYPE ( res_type );
5518
+ SET_STACK_TYPE ( stack , EX_VAR_TO_NUM ( opline -> result . var ), res_type );
5534
5519
}
5535
5520
}
5536
5521
res_type = IS_UNKNOWN ;
0 commit comments