mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Extract call_level conditions out to separate functions (#16949)
This commit is contained in:
commit
30ec2de83f
2 changed files with 51 additions and 77 deletions
|
@ -836,6 +836,38 @@ ZEND_EXT_API void zend_jit_status(zval *ret)
|
||||||
add_assoc_zval(ret, "jit", &stats);
|
add_assoc_zval(ret, "jit", &stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool zend_jit_inc_call_level(uint8_t opcode)
|
||||||
|
{
|
||||||
|
switch (opcode) {
|
||||||
|
case ZEND_INIT_FCALL:
|
||||||
|
case ZEND_INIT_FCALL_BY_NAME:
|
||||||
|
case ZEND_INIT_NS_FCALL_BY_NAME:
|
||||||
|
case ZEND_INIT_METHOD_CALL:
|
||||||
|
case ZEND_INIT_DYNAMIC_CALL:
|
||||||
|
case ZEND_INIT_STATIC_METHOD_CALL:
|
||||||
|
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
|
||||||
|
case ZEND_INIT_USER_CALL:
|
||||||
|
case ZEND_NEW:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool zend_jit_dec_call_level(uint8_t opcode)
|
||||||
|
{
|
||||||
|
switch (opcode) {
|
||||||
|
case ZEND_DO_FCALL:
|
||||||
|
case ZEND_DO_ICALL:
|
||||||
|
case ZEND_DO_UCALL:
|
||||||
|
case ZEND_DO_FCALL_BY_NAME:
|
||||||
|
case ZEND_CALLABLE_CONVERT:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static zend_string *zend_jit_func_name(const zend_op_array *op_array)
|
static zend_string *zend_jit_func_name(const zend_op_array *op_array)
|
||||||
{
|
{
|
||||||
smart_str buf = {0};
|
smart_str buf = {0};
|
||||||
|
@ -1572,16 +1604,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
|
||||||
for (i = ssa->cfg.blocks[b].start; i <= end; i++) {
|
for (i = ssa->cfg.blocks[b].start; i <= end; i++) {
|
||||||
zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[i] : NULL;
|
zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[i] : NULL;
|
||||||
opline = op_array->opcodes + i;
|
opline = op_array->opcodes + i;
|
||||||
switch (opline->opcode) {
|
if (zend_jit_inc_call_level(opline->opcode)) {
|
||||||
case ZEND_INIT_FCALL:
|
|
||||||
case ZEND_INIT_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_NS_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_METHOD_CALL:
|
|
||||||
case ZEND_INIT_DYNAMIC_CALL:
|
|
||||||
case ZEND_INIT_STATIC_METHOD_CALL:
|
|
||||||
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
|
|
||||||
case ZEND_INIT_USER_CALL:
|
|
||||||
case ZEND_NEW:
|
|
||||||
call_level++;
|
call_level++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2720,25 +2743,10 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
|
||||||
i++;
|
i++;
|
||||||
for (; i < end; i++) {
|
for (; i < end; i++) {
|
||||||
opline = op_array->opcodes + i;
|
opline = op_array->opcodes + i;
|
||||||
switch (opline->opcode) {
|
if (zend_jit_inc_call_level(opline->opcode)) {
|
||||||
case ZEND_INIT_FCALL:
|
|
||||||
case ZEND_INIT_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_NS_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_METHOD_CALL:
|
|
||||||
case ZEND_INIT_DYNAMIC_CALL:
|
|
||||||
case ZEND_INIT_STATIC_METHOD_CALL:
|
|
||||||
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
|
|
||||||
case ZEND_INIT_USER_CALL:
|
|
||||||
case ZEND_NEW:
|
|
||||||
call_level++;
|
call_level++;
|
||||||
break;
|
} else if (zend_jit_dec_call_level(opline->opcode)) {
|
||||||
case ZEND_DO_FCALL:
|
|
||||||
case ZEND_DO_ICALL:
|
|
||||||
case ZEND_DO_UCALL:
|
|
||||||
case ZEND_DO_FCALL_BY_NAME:
|
|
||||||
case ZEND_CALLABLE_CONVERT:
|
|
||||||
call_level--;
|
call_level--;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
opline = op_array->opcodes + i;
|
opline = op_array->opcodes + i;
|
||||||
|
@ -2853,12 +2861,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
switch (opline->opcode) {
|
if (zend_jit_dec_call_level(opline->opcode)) {
|
||||||
case ZEND_DO_FCALL:
|
|
||||||
case ZEND_DO_ICALL:
|
|
||||||
case ZEND_DO_UCALL:
|
|
||||||
case ZEND_DO_FCALL_BY_NAME:
|
|
||||||
case ZEND_CALLABLE_CONVERT:
|
|
||||||
call_level--;
|
call_level--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1164,28 +1164,13 @@ static const zend_op *zend_jit_trace_find_init_fcall_op(zend_jit_trace_rec *p, c
|
||||||
if (opline) {
|
if (opline) {
|
||||||
while (opline > op_array->opcodes) {
|
while (opline > op_array->opcodes) {
|
||||||
opline--;
|
opline--;
|
||||||
switch (opline->opcode) {
|
if (zend_jit_inc_call_level(opline->opcode)) {
|
||||||
case ZEND_INIT_FCALL:
|
|
||||||
case ZEND_INIT_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_NS_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_METHOD_CALL:
|
|
||||||
case ZEND_INIT_DYNAMIC_CALL:
|
|
||||||
case ZEND_INIT_STATIC_METHOD_CALL:
|
|
||||||
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
|
|
||||||
case ZEND_INIT_USER_CALL:
|
|
||||||
case ZEND_NEW:
|
|
||||||
if (call_level == 0) {
|
if (call_level == 0) {
|
||||||
return opline;
|
return opline;
|
||||||
}
|
}
|
||||||
call_level--;
|
call_level--;
|
||||||
break;
|
} else if (zend_jit_dec_call_level(opline->opcode)) {
|
||||||
case ZEND_DO_FCALL:
|
|
||||||
case ZEND_DO_ICALL:
|
|
||||||
case ZEND_DO_UCALL:
|
|
||||||
case ZEND_DO_FCALL_BY_NAME:
|
|
||||||
case ZEND_CALLABLE_CONVERT:
|
|
||||||
call_level++;
|
call_level++;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4422,16 +4407,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
|
||||||
|
|
||||||
frame_flags = 0;
|
frame_flags = 0;
|
||||||
|
|
||||||
switch (opline->opcode) {
|
if (zend_jit_inc_call_level(opline->opcode)) {
|
||||||
case ZEND_INIT_FCALL:
|
|
||||||
case ZEND_INIT_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_NS_FCALL_BY_NAME:
|
|
||||||
case ZEND_INIT_METHOD_CALL:
|
|
||||||
case ZEND_INIT_DYNAMIC_CALL:
|
|
||||||
case ZEND_INIT_STATIC_METHOD_CALL:
|
|
||||||
case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL:
|
|
||||||
case ZEND_INIT_USER_CALL:
|
|
||||||
case ZEND_NEW:
|
|
||||||
frame->call_level++;
|
frame->call_level++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6497,12 +6473,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
|
||||||
|
|
||||||
done:
|
done:
|
||||||
polymorphic_side_trace = 0;
|
polymorphic_side_trace = 0;
|
||||||
switch (opline->opcode) {
|
if (zend_jit_dec_call_level(opline->opcode)) {
|
||||||
case ZEND_DO_FCALL:
|
|
||||||
case ZEND_DO_ICALL:
|
|
||||||
case ZEND_DO_UCALL:
|
|
||||||
case ZEND_DO_FCALL_BY_NAME:
|
|
||||||
case ZEND_CALLABLE_CONVERT:
|
|
||||||
frame->call_level--;
|
frame->call_level--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue