Skip to content

Commit f7608df

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: Tracing JIT: Eliminate useless guards for CONCAT
2 parents 1f5562a + 6c3816c commit f7608df

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1745,6 +1745,14 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
17451745
}
17461746
ADD_OP1_TRACE_GUARD();
17471747
break;
1748+
case ZEND_CONCAT:
1749+
case ZEND_FAST_CONCAT:
1750+
if ((opline->op1_type == IS_CONST || orig_op1_type == IS_STRING)
1751+
&& (opline->op2_type == IS_CONST || orig_op2_type == IS_STRING)) {
1752+
ADD_OP2_TRACE_GUARD();
1753+
ADD_OP1_TRACE_GUARD();
1754+
}
1755+
break;
17481756
case ZEND_IS_EQUAL:
17491757
case ZEND_IS_NOT_EQUAL:
17501758
case ZEND_IS_SMALLER:
@@ -1763,8 +1771,6 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
17631771
case ZEND_SUB:
17641772
case ZEND_MUL:
17651773
// case ZEND_DIV: // TODO: check for division by zero ???
1766-
case ZEND_CONCAT:
1767-
case ZEND_FAST_CONCAT:
17681774
ADD_OP2_TRACE_GUARD();
17691775
ZEND_FALLTHROUGH;
17701776
case ZEND_ECHO:
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--TEST--
2+
JIT FETCH_DIM_R: 012
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.file_update_protection=0
7+
opcache.jit_buffer_size=1M
8+
--FILE--
9+
<?php
10+
function foo() {
11+
$a = 0; $a1 = []; $a2 = [];
12+
for($i = 0; $i < 6; $i++) {
13+
$a1[] = &$y;
14+
$a2["$a1[$a] "] = $a += $y;
15+
}
16+
var_dump($a1, $a2);
17+
}
18+
foo();
19+
?>
20+
--EXPECT--
21+
array(6) {
22+
[0]=>
23+
&NULL
24+
[1]=>
25+
&NULL
26+
[2]=>
27+
&NULL
28+
[3]=>
29+
&NULL
30+
[4]=>
31+
&NULL
32+
[5]=>
33+
&NULL
34+
}
35+
array(1) {
36+
[" "]=>
37+
int(0)
38+
}

0 commit comments

Comments
 (0)