]> granicus.if.org Git - php/commitdiff
Skip life range with LOAD and single use
authorDmitry Stogov <dmitry@zend.com>
Fri, 24 Apr 2020 13:14:58 +0000 (16:14 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 24 Apr 2020 13:14:58 +0000 (16:14 +0300)
ext/opcache/jit/zend_jit_trace.c

index 4a687dd4c9cfe10950e65de41d5527d73eb66c33..bbebebed12db929bce3b8c339a3a8ffedc0d3af1 100644 (file)
@@ -2094,6 +2094,12 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
        for (i = 0; i < ssa->vars_count; i++) {
                if (start[i] >= 0 && end[i] >= 0) {
                        ZEND_ASSERT(j < count);
+                       if ((flags[i] & ZREG_LOAD) &&
+                           (flags[i] & ZREG_LAST_USE) &&
+                           end[i] == ssa->vars[i].use_chain) {
+                               /* skip life range with single use */
+                               continue;
+                       }
                        intervals[i] = &list[j];
                        list[j].ssa_var = i;
                        list[j].reg = ZREG_NONE;