Skip to content

Commit 12f9dad

Browse files
committed
Tracing JIT: Record information about elements of arrays and use it to improve generated code (ASSIGN_DIM).
1 parent 24082d5 commit 12f9dad

File tree

6 files changed

+123
-24
lines changed

6 files changed

+123
-24
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3121,7 +3121,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
31213121
}
31223122
if (!zend_jit_assign_dim_op(&dasm_state, opline,
31233123
OP1_INFO(), OP1_DEF_INFO(), OP1_REG_ADDR(), OP2_INFO(),
3124-
OP1_DATA_INFO(), OP1_DATA_RANGE(),
3124+
OP1_DATA_INFO(), OP1_DATA_RANGE(), IS_UNKNOWN,
31253125
zend_may_throw(opline, ssa_op, op_array, ssa))) {
31263126
goto jit_failure;
31273127
}
@@ -3134,7 +3134,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
31343134
break;
31353135
}
31363136
if (!zend_jit_assign_dim(&dasm_state, opline,
3137-
OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), OP1_DATA_INFO(),
3137+
OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), OP1_DATA_INFO(), IS_UNKNOWN,
31383138
zend_may_throw(opline, ssa_op, op_array, ssa))) {
31393139
goto jit_failure;
31403140
}

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4882,7 +4882,7 @@ static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, uint32_t op1
48824882
return zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, may_throw);
48834883
}
48844884

4885-
static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr)
4885+
static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, uint8_t dim_type, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr)
48864886
/* Labels: 1,2,3,4,5 */
48874887
{
48884888
zend_jit_addr op2_addr = OP2_ADDR();
@@ -4944,6 +4944,12 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
49444944
}
49454945
packed_loaded = 1;
49464946
}
4947+
4948+
if (dim_type == IS_UNDEF && type == BP_VAR_W) {
4949+
/* don't generate "fast" code for packed array */
4950+
packed_loaded = 0;
4951+
}
4952+
49474953
if (packed_loaded) {
49484954
| // ZEND_HASH_INDEX_FIND(ht, hval, retval, num_undef);
49494955
if (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) {
@@ -5701,7 +5707,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst,
57015707
return 1;
57025708
}
57035709

5704-
static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, int may_throw)
5710+
static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, uint8_t dim_type, int may_throw)
57055711
{
57065712
zend_jit_addr op2_addr, op3_addr, res_addr;
57075713

@@ -5799,7 +5805,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t
57995805
uint32_t var_info = zend_array_element_type(op1_info, opline->op1_type, 0, 0);
58005806
zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_REG0, 0);
58015807

5802-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, NULL, NULL, NULL)) {
5808+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, dim_type, NULL, NULL, NULL)) {
58035809
return 0;
58045810
}
58055811

@@ -5912,7 +5918,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t
59125918
return 1;
59135919
}
59145920

5915-
static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, int may_throw)
5921+
static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, uint8_t dim_type, int may_throw)
59165922
{
59175923
zend_jit_addr op2_addr, op3_addr, var_addr;
59185924

@@ -6016,7 +6022,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint3
60166022
var_info |= MAY_BE_RC1;
60176023
}
60186024

6019-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, NULL, NULL, NULL)) {
6025+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, dim_type, NULL, NULL, NULL)) {
60206026
return 0;
60216027
}
60226028

@@ -10915,7 +10921,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst,
1091510921
}
1091610922
}
1091710923
| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr, TMP1
10918-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, res_exit_addr, not_found_exit_addr, exit_addr)) {
10924+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, IS_UNKNOWN, res_exit_addr, not_found_exit_addr, exit_addr)) {
1091910925
return 0;
1092010926
}
1092110927
}
@@ -11217,7 +11223,7 @@ static int zend_jit_fetch_dim(dasm_State **Dst,
1121711223
ZEND_UNREACHABLE();
1121811224
}
1121911225

11220-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, type, op1_info, op2_info, NULL, NULL, NULL)) {
11226+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, type, op1_info, op2_info, IS_UNKNOWN, NULL, NULL, NULL)) {
1122111227
return 0;
1122211228
}
1122311229

@@ -11338,7 +11344,7 @@ static int zend_jit_isset_isempty_dim(dasm_State **Dst,
1133811344
not_found_exit_addr = exit_addr;
1133911345
}
1134011346
}
11341-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, found_exit_addr, not_found_exit_addr, NULL)) {
11347+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, IS_UNKNOWN, found_exit_addr, not_found_exit_addr, NULL)) {
1134211348
return 0;
1134311349
}
1134411350

