1
0
mirror of https://github.com/php/php-src.git synced 2026-04-12 18:43:37 +02:00

Rename "var" to "stack". This is an abstract stack that holds TSSA variable numbers.

This commit is contained in:
Dmitry Stogov
2020-03-25 10:49:01 +03:00
parent af3142daaf
commit ce8202f996

View File

@@ -513,7 +513,7 @@ static zend_always_inline int zend_jit_trace_op_len(const zend_op *opline)
}
}
static int zend_jit_trace_add_phis(zend_jit_trace_rec *trace_buffer, uint32_t ssa_vars_count, zend_ssa *tssa, int *var)
static int zend_jit_trace_add_phis(zend_jit_trace_rec *trace_buffer, uint32_t ssa_vars_count, zend_ssa *tssa, zend_jit_trace_stack *stack)
{
const zend_op_array *op_array;
zend_jit_trace_rec *p;
@@ -575,13 +575,13 @@ static int zend_jit_trace_add_phis(zend_jit_trace_rec *trace_buffer, uint32_t ss
ZEND_MM_ALIGNED_SIZE(sizeof(int) * 2) +
sizeof(void*) * 2);
phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)));
phi->sources[0] = var[k];
phi->sources[0] = stack[k];
phi->sources[1] = -1;
phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * 2));
phi->pi = -1;
phi->var = k;
phi->ssa_var = ssa_vars_count;
var[k] = ssa_vars_count;
stack[k] = ssa_vars_count;
ssa_vars_count++;
phi->block = 1;
if (prev) {
@@ -814,7 +814,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
const zend_op **ssa_opcodes;
zend_jit_trace_rec *p;
int i, v, idx, len, ssa_ops_count, vars_count, ssa_vars_count;
int *var;
zend_jit_trace_stack *stack;
uint32_t build_flags = ZEND_SSA_RC_INFERENCE | ZEND_SSA_USE_CV_RESULTS;
uint32_t optimization_level = ZCG(accel_directives).optimization_level;
int call_level, level, num_op_arrays;
@@ -955,15 +955,15 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
} else {
ssa_vars_count = op_array->last_var + op_array->T;
}
var = frame->stack;
stack = frame->stack;
for (i = 0; i < ssa_vars_count; i++) {
var[i] = i;
stack[i] = i;
}
if (trace_buffer->stop == ZEND_JIT_TRACE_STOP_LOOP) {
// TODO: For tracing, it's possible, to create pseudo Phi functions
// at the end of loop, without this additional pass (like LuaJIT) ???
ssa_vars_count = zend_jit_trace_add_phis(trace_buffer, ssa_vars_count, tssa, var);
ssa_vars_count = zend_jit_trace_add_phis(trace_buffer, ssa_vars_count, tssa, stack);
}
p = trace_buffer + ZEND_JIT_TRACE_START_REC_SIZE;
@@ -973,37 +973,37 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
if (p->op == ZEND_JIT_TRACE_VM) {
opline = p->opline;
ssa_opcodes[idx] = opline;
ssa_vars_count = zend_ssa_rename_op(op_array, opline, idx, build_flags, ssa_vars_count, ssa_ops, var);
ssa_vars_count = zend_ssa_rename_op(op_array, opline, idx, build_flags, ssa_vars_count, ssa_ops, stack);
idx++;
len = zend_jit_trace_op_len(p->opline);
while (len > 1) {
opline++;
ssa_opcodes[idx] = opline;
if (opline->opcode != ZEND_OP_DATA) {
ssa_vars_count = zend_ssa_rename_op(op_array, opline, idx, build_flags, ssa_vars_count, ssa_ops, var);
ssa_vars_count = zend_ssa_rename_op(op_array, opline, idx, build_flags, ssa_vars_count, ssa_ops, stack);
}
idx++;
len--;
}
} else if (p->op == ZEND_JIT_TRACE_ENTER) {
frame = zend_jit_trace_call_frame(frame, op_array);
var = frame->stack;
stack = frame->stack;
op_array = p->op_array;
level++;
ZEND_ASSERT(ssa_vars_count < 0xff);
p->first_ssa_var = ssa_vars_count;
for (i = 0; i < op_array->last_var; i++) {
var[i] = ssa_vars_count++;
stack[i] = ssa_vars_count++;
}
} else if (p->op == ZEND_JIT_TRACE_BACK) {
op_array = p->op_array;
frame = zend_jit_trace_ret_frame(frame, op_array);
var = frame->stack;
stack = frame->stack;
if (level == 0) {
ZEND_ASSERT(ssa_vars_count <= 0xff);
p->first_ssa_var = ssa_vars_count;
for (i = 0; i < op_array->last_var + op_array->T; i++) {
var[i] = ssa_vars_count++;
stack[i] = ssa_vars_count++;
}
} else {
level--;
@@ -1042,7 +1042,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
zend_ssa_phi *phi = tssa->blocks[1].phis;
while (phi) {
phi->sources[1] = var[phi->var];
phi->sources[1] = stack[phi->var];
ssa_vars[phi->ssa_var].var = phi->var;
ssa_vars[phi->ssa_var].definition_phi = phi;
ssa_vars[phi->sources[0]].phi_use_chain = phi;