]> granicus.if.org Git - php/commitdiff
Remove useless register allocations
authorDmitry Stogov <dmitry@zend.com>
Thu, 27 Aug 2020 21:02:10 +0000 (00:02 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 27 Aug 2020 21:02:10 +0000 (00:02 +0300)
ext/opcache/jit/zend_jit_trace.c

index e549ba7ece6751b9dcab004e55188e774bf37076..5e4a6f4d1fe9b0bdb9505afa4ba25d754ebf60ee 100644 (file)
@@ -2633,6 +2633,13 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
                                if (intervals[def]) {
                                        if (!intervals[use]) {
                                                intervals[def]->flags |= ZREG_LOAD;
+                                               if ((intervals[def]->flags & ZREG_LAST_USE)
+                                                && ssa->vars[def].use_chain >= 0
+                                                && ssa->vars[def].use_chain == intervals[def]->range.end) {
+                                                       /* remove interval used once */
+                                                       intervals[def] = NULL;
+                                                       count--;
+                                               }
                                        } else if (intervals[def]->reg != intervals[use]->reg) {
                                                intervals[def]->flags |= ZREG_LOAD;
                                                if (ssa->vars[use].use_chain >= 0) {