ext/opcache/jit/zend_jit_internal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,7 @@ typedef enum _zend_jit_trace_op {
438438
ZEND_JIT_TRACE_VM,
439439
ZEND_JIT_TRACE_OP1_TYPE,
440440
ZEND_JIT_TRACE_OP2_TYPE,
441+
ZEND_JIT_TRACE_VAL_INFO,
441442
ZEND_JIT_TRACE_INIT_CALL,
442443
ZEND_JIT_TRACE_DO_ICALL,
443444
ZEND_JIT_TRACE_ENTER,
@@ -451,6 +452,8 @@ typedef enum _zend_jit_trace_op {
451452
#define IS_TRACE_REFERENCE (1<<5)
452453
#define IS_TRACE_INDIRECT (1<<6)
453454

455+
#define IS_TRACE_TYPE_MASK 0xf
456+
454457
#define ZEND_JIT_TRACE_FAKE_INIT_CALL 0x00000100
455458
#define ZEND_JIT_TRACE_RETURN_VALUE_USED 0x00000100
456459

ext/opcache/jit/zend_jit_trace.c

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,7 @@ static int find_return_ssa_var(zend_jit_trace_rec *p, zend_ssa_op *ssa_op)
975975
}
976976
}
977977
return -1;
978-
} else if (p->op == ZEND_JIT_TRACE_OP1_TYPE || p->op == ZEND_JIT_TRACE_OP2_TYPE) {
978+
} else if (p->op >= ZEND_JIT_TRACE_OP1_TYPE && p->op <= ZEND_JIT_TRACE_VAL_INFO) {
979979
/*skip */
980980
} else {
981981
return -1;
@@ -1001,7 +1001,7 @@ static const zend_op *zend_jit_trace_find_init_fcall_op(zend_jit_trace_rec *p, c
10011001
return p->opline;
10021002
}
10031003
return NULL;
1004-
} else if (p->op == ZEND_JIT_TRACE_OP1_TYPE || p->op == ZEND_JIT_TRACE_OP2_TYPE) {
1004+
} else if (p->op >= ZEND_JIT_TRACE_OP1_TYPE && p->op <= ZEND_JIT_TRACE_VAL_INFO) {
10051005
/*skip */
10061006
} else {
10071007
return NULL;
@@ -1597,6 +1597,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
15971597
op2_ce = (zend_class_entry*)(p+1)->ce;
15981598
p++;
15991599
}
1600+
if ((p+1)->op == ZEND_JIT_TRACE_VAL_INFO) {
1601+
p++;
1602+
}
16001603

16011604
switch (opline->opcode) {
16021605
case ZEND_ASSIGN_OP:
@@ -4072,6 +4075,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40724075
uint8_t op3_type = p->op3_type;
40734076
uint8_t orig_op1_type = op1_type;
40744077
uint8_t orig_op2_type = op2_type;
4078+
uint8_t val_type = IS_UNKNOWN;
40754079
bool op1_indirect;
40764080
zend_class_entry *op1_ce = NULL;
40774081
zend_class_entry *op2_ce = NULL;
@@ -4098,6 +4102,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40984102
op2_ce = (zend_class_entry*)(p+1)->ce;
40994103
p++;
41004104
}
4105+
if ((p+1)->op == ZEND_JIT_TRACE_VAL_INFO) {
4106+
val_type = (p+1)->op1_type;
4107+
p++;
4108+
}
41014109

41024110
frame_flags = 0;
41034111

