Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions docs/bootstrap-inventory.md
Original file line number Diff line number Diff line change
Expand Up @@ -1716,6 +1716,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `ext/standard/JitUtf8Latin1.php` | 0 | 1 |
| `ext/standard/JitVarDump.php` | 0 | 1 |
| `ext/standard/JitVarExport.php` | 0 | 1 |
| `ext/standard/JitVarExportKernel.php` | 0 | 1 |
| `ext/standard/JitVfprintf.php` | 0 | 5 |
| `ext/standard/JitVfscanf.php` | 0 | 2 |
| `ext/standard/JitVsprintf.php` | 0 | 2 |
Expand Down Expand Up @@ -4012,7 +4013,6 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/JIT/Builtin/StringUtf8Runtime.php` | 0 | 3 |
| `lib/JIT/Builtin/StringVarDump.php` | 0 | 3 |
| `lib/JIT/Builtin/StringVarExport.php` | 0 | 1 |
| `lib/JIT/Builtin/StringVarExportUserScriptLlvm.php` | 0 | 1 |
| `lib/JIT/Builtin/StringVersionCompare.php` | 0 | 2 |
| `lib/JIT/Builtin/StringVersionCompareJit.php` | 0 | 1 |
| `lib/JIT/Builtin/StringVfscanf.php` | 0 | 3 |
Expand Down Expand Up @@ -16054,6 +16054,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 3 class method(s)

### `ext/standard/JitVarExportKernel.php`

**Warnings** (review for bootstrap subset):
- 1 class method(s)

### `ext/standard/JitVfprintf.php`

**Warnings** (review for bootstrap subset):
Expand Down Expand Up @@ -31514,11 +31519,6 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 7 class method(s)

### `lib/JIT/Builtin/StringVarExportUserScriptLlvm.php`

**Warnings** (review for bootstrap subset):
- 1 class method(s)

### `lib/JIT/Builtin/StringVersionCompare.php`

**Warnings** (review for bootstrap subset):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

declare(strict_types=1);

namespace PHPCompiler\JIT\Builtin;
namespace PHPCompiler\ext\standard;

use PHPCompiler\JIT\Builtin\DomInstanceMethodRuntime;
use PHPCompiler\JIT\Context;
use PHPCompiler\JIT\JitNestedHelperCoerce;
use PHPCompiler\JIT\JitVmHelperLink;
Expand All @@ -12,12 +13,14 @@
use PHPCompiler\JIT\VmActiveContextLlvm;

/**
* User-script standalone AOT bridge for __compiler_var_export (#17316, #5965).
* User-script standalone AOT bridge for __compiler_var_export (#19430, #17316, #16075).
*
* Nested VarExportJitHelper from user-main emit segfaults; link bridge during lowering
* after VmActiveContextInit publishes sg_vm_context (#17391).
* after VmActiveContextInit publishes sg_vm_context (#17391). Housed in ext/standard
* (not lib/JIT/Builtin) — same kernel-move pattern as #19389 / #19399.
* php-src: ext/standard/var.c — php_var_export_ex
*/
final class StringVarExportUserScriptLlvm
final class JitVarExportKernel
{
private const HELPER_PATH = '/ext/standard/VarExportJitHelper.php';

Expand Down
6 changes: 4 additions & 2 deletions lib/JIT/Builtin/StringVarExport.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@
use PHPCompiler\JIT\UserScriptAotDeferNestedJit;
use PHPCompiler\JIT\VmActiveContextInitLlvm;
use PHPCompiler\JIT\VmActiveContextLlvm;
use PHPCompiler\ext\standard\JitVarExportKernel;
use PHPLLVM\Value\Function_ as LlvmFunction;

/**
* JIT/AOT link for __compiler_var_export via VarExportJitHelper PHP (#9189, #13349).
* JIT/AOT link for __compiler_var_export via VarExportJitHelper PHP (#9189, #13349, #19430).
*
* Embed and standalone AOT compile {@see VarExportJitHelper}; thin LLVM bridges forward the ABI.
* User-script defer: {@see JitVarExportKernel} (ext/standard) — same kernel-move as #19389/#19399.
* php-src: ext/standard/var.c — php_var_export_ex
*/
final class StringVarExport
Expand Down Expand Up @@ -48,7 +50,7 @@ public static function ensureStandaloneBodies(Context $context): void
public static function implement(Context $context): void
{
if (UserScriptAotDeferNestedJit::shouldDefer($context)) {
StringVarExportUserScriptLlvm::implement($context);
JitVarExportKernel::implement($context);

return;
}
Expand Down
2 changes: 1 addition & 1 deletion test/selfhost/compiler_lib_spine_smoke/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -1774,6 +1774,7 @@
require_once __DIR__.'/../../../ext/standard/JitUtf8Latin1.php';
require_once __DIR__.'/../../../ext/standard/JitVarDump.php';
require_once __DIR__.'/../../../ext/standard/JitVarExport.php';
require_once __DIR__.'/../../../ext/standard/JitVarExportKernel.php';
require_once __DIR__.'/../../../ext/standard/JitVfprintf.php';
require_once __DIR__.'/../../../ext/standard/JitVfscanf.php';
require_once __DIR__.'/../../../ext/standard/JitVsprintf.php';
Expand Down Expand Up @@ -4093,7 +4094,6 @@
require_once __DIR__.'/../../../lib/JIT/Builtin/StringUtf8Runtime.php';
require_once __DIR__.'/../../../lib/JIT/Builtin/StringVarDump.php';
require_once __DIR__.'/../../../lib/JIT/Builtin/StringVarExport.php';
require_once __DIR__.'/../../../lib/JIT/Builtin/StringVarExportUserScriptLlvm.php';
require_once __DIR__.'/../../../lib/JIT/Builtin/StringVersionCompare.php';
require_once __DIR__.'/../../../lib/JIT/Builtin/StringVersionCompareJit.php';
require_once __DIR__.'/../../../lib/JIT/Builtin/StringVfscanf.php';
Expand Down
9 changes: 8 additions & 1 deletion test/unit/VarExportRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,20 @@

use PHPUnit\Framework\TestCase;

/** StringVarExport JIT/AOT path uses VarExportJitHelper PHP, not StringVarExportJit monolith (#9189, #13349). */
/** StringVarExport JIT/AOT path uses VarExportJitHelper PHP + ext kernel for user-script (#9189, #13349, #19430). */
final class VarExportRuntimeShrinkTest extends TestCase
{
public function testStringVarExportUsesVarExportJitHelperForJitPath(): void
{
$source = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/StringVarExport.php');
$this->assertStringContainsString('VarExportJitHelper', $source);
$this->assertStringContainsString('JitVarExportKernel', $source);
$this->assertStringContainsString('UserScriptAotDeferNestedJit::shouldDefer', $source);
$this->assertStringNotContainsString('StringVarExportJit', $source);
$this->assertStringNotContainsString('StringVarExportUserScriptLlvm', $source);
$this->assertLessThan(160, \substr_count($source, "\n"), 'StringVarExport must be a thin bridge (#9189)');
$this->assertFileDoesNotExist(__DIR__.'/../../lib/JIT/Builtin/StringVarExportUserScriptLlvm.php');
$this->assertFileExists(__DIR__.'/../../ext/standard/JitVarExportKernel.php');
}

public function testVarExportJitHelperDelegatesToVmVarExport(): void
Expand All @@ -36,8 +41,10 @@ public function testSpineBundleIncludesVarExportPhpJitPath(): void
$spine = (string) file_get_contents(__DIR__.'/../../test/selfhost/compiler_lib_spine_smoke/main.php');
$this->assertStringContainsString('VarExportJitHelper.php', $spine);
$this->assertStringContainsString('StringVarExport.php', $spine);
$this->assertStringContainsString('JitVarExportKernel.php', $spine);
$this->assertStringContainsString('VmVarExport.php', $spine);
$this->assertStringNotContainsString('StringVarExportJit.php', $spine);
$this->assertStringNotContainsString('StringVarExportUserScriptLlvm.php', $spine);
$this->assertFileDoesNotExist(__DIR__.'/../../lib/JIT/Builtin/StringVarExportJit.php');
}
}
Loading