diff options
author | Dmitry Stogov <dmitry@zend.com> | 2020-10-09 14:31:20 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2020-10-09 14:31:20 +0300 |
commit | 6f888b90c589cebaf6b5367ba59dabc65f1a18d8 (patch) | |
tree | db2c4b17cc1ab2bdfb13fa722c5d62a13f9b65c7 /ext/opcache/jit/zend_jit_trace.c | |
parent | 503999910b186d11345a0277d1d34d4b30ed4e49 (diff) | |
download | php-git-6f888b90c589cebaf6b5367ba59dabc65f1a18d8.tar.gz |
Eliminate more dead type stores
Diffstat (limited to 'ext/opcache/jit/zend_jit_trace.c')
-rw-r--r-- | ext/opcache/jit/zend_jit_trace.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 93dd114818..f9c9a96192 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -3280,8 +3280,19 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par uint32_t info = ssa->var_info[i].type; if (!(info & MAY_BE_GUARD) && has_concrete_type(info)) { - SET_STACK_TYPE(stack, i, concrete_type(info), - (i >= parent_vars_count || STACK_REG(parent_stack, i) >= ZREG_NUM)); + uint8_t type, mem_type; + + type = concrete_type(info); + if (i < parent_vars_count + && STACK_TYPE(parent_stack, i) == type) { + mem_type = STACK_MEM_TYPE(parent_stack, i); + if (mem_type != IS_UNKNOWN) { + SET_STACK_TYPE(stack, i, mem_type, 1); + } + SET_STACK_TYPE(stack, i, type, 0); + } else { + SET_STACK_TYPE(stack, i, type, 1); + } } else if (zend_jit_var_may_alias(op_array, op_array_ssa, i) != NO_ALIAS) { SET_STACK_TYPE(stack, i, IS_UNKNOWN, 1); } else if (i < parent_vars_count |