Closed
Description
Description
The following code:
<?php
function add($x){
return $x + 1;
}
$x = 0;
for($i = 0; $i < 1000; $i++) {
if($i % 10 == 0) {
$x = add($x);
}
if($i % 8 == 0) {
$x = add($x);
}
}
echo("x=$x\n");
?>
Duplicated JITTed code in this case:
---- TRACE 2 start (side trace 1/7) $main() /home/wxue/php-src/t2.php:12
0013 INIT_FCALL 1 112 string("add")
>init add
0014 SEND_VAR CV0($x) 1 ; op1(int)
0015 V2 = DO_UCALL
>enter add
0001 T1 = ADD CV0($x) int(1) ; op1(int)
0002 RETURN T1 ; op1(int)
<back /home/wxue/php-src/t2.php
0016 ASSIGN CV0($x) V2 ; op1(int) op2(int)
0017 PRE_INC CV1($i) ; op1(int)
---- TRACE 2 stop (link to 1)
---- TRACE 3 start (side trace 1/4) $main() /home/wxue/php-src/t2.php:9
0006 INIT_FCALL 1 112 string("add")
>init add
0007 SEND_VAR CV0($x) 1 ; op1(int)
0008 V2 = DO_UCALL
>enter add
0001 T1 = ADD CV0($x) int(1) ; op1(int)
0002 RETURN T1 ; op1(int)
<back /home/wxue/php-src/t2.php
0009 ASSIGN CV0($x) V2 ; op1(int) op2(int)
0010 T3 = MOD CV1($i) int(8) ; op1(int)
0011 T2 = IS_EQUAL T3 int(0) ; op1(int)
0012 ;JMPZ T2 0017
0017 PRE_INC CV1($i) ; op1(int)
---- TRACE 3 stop (link to 1)
But I expected the add function to be JITTed only once.
PHP Version
PHP 8.1.4
Operating System
Ubuntu 20.04