@@ -366,14 +366,27 @@ static zend_always_inline int zend_jit_var_may_be_modified_indirectly(const zend
366
366
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(_var), _type); \
367
367
} while (0)
368
368
369
- #define ADD_OP_GUARD (_var , _op_type ) do { \
370
- if (_var >= 0 && _op_type != IS_UNKNOWN) { \
371
- zend_ssa_var_info *info = &ssa_var_info[_var]; \
372
- if (zend_jit_var_may_be_modified_indirectly(op_array, ssa, ssa_vars[_var].var)) { \
373
- info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info(_op_type); \
374
- } else if ((info->type & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << _op_type)) { \
375
- info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info_ex(_op_type, info->type); \
376
- } \
369
+
370
+
371
+ static zend_always_inline void zend_jit_trace_add_op_guard (const zend_op_array * op_array ,
372
+ const zend_ssa * ssa ,
373
+ zend_ssa * tssa ,
374
+ uint32_t var ,
375
+ int ssa_var ,
376
+ uint8_t op_type )
377
+ {
378
+ zend_ssa_var_info * info = & tssa -> var_info [ssa_var ];
379
+
380
+ if (zend_jit_var_may_be_modified_indirectly (op_array , ssa , EX_VAR_TO_NUM (var ))) {
381
+ info -> type = MAY_BE_GUARD | zend_jit_trace_type_to_info (op_type );
382
+ } else if ((info -> type & (MAY_BE_ANY |MAY_BE_UNDEF )) != (1 << op_type )) {
383
+ info -> type = MAY_BE_GUARD | zend_jit_trace_type_to_info_ex (op_type , info -> type );
384
+ }
385
+ }
386
+
387
+ #define ADD_OP_GUARD (_var , _ssa_var , _op_type ) do { \
388
+ if (_ssa_var >= 0 && _op_type != IS_UNKNOWN) { \
389
+ zend_jit_trace_add_op_guard(op_array, ssa, tssa, _var, _ssa_var, _op_type); \
377
390
} \
378
391
} while (0)
379
392
@@ -396,11 +409,11 @@ static zend_always_inline int zend_jit_var_may_be_modified_indirectly(const zend
396
409
} while (0)
397
410
398
411
#define ADD_OP1_TRACE_GUARD () \
399
- ADD_OP_GUARD(tssa->ops[idx].op1_use, op1_type)
412
+ ADD_OP_GUARD(opline->op1.var, tssa->ops[idx].op1_use, op1_type)
400
413
#define ADD_OP2_TRACE_GUARD () \
401
- ADD_OP_GUARD(tssa->ops[idx].op2_use, op2_type)
414
+ ADD_OP_GUARD(opline->op2.var, tssa->ops[idx].op2_use, op2_type)
402
415
#define ADD_OP1_DATA_TRACE_GUARD () \
403
- ADD_OP_GUARD(tssa->ops[idx+1].op1_use, op3_type)
416
+ ADD_OP_GUARD((opline+1)->op1.var, tssa->ops[idx+1].op1_use, op3_type)
404
417
405
418
#define CHECK_OP1_TRACE_TYPE () \
406
419
CHECK_OP_TRACE_TYPE(opline->op1.var, ssa_op->op1_use, op1_info, op1_type)
0 commit comments