summaryrefslogtreecommitdiff
path: root/ext/opcache/jit/zend_jit.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/jit/zend_jit.c')
-rw-r--r--ext/opcache/jit/zend_jit.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c
index 743bc7b432..847b6130e9 100644
--- a/ext/opcache/jit/zend_jit.c
+++ b/ext/opcache/jit/zend_jit.c
@@ -591,7 +591,16 @@ static int zend_may_overflow(const zend_op *opline, zend_op_array *op_array, zen
static int zend_jit_build_cfg(zend_op_array *op_array, zend_cfg *cfg)
{
- if (zend_build_cfg(&CG(arena), op_array, ZEND_CFG_STACKLESS | ZEND_CFG_RECV_ENTRY | ZEND_RT_CONSTANTS | ZEND_CFG_NO_ENTRY_PREDECESSORS | ZEND_SSA_RC_INFERENCE_FLAG | ZEND_SSA_USE_CV_RESULTS, cfg) != SUCCESS) {
+ uint32_t flags;
+
+ flags = ZEND_CFG_STACKLESS | ZEND_RT_CONSTANTS | ZEND_CFG_NO_ENTRY_PREDECESSORS | ZEND_SSA_RC_INFERENCE_FLAG | ZEND_SSA_USE_CV_RESULTS;
+
+ if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
+ /* First RECV/RECV_INIT instructions may be skipped */
+ flags |= ZEND_CFG_RECV_ENTRY;
+ }
+
+ if (zend_build_cfg(&CG(arena), op_array, flags, cfg) != SUCCESS) {
return FAILURE;
}