From 6ab2e82ab56c51f203256bd61207c910ce1b6e7e Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 24 Apr 2020 16:32:31 +0300 Subject: [PATCH] Avoid STORE of register inherited from parent trace --- ext/opcache/jit/zend_jit_trace.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index bbebebed12..f7408b6707 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -2513,8 +2513,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par // TODO: Merge two loops implementing paralel move ??? for (i = 0; i < parent_vars_count; i++) { if (STACK_REG(parent_stack, i) != ZREG_NONE) { - // TODO: optimize out useless stores ???? - if (!zend_jit_store_var(&dasm_state, ssa->var_info[i].type, i, STACK_REG(parent_stack, i))) { + if (ra && ra[i] && ra[i]->reg == STACK_REG(parent_stack, i)) { + /* register already loaded by parent trace */ + SET_STACK_REG(stack, i, ra[i]->reg); + } else if (!zend_jit_store_var(&dasm_state, ssa->var_info[i].type, i, STACK_REG(parent_stack, i))) { goto jit_failure; } } -- 2.50.1