Skip to content

php-in-php: JIT ArrayFindHelper — route closure callbacks through ArrayFindJitHelper PHP not LLVM loops (#1492) #17547

Description

@PurHur

Category

php-in-php · JIT shrink · #1492

Problem

Phase 1 (#14842) routes string-builtin array_find family predicates through ArrayFindJitHelper::walkWithBuiltin PHP. Closure/arrow callbacks still lower via ~800-line LLVM loops in lib/JIT/ArrayFindHelper.php (resolvePredicateHandler + hashtable walk).

Migrate closures to ArrayFindJitHelper::walkWithClosure via ArrayFindRuntime + JitVmHelperLink, matching ArrayMapJitHelper / ArrayReduceJitHelper (#14977, #14979).

php-src reference

PHP implementation target

Path Work
ext/standard/ArrayFindJitHelper.php Add walkWithClosure() using VmClosureCall + VmArrayValueCallback::predicateMatches
lib/JIT/Builtin/ArrayFindRuntime.php Closure ABI bridge (__array_find__closure)
lib/JIT/ArrayFindHelper.php Shrink — delegate closure callbacks to ArrayFindRuntime; keep LLVM for user-function proxies until next slice

Repro / verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter array_find_closure'
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter ArrayFindRuntimeShrinkTest'

Done when

  • Closure JIT path uses ArrayFindJitHelper PHP (no closure branch in LLVM walk loops)
  • ArrayFindHelper.php line count reduced; ArrayFindRuntimeShrinkTest updated
  • Compliance green: array_find_closure_inline.phpt, array_find_key_callback_order.phpt, array_find_strict_jit.phpt

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:compilerCompiler / CFG / JITenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-0:FoundationPhase 0 – foundation & DevEx

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions