diff options
-rw-r--r-- | UPGRADING.INTERNALS | 6 | ||||
-rw-r--r-- | Zend/zend_compile.c | 5 | ||||
-rw-r--r-- | Zend/zend_execute.c | 3 | ||||
-rw-r--r-- | ext/opcache/Optimizer/compact_literals.c | 2 | ||||
-rw-r--r-- | ext/opcache/Optimizer/dce.c | 1 | ||||
-rw-r--r-- | ext/opcache/Optimizer/zend_cfg.c | 9 | ||||
-rw-r--r-- | ext/opcache/jit/zend_jit.c | 18 | ||||
-rw-r--r-- | ext/opcache/jit/zend_jit_trace.c | 11 | ||||
-rw-r--r-- | ext/opcache/jit/zend_jit_x86.dasc | 3 | ||||
-rw-r--r-- | sapi/phpdbg/phpdbg.c | 3 |
10 files changed, 14 insertions, 47 deletions
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 249cd553ba..1815a9c264 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -23,6 +23,8 @@ PHP 8.0 INTERNALS UPGRADE NOTES t. Signature changes u. Error Notification callbacks to replace zend_error_cb overwrite use-cases v. Removed Zend APIs + w. Renamed Zend APIs + x. ZEND_EXT_NOP no longer emitted 2. Build system changes a. Abstract @@ -395,6 +397,10 @@ PHP 8.0 INTERNALS UPGRADE NOTES w. The following APIs have been renamed: - _zend_ts_hash_init() to zend_ts_hash_init() + x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be + generated at the start of a function. Use the new observer APIs or hook + into zend_execute_ex instead. + ======================== 2. Build system changes ======================== diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 719e7aaffe..f42542c6b2 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -6936,11 +6936,6 @@ void zend_compile_func_decl(znode *result, zend_ast *ast, zend_bool toplevel) /* zend_oparray_context_begin(&orig_oparray_context); - if (CG(compiler_options) & ZEND_COMPILE_EXTENDED_STMT) { - zend_op *opline_ext = zend_emit_op(NULL, ZEND_EXT_NOP, NULL, NULL); - opline_ext->lineno = decl->start_lineno; - } - { /* Push a separator to the loop variable stack */ zend_loop_var dummy_var; diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 22afd49c2e..e2e5aa8391 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -4454,14 +4454,13 @@ ZEND_API zend_result ZEND_FASTCALL zend_handle_undef_args(zend_execute_data *cal if (fbc->type == ZEND_USER_FUNCTION) { zend_op_array *op_array = &fbc->op_array; uint32_t num_args = ZEND_CALL_NUM_ARGS(call); - uint32_t opline_offset = op_array->opcodes[0].opcode == ZEND_EXT_NOP; for (uint32_t i = 0; i < num_args; i++) { zval *arg = ZEND_CALL_VAR_NUM(call, i); if (!Z_ISUNDEF_P(arg)) { continue; } - zend_op *opline = &op_array->opcodes[i + opline_offset]; + zend_op *opline = &op_array->opcodes[i]; if (EXPECTED(opline->opcode == ZEND_RECV_INIT)) { zval *default_value = RT_CONSTANT(opline, opline->op2); if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) { diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index 3feba98d03..0e1529d2bd 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -815,7 +815,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx Z_CACHE_SLOT_P(val) = op_array->cache_size; op_array->cache_size += sizeof(zval); } - } else if (opline->opcode != ZEND_RECV && opline->opcode != ZEND_EXT_NOP) { + } else if (opline->opcode != ZEND_RECV) { break; } opline++; diff --git a/ext/opcache/Optimizer/dce.c b/ext/opcache/Optimizer/dce.c index c2f7550e91..91c9665d1d 100644 --- a/ext/opcache/Optimizer/dce.c +++ b/ext/opcache/Optimizer/dce.c @@ -152,7 +152,6 @@ static inline zend_bool may_have_side_effects( case ZEND_EXT_STMT: case ZEND_EXT_FCALL_BEGIN: case ZEND_EXT_FCALL_END: - case ZEND_EXT_NOP: case ZEND_TICKS: case ZEND_YIELD: case ZEND_YIELD_FROM: diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index f036950ffa..0560bcf2d5 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -112,10 +112,6 @@ static void zend_mark_reachable_blocks(const zend_op_array *op_array, zend_cfg * zend_basic_block *blocks = cfg->blocks; blocks[start].flags = ZEND_BB_START; - if (op_array->opcodes[0].opcode == ZEND_EXT_NOP - && (cfg->flags & ZEND_CFG_RECV_ENTRY)) { - blocks[1].flags |= ZEND_BB_RECV_ENTRY; - } zend_mark_reachable(op_array->opcodes, cfg, blocks + start); if (op_array->last_try_catch) { @@ -291,10 +287,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b /* Build CFG, Step 1: Find basic blocks starts, calculate number of blocks */ BB_START(0); - if (op_array->opcodes[0].opcode == ZEND_EXT_NOP - && (build_flags & ZEND_CFG_RECV_ENTRY)) { - BB_START(1); - } for (i = 0; i < op_array->last; i++) { zend_op *opline = op_array->opcodes + i; switch (opline->opcode) { @@ -434,7 +426,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b case ZEND_FUNC_GET_ARGS: flags |= ZEND_FUNC_VARARG; break; - case ZEND_EXT_NOP: case ZEND_EXT_STMT: flags |= ZEND_FUNC_HAS_EXTENDED_STMT; break; diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 7c9704954a..3dad8e4f91 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -2118,8 +2118,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } recv_emitted = 1; } else if (opline->opcode == ZEND_RECV) { - if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { + if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { /* skip */ continue; } else if (recv_emitted) { @@ -3540,9 +3539,6 @@ static void ZEND_FASTCALL zend_runtime_jit(void) /* restore original opcode handlers */ if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3576,9 +3572,6 @@ void zend_jit_check_funcs(HashTable *function_table, zend_bool is_method) { op_array = &func->op_array; opline = op_array->opcodes; if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3651,9 +3644,6 @@ static int zend_jit_setup_hot_counters(zend_op_array *op_array) if (JIT_G(hot_func)) { if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3692,9 +3682,6 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script) /* Set run-time JIT handler */ ZEND_ASSERT(zend_jit_runtime_jit_handler != NULL); if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } @@ -3714,9 +3701,6 @@ ZEND_EXT_API int zend_jit_op_array(zend_op_array *op_array, zend_script *script) ZEND_ASSERT(zend_jit_profile_jit_handler != NULL); if (op_array->function_name) { if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 65b6f17c95..4edb08e08f 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -1743,8 +1743,7 @@ propagate_arg: } } if (opline->opcode == ZEND_RECV_INIT - && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { + && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { /* RECV_INIT always copy the constant */ ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2)); } else if ((opline->opcode == ZEND_FE_FETCH_R || opline->opcode == ZEND_FE_FETCH_RW) @@ -1806,8 +1805,7 @@ propagate_arg: } } if (opline->opcode == ZEND_RECV_INIT - && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP) { + && !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { /* RECV_INIT always copy the constant */ ssa_var_info[ssa_ops[idx].result_def].type = _const_op_type(RT_CONSTANT(opline, opline->op2)); } else { @@ -1887,7 +1885,6 @@ propagate_arg: ssa_var_info[v].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) - && op_array->opcodes[0].opcode != ZEND_EXT_NOP && i < op_array->num_args) { /* Propagate argument type */ ssa_var_info[v].type &= STACK_INFO(frame->stack, i); @@ -5323,7 +5320,6 @@ done: || prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) && p->op_array->num_args && (p->op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0 - && (p->op_array->opcodes[0].opcode != ZEND_EXT_NOP) && ((p+1)->op == ZEND_JIT_TRACE_VM || (p+1)->op == ZEND_JIT_TRACE_END) && TRACE_FRAME_NUM_ARGS(call) < p->op_array->num_args @@ -6814,9 +6810,6 @@ static int zend_jit_setup_hot_trace_counters(zend_op_array *op_array) ZEND_ASSERT(zend_jit_func_trace_counter_handler != NULL); opline = op_array->opcodes; if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { - if (opline->opcode == ZEND_EXT_NOP) { - opline++; - } while (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT) { opline++; } diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index befc6717d9..daff6fb641 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -12199,8 +12199,7 @@ static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zen zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || - (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) || - op_array->opcodes[0].opcode == ZEND_EXT_NOP) { + (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { | cmp dword EX->This.u2.num_args, arg_num | jae >5 } diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 4629f94986..54d06a84c7 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -482,7 +482,8 @@ static zend_always_inline zend_bool phpdbg_is_ignored_opcode(zend_uchar opcode) || opcode == ZEND_DECLARE_CONST || opcode == ZEND_DECLARE_CLASS || opcode == ZEND_DECLARE_FUNCTION || opcode == ZEND_DECLARE_CLASS_DELAYED || opcode == ZEND_DECLARE_ANON_CLASS || opcode == ZEND_FAST_RET || opcode == ZEND_TICKS - || opcode == ZEND_EXT_STMT || opcode == ZEND_EXT_FCALL_BEGIN || opcode == ZEND_EXT_FCALL_END || opcode == ZEND_EXT_NOP || opcode == ZEND_BIND_GLOBAL + || opcode == ZEND_EXT_STMT || opcode == ZEND_EXT_FCALL_BEGIN || opcode == ZEND_EXT_FCALL_END + || opcode == ZEND_BIND_GLOBAL ; } |