]> granicus.if.org Git - php/commitdiff
Move invariant type guard out of loop
authorDmitry Stogov <dmitry@zend.com>
Mon, 28 Sep 2020 20:54:28 +0000 (23:54 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 28 Sep 2020 20:54:28 +0000 (23:54 +0300)
ext/opcache/jit/zend_jit_trace.c

index 102d6a52f66f7f73039e0fd04694516c8d66415c..8057e8131b9f47d2783dc387a8ce483a33f90480 100644 (file)
@@ -2005,7 +2005,8 @@ propagate_arg:
                                                ssa_var_info[phi->ssa_var].type = t & ~MAY_BE_GUARD;
                                        }
                                } else if ((t1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == (t & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF))) {
-                                       if (!(t1 & MAY_BE_GUARD)) {
+                                       if (!(t1 & MAY_BE_GUARD)
+                                        || is_checked_guard(tssa, ssa_opcodes, phi->sources[1], phi->ssa_var)) {
                                                ssa_var_info[phi->ssa_var].type = t & ~MAY_BE_GUARD;
                                                ssa_var_info[phi->sources[0]].type = t | MAY_BE_GUARD;
                                        }