@@ -4387,7 +4395,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
43874395
op1_def_info = OP1_DEF_INFO();
43884396
if (!zend_jit_assign_dim_op(&dasm_state, opline,
43894397
op1_info, op1_def_info, op1_addr, op2_info,
4390-
op1_data_info, OP1_DATA_RANGE(),
4398+
op1_data_info, OP1_DATA_RANGE(), val_type,
43914399
zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
43924400
goto jit_failure;
43934401
}
@@ -4636,7 +4644,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
46364644
op1_data_info = OP1_DATA_INFO();
46374645
CHECK_OP1_DATA_TRACE_TYPE();
46384646
if (!zend_jit_assign_dim(&dasm_state, opline,
4639-
op1_info, op1_addr, op2_info, op1_data_info,
4647+
op1_info, op1_addr, op2_info, op1_data_info, val_type,
46404648
zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
46414649
goto jit_failure;
46424650
}
@@ -6919,6 +6927,25 @@ static void zend_jit_dump_trace(zend_jit_trace_rec *trace_buffer, zend_ssa *tssa
69196927
fprintf(stderr, " op3(%s%s)", ref, type);
69206928
}
69216929
}
6930+
if ((p+1)->op == ZEND_JIT_TRACE_VAL_INFO) {
6931+
uint8_t val_type;
6932+
const char *type;
6933+
6934+
if (op1_type == IS_UNKNOWN && op2_type == IS_UNKNOWN && op3_type == IS_UNKNOWN) {
6935+
fprintf(stderr, " ;");
6936+
}
6937+
p++;
6938+
val_type = p->op1_type;
6939+
6940+
if (val_type == IS_UNDEF) {
6941+
type = "undef";
6942+
} else if (val_type == IS_REFERENCE) {
6943+
type = "ref";
6944+
} else {
6945+
type = zend_get_type_by_const(val_type);
6946+
}
6947+
fprintf(stderr, " val(%s)", type);
6948+
}
69226949
fprintf(stderr, "\n");
69236950
idx++;
69246951

ext/opcache/jit/zend_jit_vm_helpers.c

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,63 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
729729
TRACE_RECORD(ZEND_JIT_TRACE_OP2_TYPE, 0, ce2);
730730
}
731731

732+
switch (opline->opcode) {
733+
case ZEND_FETCH_DIM_R:
734+
case ZEND_FETCH_DIM_W:
735+
case ZEND_FETCH_DIM_RW:
736+
case ZEND_FETCH_DIM_IS:
737+
case ZEND_FETCH_DIM_FUNC_ARG:
738+
case ZEND_FETCH_DIM_UNSET:
739+
case ZEND_FETCH_LIST_R:
740+
case ZEND_FETCH_LIST_W:
741+
case ZEND_ASSIGN_DIM:
742+
case ZEND_ASSIGN_DIM_OP:
743+
case ZEND_UNSET_DIM:
744+
case ZEND_ISSET_ISEMPTY_DIM_OBJ:
745+
if (opline->op1_type == IS_CONST) {
746+
zval *arr = RT_CONSTANT(opline, opline->op1);
747+
op1_type = Z_TYPE_P(arr);
748+
}
749+
if ((op1_type & IS_TRACE_TYPE_MASK) == IS_ARRAY
750+
&& opline->op2_type != IS_UNDEF) {
751+
zval *arr, *dim, *val;
752+
uint8_t val_type = IS_UNDEF;
753+
754+
if (opline->op2_type == IS_CONST) {
755+
dim = RT_CONSTANT(opline, opline->op2);
756+
} else {
757+
dim = EX_VAR(opline->op2.var);
758+
}
759+
760+
if (Z_TYPE_P(dim) == IS_LONG || Z_TYPE_P(dim) == IS_STRING) {
761+
if (opline->op1_type == IS_CONST) {
762+
arr = RT_CONSTANT(opline, opline->op1);
763+
} else {
764+
arr = EX_VAR(opline->op1.var);
765+
}
766+
if (Z_TYPE_P(arr) == IS_INDIRECT) {
767+
arr = Z_INDIRECT_P(arr);
768+
}
769+
if (Z_TYPE_P(arr) == IS_REFERENCE) {
770+
arr = Z_REFVAL_P(arr);
771+
}
772+
ZEND_ASSERT(Z_TYPE_P(arr) == IS_ARRAY);
773+
if (Z_TYPE_P(dim) == IS_LONG) {
774+
val = zend_hash_index_find(Z_ARRVAL_P(arr), Z_LVAL_P(dim));
775+
} else /*if Z_TYPE_P(dim) == IS_STRING)*/ {
776+
val = zend_hash_find(Z_ARRVAL_P(arr), Z_STR_P(dim));
777+
}
778+
if (val) {
779+
val_type = Z_TYPE_P(val);
780+
}
781+
TRACE_RECORD_VM(ZEND_JIT_TRACE_VAL_INFO, NULL, val_type, 0, 0);
782+
}
783+
}
784+
break;
785+
default:
786+
break;
787+
}
788+
732789
if (opline->opcode == ZEND_DO_FCALL
733790
|| opline->opcode == ZEND_DO_ICALL
734791
|| opline->opcode == ZEND_DO_UCALL

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5341,7 +5341,7 @@ static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, uint32_t op1
53415341
return zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, may_throw);
53425342
}
53435343

