]> granicus.if.org Git - php/commitdiff
Fixed tracing JIT register allocator (failure on ext/opcache/tests/jit/assign_002...
authorDmitry Stogov <dmitry@zend.com>
Fri, 29 May 2020 10:27:47 +0000 (13:27 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 29 May 2020 10:27:47 +0000 (13:27 +0300)
ext/opcache/jit/zend_jit_trace.c

index 741662da552282c7935f36b186e73c8e3409b7ec..f72c87e4f7a7feae05346df5bcfe56e2de51c250 100644 (file)
@@ -2006,9 +2006,18 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
                                 && (ssa->vars[ssa_op->result_def].use_chain >= 0
                              || ssa->vars[ssa_op->result_def].phi_use_chain)
                                 && zend_jit_var_supports_reg(ssa, ssa_op->result_def)) {
-                                       start[ssa_op->result_def] = idx;
-                                       vars_op_array[ssa_op->result_def] = op_array;
-                                       count++;
+                                       if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD)
+                                        || opline->opcode == ZEND_PRE_INC
+                                        || opline->opcode == ZEND_PRE_DEC
+                                        || opline->opcode == ZEND_POST_INC
+                                        || opline->opcode == ZEND_POST_DEC
+                                        || opline->opcode == ZEND_ADD
+                                        || opline->opcode == ZEND_SUB
+                                        || opline->opcode == ZEND_MUL) {
+                                               start[ssa_op->result_def] = idx;
+                                               vars_op_array[ssa_op->result_def] = op_array;
+                                               count++;
+                                       }
                                }
                                if (ssa_op->op1_def >= 0
                                 && (ssa->vars[ssa_op->op1_def].use_chain >= 0