mirror of
https://github.com/php/php-src.git
synced 2026-04-03 06:02:23 +02:00
Improve register allocator (give preference to loop variables).
This commit is contained in:
@@ -964,7 +964,7 @@ static zend_lifetime_interval *zend_jit_sort_intervals(zend_lifetime_interval **
|
||||
if (ival) {
|
||||
if ((ival->range.start > last->range.start) ||
|
||||
(ival->range.start == last->range.start &&
|
||||
((!ival->hint && last->hint) ||
|
||||
((!ival->hint && last->hint && last->hint != ival) ||
|
||||
ival->range.end > last->range.end))) {
|
||||
last->list_next = ival;
|
||||
last = ival;
|
||||
@@ -979,7 +979,7 @@ static zend_lifetime_interval *zend_jit_sort_intervals(zend_lifetime_interval **
|
||||
break;
|
||||
} else if ((ival->range.start < (*p)->range.start) ||
|
||||
(ival->range.start == (*p)->range.start &&
|
||||
((ival->hint && !(*p)->hint) ||
|
||||
((ival->hint && !(*p)->hint && ival->hint != *p) ||
|
||||
ival->range.end < (*p)->range.end))) {
|
||||
ival->list_next = *p;
|
||||
*p = ival;
|
||||
|
||||
@@ -2641,12 +2641,26 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
|
||||
intervals[ssa->ops[line].op1_use] &&
|
||||
ssa->ops[line].op1_use_chain < 0 &&
|
||||
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain) {
|
||||
|
||||
zend_ssa_phi *phi = ssa->vars[ssa->ops[line].op1_use].definition_phi;
|
||||
if (phi &&
|
||||
intervals[phi->sources[1]] &&
|
||||
intervals[phi->sources[1]]->hint == intervals[ssa->ops[line].op1_use]) {
|
||||
break;
|
||||
}
|
||||
zend_jit_add_hint(intervals, i, ssa->ops[line].op1_use);
|
||||
} else if (opline->opcode != ZEND_SUB &&
|
||||
ssa->ops[line].op2_use >= 0 &&
|
||||
intervals[ssa->ops[line].op2_use] &&
|
||||
ssa->ops[line].op2_use_chain < 0 &&
|
||||
!ssa->vars[ssa->ops[line].op2_use].phi_use_chain) {
|
||||
|
||||
zend_ssa_phi *phi = ssa->vars[ssa->ops[line].op2_use].definition_phi;
|
||||
if (phi &&
|
||||
intervals[phi->sources[1]] &&
|
||||
intervals[phi->sources[1]]->hint == intervals[ssa->ops[line].op2_use]) {
|
||||
break;
|
||||
}
|
||||
zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user