Skip to content

Commit 30ec2de

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Extract call_level conditions out to separate functions (#16949)
2 parents 4591f04 + ed55693 commit 30ec2de

File tree

2 files changed

+51
-77
lines changed

2 files changed

+51
-77
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,38 @@ ZEND_EXT_API void zend_jit_status(zval *ret)
836836
add_assoc_zval(ret, "jit", &stats);
837837
}
838838

839+
static bool zend_jit_inc_call_level(uint8_t opcode)
840+
{
841+
switch (opcode) {
842+
case ZEND_INIT_FCALL:
843+
case ZEND_INIT_FCALL_BY_NAME:
844+
case ZEND_INIT_NS_FCALL_BY_NAME:
845+
case ZEND_INIT_METHOD_CALL:
846+
case ZEND_INIT_DYNAMIC_CALL:
847+
case ZEND_INIT_STATIC_METHOD_CALL:
848+
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
849+
case ZEND_INIT_USER_CALL:
850+
case ZEND_NEW:
851+
return true;
852+
default:
853+
return false;
854+
}
855+
}
856+
857+
static bool zend_jit_dec_call_level(uint8_t opcode)
858+
{
859+
switch (opcode) {
860+
case ZEND_DO_FCALL:
861+
case ZEND_DO_ICALL:
862+
case ZEND_DO_UCALL:
863+
case ZEND_DO_FCALL_BY_NAME:
864+
case ZEND_CALLABLE_CONVERT:
865+
return true;
866+
default:
867+
return false;
868+
}
869+
}
870+
839871
static zend_string *zend_jit_func_name(const zend_op_array *op_array)
840872
{
841873
smart_str buf = {0};
@@ -1572,17 +1604,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
15721604
for (i = ssa->cfg.blocks[b].start; i <= end; i++) {
15731605
zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[i] : NULL;
15741606
opline = op_array->opcodes + i;
1575-
switch (opline->opcode) {
1576-
case ZEND_INIT_FCALL:
1577-
case ZEND_INIT_FCALL_BY_NAME:
1578-
case ZEND_INIT_NS_FCALL_BY_NAME:
1579-
case ZEND_INIT_METHOD_CALL:
1580-
case ZEND_INIT_DYNAMIC_CALL:
1581-
case ZEND_INIT_STATIC_METHOD_CALL:
1582-
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
1583-
case ZEND_INIT_USER_CALL:
1584-
case ZEND_NEW:
1585-
call_level++;
1607+
if (zend_jit_inc_call_level(opline->opcode)) {
1608+
call_level++;
15861609
}
15871610

15881611
if (JIT_G(opt_level) >= ZEND_JIT_LEVEL_INLINE) {
@@ -2720,25 +2743,10 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
27202743
i++;
27212744
for (; i < end; i++) {
27222745
opline = op_array->opcodes + i;
2723-
switch (opline->opcode) {
2724-
case ZEND_INIT_FCALL:
2725-
case ZEND_INIT_FCALL_BY_NAME:
2726-
case ZEND_INIT_NS_FCALL_BY_NAME:
2727-
case ZEND_INIT_METHOD_CALL:
2728-
case ZEND_INIT_DYNAMIC_CALL:
2729-
case ZEND_INIT_STATIC_METHOD_CALL:
2730-
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
2731-
case ZEND_INIT_USER_CALL:
2732-
case ZEND_NEW:
2733-
call_level++;
2734-
break;
2735-
case ZEND_DO_FCALL:
2736-
case ZEND_DO_ICALL:
2737-
case ZEND_DO_UCALL:
2738-
case ZEND_DO_FCALL_BY_NAME:
2739-
case ZEND_CALLABLE_CONVERT:
2740-
call_level--;
2741-
break;
2746+
if (zend_jit_inc_call_level(opline->opcode)) {
2747+
call_level++;
2748+
} else if (zend_jit_dec_call_level(opline->opcode)) {
2749+
call_level--;
27422750
}
27432751
}
27442752
opline = op_array->opcodes + i;
@@ -2853,13 +2861,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
28532861
}
28542862
}
28552863
done:
2856-
switch (opline->opcode) {
2857-
case ZEND_DO_FCALL:
2858-
case ZEND_DO_ICALL:
2859-
case ZEND_DO_UCALL:
2860-
case ZEND_DO_FCALL_BY_NAME:
2861-
case ZEND_CALLABLE_CONVERT:
2862-
call_level--;
2864+
if (zend_jit_dec_call_level(opline->opcode)) {
2865+
call_level--;
28632866
}
28642867
}
28652868
zend_jit_bb_end(&ctx, b);

ext/opcache/jit/zend_jit_trace.c

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,28 +1164,13 @@ static const zend_op *zend_jit_trace_find_init_fcall_op(zend_jit_trace_rec *p, c
11641164
if (opline) {
11651165
while (opline > op_array->opcodes) {
11661166
opline--;
1167-
switch (opline->opcode) {
1168-
case ZEND_INIT_FCALL:
1169-
case ZEND_INIT_FCALL_BY_NAME:
1170-
case ZEND_INIT_NS_FCALL_BY_NAME:
1171-
case ZEND_INIT_METHOD_CALL:
1172-
case ZEND_INIT_DYNAMIC_CALL:
1173-
case ZEND_INIT_STATIC_METHOD_CALL:
1174-
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
1175-
case ZEND_INIT_USER_CALL:
1176-
case ZEND_NEW:
1177-
if (call_level == 0) {
1178-
return opline;
1179-
}
1180-
call_level--;
1181-
break;
1182-
case ZEND_DO_FCALL:
1183-
case ZEND_DO_ICALL:
1184-
case ZEND_DO_UCALL:
1185-
case ZEND_DO_FCALL_BY_NAME:
1186-
case ZEND_CALLABLE_CONVERT:
1187-
call_level++;
1188-
break;
1167+
if (zend_jit_inc_call_level(opline->opcode)) {
1168+
if (call_level == 0) {
1169+
return opline;
1170+
}
1171+
call_level--;
1172+
} else if (zend_jit_dec_call_level(opline->opcode)) {
1173+
call_level++;
11891174
}
11901175
}
11911176
}
@@ -4422,17 +4407,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
44224407

44234408
frame_flags = 0;
44244409

4425-
switch (opline->opcode) {
4426-
case ZEND_INIT_FCALL:
4427-
case ZEND_INIT_FCALL_BY_NAME:
4428-
case ZEND_INIT_NS_FCALL_BY_NAME:
4429-
case ZEND_INIT_METHOD_CALL:
4430-
case ZEND_INIT_DYNAMIC_CALL:
4431-
case ZEND_INIT_STATIC_METHOD_CALL:
4432-
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
4433-
case ZEND_INIT_USER_CALL:
4434-
case ZEND_NEW:
4435-
frame->call_level++;
4410+
if (zend_jit_inc_call_level(opline->opcode)) {
4411+
frame->call_level++;
44364412
}
44374413

44384414
if (JIT_G(opt_level) >= ZEND_JIT_LEVEL_INLINE) {
@@ -6497,13 +6473,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
64976473

64986474
done:
64996475
polymorphic_side_trace = 0;
6500-
switch (opline->opcode) {
6501-
case ZEND_DO_FCALL:
6502-
case ZEND_DO_ICALL:
6503-
case ZEND_DO_UCALL:
6504-
case ZEND_DO_FCALL_BY_NAME:
6505-
case ZEND_CALLABLE_CONVERT:
6506-
frame->call_level--;
6476+
if (zend_jit_dec_call_level(opline->opcode)) {
6477+
frame->call_level--;
65076478
}
65086479

65096480
if (ra) {

0 commit comments

Comments
 (0)