Skip to content

Commit 5f2adfb

Browse files
committed
Fixed live-range interval construction (close all frames)
1 parent ab9d10d commit 5f2adfb

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2019,6 +2019,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
20192019
(zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(op_array);
20202020
op_array_ssa = &jit_extension->func_info.ssa;
20212021
frame = JIT_G(current_frame);
2022+
frame->prev = NULL;
2023+
frame->func = (const zend_function*)op_array;
20222024
stack = frame->stack;
20232025

20242026
count = 0;
@@ -2256,7 +2258,11 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22562258
}
22572259
} else if (p->op == ZEND_JIT_TRACE_ENTER) {
22582260
/* New call frames */
2261+
zend_jit_trace_stack_frame *prev_frame = frame;
2262+
22592263
frame = zend_jit_trace_call_frame(frame, op_array);
2264+
frame->prev = prev_frame;
2265+
frame->func = (const zend_function*)p->op_array;
22602266
stack = frame->stack;
22612267
op_array = p->op_array;
22622268
jit_extension =
@@ -2292,6 +2298,8 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22922298
stack = frame->stack;
22932299
if (level == 0) {
22942300
/* New return frames */
2301+
frame->prev = NULL;
2302+
frame->func = (const zend_function*)op_array;
22952303
j = ZEND_JIT_TRACE_GET_FIRST_SSA_VAR(p->info);
22962304
for (i = 0; i < op_array->last_var + op_array->T; i++) {
22972305
SET_STACK_VAR(stack, i, j);
@@ -2335,6 +2343,14 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
23352343
for (i = 0; i < op_array->last_var; i++) {
23362344
zend_jit_close_var(stack, i, start, end, flags, idx);
23372345
}
2346+
while (frame->prev) {
2347+
frame = frame->prev;
2348+
op_array = &frame->func->op_array;
2349+
stack = frame->stack;
2350+
for (i = 0; i < op_array->last_var; i++) {
2351+
zend_jit_close_var(stack, i, start, end, flags, idx);
2352+
}
2353+
}
23382354
}
23392355

23402356
if (!count) {

0 commit comments

Comments
 (0)