5344-
static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr)
5344+
static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, uint8_t dim_type, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr)
53455345
/* Labels: 1,2,3,4,5 */
53465346
{
53475347
zend_jit_addr op2_addr = OP2_ADDR();
@@ -5401,6 +5401,12 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
54015401
}
54025402
packed_loaded = 1;
54035403
}
5404+
5405+
if (dim_type == IS_UNDEF && type == BP_VAR_W && packed_loaded) {
5406+
/* don't generate "fast" code for packed array */
5407+
packed_loaded = 0;
5408+
}
5409+
54045410
if (packed_loaded) {
54055411
| // ZEND_HASH_INDEX_FIND(ht, hval, retval, num_undef);
54065412
if (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) {
@@ -5578,15 +5584,15 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
55785584
if (packed_loaded) {
55795585
| IF_NOT_Z_TYPE r0, IS_UNDEF, >8
55805586
}
5581-
if (!(op1_info & MAY_BE_ARRAY_KEY_LONG) || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) || packed_loaded) {
5587+
// if (!(op1_info & MAY_BE_ARRAY_KEY_LONG) || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) || packed_loaded) {
55825588
|2:
55835589
|4:
55845590
if (!op2_loaded) {
55855591
| // hval = Z_LVAL_P(dim);
55865592
| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr
55875593
}
55885594
| EXT_CALL zend_hash_index_lookup, r0
5589-
}
5595+
// }
55905596
break;
55915597
default:
55925598
ZEND_UNREACHABLE();
@@ -6178,7 +6184,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst,
61786184
return 1;
61796185
}
61806186

6181-
static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, int may_throw)
6187+
static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, uint8_t dim_type, int may_throw)
61826188
{
61836189
zend_jit_addr op2_addr, op3_addr, res_addr;
61846190

@@ -6274,7 +6280,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t
62746280
uint32_t var_info = zend_array_element_type(op1_info, opline->op1_type, 0, 0);
62756281
zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0);
62766282

6277-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, NULL, NULL, NULL)) {
6283+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, dim_type, NULL, NULL, NULL)) {
62786284
return 0;
62796285
}
62806286

@@ -6404,7 +6410,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t
64046410
return 1;
64056411
}
64066412

6407-
static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, int may_throw)
6413+
static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, uint8_t dim_type, int may_throw)
64086414
{
64096415
zend_jit_addr op2_addr, op3_addr, var_addr;
64106416

@@ -6506,7 +6512,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint3
65066512
var_info |= MAY_BE_RC1;
65076513
}
65086514

6509-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, NULL, NULL, NULL)) {
6515+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, dim_type, NULL, NULL, NULL)) {
65106516
return 0;
65116517
}
65126518

@@ -11553,7 +11559,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst,
1155311559
}
1155411560
}
1155511561
| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr
11556-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, res_exit_addr, not_found_exit_addr, exit_addr)) {
11562+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, IS_UNKNOWN, res_exit_addr, not_found_exit_addr, exit_addr)) {
1155711563
return 0;
1155811564
}
1155911565
}
@@ -11870,7 +11876,7 @@ static int zend_jit_fetch_dim(dasm_State **Dst,
1187011876
ZEND_UNREACHABLE();
1187111877
}
1187211878

11873-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, type, op1_info, op2_info, NULL, NULL, NULL)) {
11879+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, type, op1_info, op2_info, IS_UNKNOWN, NULL, NULL, NULL)) {
1187411880
return 0;
1187511881
}
1187611882

@@ -12000,7 +12006,7 @@ static int zend_jit_isset_isempty_dim(dasm_State **Dst,
1200012006
not_found_exit_addr = exit_addr;
1200112007
}
1200212008
}
12003-
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, found_exit_addr, not_found_exit_addr, NULL)) {
12009+
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, IS_UNKNOWN, found_exit_addr, not_found_exit_addr, NULL)) {
1200412010
return 0;
1200512011
}
1200612012

0 commit comments

Comments
 (0)