summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2020-11-11 17:34:46 +0300
committerDmitry Stogov <dmitry@zend.com>2020-11-11 17:34:46 +0300
commit2d2d42b2681b97de654b02c0edbac87dc94e0ce5 (patch)
tree1f6a114fa885d5b8d95a92905c42ffbb6d979787
parentde359c00b41477e80f587612898a957500ff2c0f (diff)
downloadphp-git-2d2d42b2681b97de654b02c0edbac87dc94e0ce5.tar.gz
Fixed incorrect invariant guard motion
-rw-r--r--ext/opcache/jit/zend_jit_trace.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c
index 85f09d3275..41e81b63f7 100644
--- a/ext/opcache/jit/zend_jit_trace.c
+++ b/ext/opcache/jit/zend_jit_trace.c
@@ -2197,7 +2197,8 @@ propagate_arg:
ssa_var_info[phi->sources[0]].type = MAY_BE_GUARD | (t & t0);
}
if ((t1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) != (t & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF))) {
- if (is_checked_guard(tssa, ssa_opcodes, phi->sources[1], phi->ssa_var)) {
+ if (((t & t1) & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) != 0
+ && is_checked_guard(tssa, ssa_opcodes, phi->sources[1], phi->ssa_var)) {
ssa_var_info[phi->sources[1]].type = MAY_BE_GUARD | (t & t1);
ssa_var_info[phi->ssa_var].type = t & ~MAY_BE_GUARD;
}