@@ -2918,6 +2918,7 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst,
2918
2918
const zend_op * opline ,
2919
2919
zend_jit_trace_stack * parent_stack ,
2920
2920
int parent_vars_count ,
2921
+ zend_ssa * ssa ,
2921
2922
zend_jit_trace_stack * stack ,
2922
2923
zend_lifetime_interval * * ra )
2923
2924
{
@@ -2931,7 +2932,9 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst,
2931
2932
2932
2933
if (reg != ZREG_NONE ) {
2933
2934
if (reg < ZREG_NUM ) {
2934
- if (ra && ra [i ] && ra [i ]-> reg == reg ) {
2935
+ if (ssa && ssa -> vars [i ].no_val ) {
2936
+ /* pass */
2937
+ } else if (ra && ra [i ] && ra [i ]-> reg == reg ) {
2935
2938
/* register already loaded by parent trace */
2936
2939
if (stack ) {
2937
2940
SET_STACK_REG_EX (stack , i , reg , STACK_FLAGS (parent_stack , i ));
@@ -2964,7 +2967,9 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst,
2964
2967
2965
2968
if (reg != ZREG_NONE ) {
2966
2969
if (reg < ZREG_NUM ) {
2967
- if (ra && ra [i ] && ra [i ]-> reg == reg ) {
2970
+ if (ssa && ssa -> vars [i ].no_val ) {
2971
+ /* pass */
2972
+ } else if (ra && ra [i ] && ra [i ]-> reg == reg ) {
2968
2973
uint8_t type = STACK_TYPE (parent_stack , i );
2969
2974
2970
2975
if (stack ) {
@@ -3336,7 +3341,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3336
3341
if (!zend_jit_trace_deoptimization (& dasm_state ,
3337
3342
zend_jit_traces [parent_trace ].exit_info [exit_num ].flags ,
3338
3343
zend_jit_traces [parent_trace ].exit_info [exit_num ].opline ,
3339
- parent_stack , parent_vars_count , stack , ra )) {
3344
+ parent_stack , parent_vars_count , ssa , stack , ra )) {
3340
3345
goto jit_failure ;
3341
3346
}
3342
3347
}
@@ -5746,7 +5751,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5746
5751
} else if (p -> stop == ZEND_JIT_TRACE_STOP_LINK
5747
5752
|| p -> stop == ZEND_JIT_TRACE_STOP_INTERPRETER ) {
5748
5753
if (!zend_jit_trace_deoptimization (& dasm_state , 0 , NULL ,
5749
- stack , op_array -> last_var + op_array -> T , NULL , NULL )) {
5754
+ stack , op_array -> last_var + op_array -> T , NULL , NULL , NULL )) {
5750
5755
goto jit_failure ;
5751
5756
}
5752
5757
if (p -> stop == ZEND_JIT_TRACE_STOP_LINK ) {
@@ -5910,7 +5915,7 @@ static const void *zend_jit_trace_exit_to_vm(uint32_t trace_num, uint32_t exit_n
5910
5915
if (!zend_jit_trace_deoptimization (& dasm_state ,
5911
5916
zend_jit_traces [trace_num ].exit_info [exit_num ].flags ,
5912
5917
zend_jit_traces [trace_num ].exit_info [exit_num ].opline ,
5913
- stack , stack_size , NULL , NULL )) {
5918
+ stack , stack_size , NULL , NULL , NULL )) {
5914
5919
goto jit_failure ;
5915
5920
}
5916
5921
0 commit comments