Skip to content

Commit 46c0be5

Browse files
committed
Merge branch 'PHP-8.1'
* PHP-8.1: Tracing JIT: Eliminate useless guards for CONCAT
2 parents bf079d0 + f7608df commit 46c0be5

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
@@ -1742,6 +1742,14 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
17421742
}
17431743
ADD_OP1_TRACE_GUARD();
17441744
break;
1745+
case ZEND_CONCAT:
1746+
case ZEND_FAST_CONCAT:
1747+
if ((opline->op1_type == IS_CONST || orig_op1_type == IS_STRING)
1748+
&& (opline->op2_type == IS_CONST || orig_op2_type == IS_STRING)) {
1749+
ADD_OP2_TRACE_GUARD();
1750+
ADD_OP1_TRACE_GUARD();
1751+
}
1752+
break;
17451753
case ZEND_IS_EQUAL:
17461754
case ZEND_IS_NOT_EQUAL:
17471755
case ZEND_IS_SMALLER:
@@ -1760,8 +1768,6 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
17601768
case ZEND_SUB:
17611769
case ZEND_MUL:
17621770
// case ZEND_DIV: // TODO: check for division by zero ???
1763-
case ZEND_CONCAT:
1764-
case ZEND_FAST_CONCAT:
17651771
ADD_OP2_TRACE_GUARD();
17661772
ZEND_FALLTHROUGH;
17671773
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)