Skip to content

php-in-php: route session_encode/decode JIT through SessionEncodeJitHelper (#9440) - #11074

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-9440-session-encode-jit
Jun 24, 2026
Merged

php-in-php: route session_encode/decode JIT through SessionEncodeJitHelper (#9440)#11074
PurHur merged 1 commit into
masterfrom
agent/issue-9440-session-encode-jit

Conversation

@PurHur

@PurHur PurHur commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • Replace LLVM wire serializer loops in SessionEncodeRuntime.php (~530→304 lines) with thin bridges into SessionEncodeJitHelperVmSessionSerializer PHP
  • Add SerializeJitHelper for JIT session wire value serialization without VM Context
  • VM decodePhp / encodePhp unchanged (php-src-strict); JIT wire path uses VmUnserializeFormat + SerializeJitHelper

Closes #9440

php-src reference

  • ext/session/session.cphp_session_encode() / php_session_decode()
  • ext/session/mod_php.c — php handler wire format

LLVM shrink

  • Removed: ~226 lines from SessionEncodeRuntime.php (emitEncodeWire, emitDecodeWire, emitHashtableSetParsed, libc memchr unserialize loop)
  • Added: thin bridges + SessionEncodeJitHelper.php / SerializeJitHelper.php

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter SessionEncode test/unit/SessionEncodeRuntimeShrinkTest.php'
# OK (2 tests, 12 assertions)

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter session_encode test/compliance/'
# OK (6 tests, 6 assertions)

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php bin/vm.php -r '"'"'session_start(); $_SESSION["k"]="v"; echo session_encode();'"'"'
php bin/jit.php -r '"'"'session_start(); $_SESSION["k"]="v"; echo session_encode();'"'"''
# Both print: k|s:1:"v";

Made with Cursor

…elper (#9440)

Replace ~226 lines of LLVM wire serializer loops in SessionEncodeRuntime with
thin bridges into VmSessionSerializer via compiled SessionEncodeJitHelper PHP.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

php-in-php: JIT SessionEncodeRuntime — route session_encode()/session_decode() through VmSession PHP not ~530-line LLVM (#1492)

1 participant