mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: Fix incorrect register allocation
This commit is contained in:
commit
f4a3868639
3 changed files with 32 additions and 4 deletions
|
@ -1968,13 +1968,17 @@ static int zend_jit_compute_liveness(const zend_op_array *op_array, zend_ssa *ss
|
|||
if (ssa->ops[line].op1_use >= 0 &&
|
||||
intervals[ssa->ops[line].op1_use] &&
|
||||
ssa->ops[line].op1_use_chain < 0 &&
|
||||
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain) {
|
||||
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain &&
|
||||
(ssa->var_info[i].type & MAY_BE_ANY) ==
|
||||
(ssa->var_info[ssa->ops[line].op1_use].type & MAY_BE_ANY)) {
|
||||
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) {
|
||||
!ssa->vars[ssa->ops[line].op2_use].phi_use_chain &&
|
||||
(ssa->var_info[i].type & MAY_BE_ANY) ==
|
||||
(ssa->var_info[ssa->ops[line].op2_use].type & MAY_BE_ANY)) {
|
||||
zend_jit_add_hint(intervals, i, ssa->ops[line].op2_use);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3202,7 +3202,9 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
|
|||
if (ssa->ops[line].op1_use >= 0 &&
|
||||
intervals[ssa->ops[line].op1_use] &&
|
||||
ssa->ops[line].op1_use_chain < 0 &&
|
||||
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain) {
|
||||
!ssa->vars[ssa->ops[line].op1_use].phi_use_chain &&
|
||||
(ssa->var_info[i].type & MAY_BE_ANY) ==
|
||||
(ssa->var_info[ssa->ops[line].op1_use].type & MAY_BE_ANY)) {
|
||||
|
||||
zend_ssa_phi *phi = ssa->vars[ssa->ops[line].op1_use].definition_phi;
|
||||
if (phi &&
|
||||
|
@ -3215,7 +3217,9 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
|
|||
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) {
|
||||
!ssa->vars[ssa->ops[line].op2_use].phi_use_chain &&
|
||||
(ssa->var_info[i].type & MAY_BE_ANY) ==
|
||||
(ssa->var_info[ssa->ops[line].op2_use].type & MAY_BE_ANY)) {
|
||||
|
||||
zend_ssa_phi *phi = ssa->vars[ssa->ops[line].op2_use].definition_phi;
|
||||
if (phi &&
|
||||
|
|
20
ext/opcache/tests/jit/add_013.phpt
Normal file
20
ext/opcache/tests/jit/add_013.phpt
Normal file
|
@ -0,0 +1,20 @@
|
|||
--TEST--
|
||||
JIT ADD: 013 register allocation (incorrect hinting)
|
||||
--INI--
|
||||
opcache.enable=1
|
||||
opcache.enable_cli=1
|
||||
opcache.file_update_protection=0
|
||||
opcache.jit_buffer_size=1M
|
||||
--FILE--
|
||||
<?php
|
||||
function y(){
|
||||
$j = 2;
|
||||
for (; $a = $j - 7 + $y = $a - 7; $a = $a + 1 / 3) {
|
||||
$j++;
|
||||
if ($j > 4) break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
DONE
|
||||
--EXPECT--
|
||||
DONE
|
Loading…
Add table
Add a link
Reference in a new issue