Skip to content

Commit bcadf9d

Browse files
committed
Shrink live intervals of IS_VAR/IS_TMP_VAR
1 parent c6c1682 commit bcadf9d

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2105,9 +2105,25 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
21052105
&& !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) {
21062106
if (support_opline) {
21072107
zend_jit_trace_use_var(idx, ssa_op->op1_use, ssa_op->op1_def, ssa_op->op1_use_chain, start, end, flags, ssa, ssa_opcodes, op_array, op_array_ssa);
2108-
if (opline->opcode == ZEND_CASE && opline->op1_type != IS_CV) {
2109-
/* The value may be used outside of the trace */
2110-
flags[ssa_op->op1_use] |= ZREG_STORE;
2108+
if (opline->op1_type != IS_CV) {
2109+
if (opline->opcode == ZEND_CASE
2110+
|| opline->opcode == ZEND_CASE_STRICT
2111+
|| opline->opcode == ZEND_SWITCH_LONG
2112+
|| opline->opcode == ZEND_MATCH
2113+
|| opline->opcode == ZEND_FETCH_LIST_R
2114+
|| opline->opcode == ZEND_COPY_TMP
2115+
|| opline->opcode == ZEND_SWITCH_STRING
2116+
|| opline->opcode == ZEND_FE_FETCH_R
2117+
|| opline->opcode == ZEND_FE_FETCH_RW
2118+
|| opline->opcode == ZEND_FETCH_LIST_W
2119+
|| opline->opcode == ZEND_VERIFY_RETURN_TYPE
2120+
|| opline->opcode == ZEND_BIND_LEXICAL
2121+
|| opline->opcode == ZEND_ROPE_ADD) {
2122+
/* The value is kept alive and may be used outside of the trace */
2123+
flags[ssa_op->op1_use] |= ZREG_STORE;
2124+
} else {
2125+
flags[ssa_op->op1_use] |= ZREG_LAST_USE;
2126+
}
21112127
}
21122128
} else {
21132129
start[ssa_op->op1_use] = -1;
@@ -2121,6 +2137,9 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
21212137
&& !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op2_use)) {
21222138
if (support_opline) {
21232139
zend_jit_trace_use_var(idx, ssa_op->op2_use, ssa_op->op2_def, ssa_op->op2_use_chain, start, end, flags, ssa, ssa_opcodes, op_array, op_array_ssa);
2140+
if (opline->op2_type != IS_CV) {
2141+
flags[ssa_op->op2_use] |= ZREG_LAST_USE;
2142+
}
21242143
} else {
21252144
start[ssa_op->op2_use] = -1;
21262145
end[ssa_op->op2_use] = -1;
@@ -2215,6 +2234,9 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22152234
&& !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) {
22162235
if (support_opline) {
22172236
zend_jit_trace_use_var(idx, ssa_op->op1_use, ssa_op->op1_def, ssa_op->op1_use_chain, start, end, flags, ssa, ssa_opcodes, op_array, op_array_ssa);
2237+
if (opline->op1_type != IS_CV) {
2238+
flags[ssa_op->op1_use] |= ZREG_LAST_USE;
2239+
}
22182240
} else {
22192241
start[ssa_op->op1_use] = -1;
22202242
end[ssa_op->op1_use] = -1;

0 commit comments

Comments
 (0)