[php-src] PR #24084: JIT: Optimize array checks in comparisons

From: Date: Fri, 02 Oct 2026 19:15:30 +0000
Subject: [php-src] PR #24084: JIT: Optimize array checks in comparisons
Groups: php.git-pulls 
Request: Send a blank email to git-pulls+get-39091@lists.php.net to get a copy of this message
Pull Request: https://github.com/php/php-src/pull/24084 Author: ndossche There are two optimizations: 1. This patch implements the JIT counterpart of the VM change 2d6b8694 to optimize comparisons against empty arrays. 2. This patch ensures that if a type can be array, the element count check happens inline rather than going to a slow path. PHP demo code for #1: ```php function f(array $a) { if ($a) return 0; return 1; } ``` Before #1 (for func JIT in this case): ```asm .L1: movq $0x418d88c0, (%r14) ; EX(opline) = opline leaq 0x50(%r14), %rdi ; arg = &CV0($a) movabsq $zend_is_true, %rax callq *%rax testb %al, %al je .L2 ``` After #1: ```asm .L1: movq 0x50(%r14), %rax ; Z_ARRVAL($a) cmpl $0, 0x1c(%rax) ; compare nNumOfElements je .L2 ``` PHP demo code for #2: ```php function is_empty(array $a) { if ($a === []) return 1; return 2; } ``` Before #2: ```asm .L1: leaq 0x50(%r14), %rdi ; arg1 = &CV0($a) movl $0x418d8ad8, %esi ; arg2 = &literal [] movabsq $zend_is_identical, %rax callq *%rax testb %al, %al je .L2 ``` After #2: ```asm .L1: movq 0x50(%r14), %rax ; Z_ARRVAL($a) cmpl $0, 0x1c(%rax) ; ->nNumOfElements jne .L2 ``` It ain't much, but it should help. I think many small frontend improvements can make a nice change in total together.

« previous php.git-pulls (#39091) next »