注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #124710 [RyuJit/WASM] Rewrite SP references into PHYSREGs
- #124683 Add
CORINFO_RUNTIME_LOOKUP::helperEntryPoint - #124679 [Wasm RyuJit] fix some issues with calls
- #124633 [wasm][coreclr] Use 4GB limit for corerun
- #124626 Refine PersistedAssemblyBuilder test coverage per review feedback, helper deduplication, and AssemblyNameInfo-based identity validation
#124710 [RyuJit/WASM] Rewrite SP references into PHYSREGs
- 作成者: @SingleAccretion
- 作成日時: 2026年02月21日 20:01:06(UTC)
- マージ日時: 2026年02月22日 21:59:13(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr community-contribution
概要
WASM向けJITコンパイラでスタックポインタ(SP)の参照をPHYSREG参照に書き直すことで、レジスタアロケーション(RA)の処理を簡素化する改善です。SPローカル変数をニュートラル化し、すべての明示的参照をPHYSREGノードに変換することで、SPの管理をローカル変数からコードジェン時の既知の場所に移譲しています。
変更内容
- regallocwasm.cpp: SP参照の書き直しロジックを追加実装(+71行)。ローカル変数のニュートラル化とPHYSREG変換処理を含む
- regallocwasm.h: SP処理用の新しいメンバー関数やヘルパーを追加(+5行)
- codegenwasm.cpp: コードジェン側での対応を追加(+17行)
パフォーマンスへの影響
影響あり(改善)
- デバッグモード時のSPをスタックにスピルしなくなるため、メモリ使用量が削減
- SPの特殊な契約(LCLHEAP など)の複雑性が軽減され、コード生成が効率化される
- ローカル変数候補の精査が簡素化されることで、アロケーション処理の計算量削減が期待できる
関連Issue
記載なし
その他
本変更はWASM実装固有の最適化であり、他のプラットフォーム向けコード生成には影響しません。SPの「所有権」を従来のローカル変数管理からPHYSREG(既知レジスタ位置)に移譲することで、レジスタアロケータ内での特殊処理を集約しています。
#124683 Add CORINFO_RUNTIME_LOOKUP::helperEntryPoint
- 作成者: @jakobbotsch
- 作成日時: 2026年02月21日 00:30:15(UTC)
- マージ日時: 2026年02月22日 13:03:07(UTC)
- ラベル: area-CodeGen-coreclr
概要
CORINFO_RUNTIME_LOOKUP構造体にhelperEntryPointフィールドを追加し、R2R(Ready2Run)とNAOT(NativeAOT)においてREADYTORUN_GENERIC_HANDLEヘルパーのエントリポイント取得時の往復通信を排除しました。これにより、ランタイムへのコールバックを削除し、エントリポイント情報を直接構造体で表現することで効率化しています。
変更内容
- corinfo.h:
CORINFO_RUNTIME_LOOKUP構造体にhelperEntryPointフィールドを追加 - JIT関連ファイル: importer.cpp、helperexpansion.cpp等でヘルパー呼び出し処理を簡素化
- CorInfoImpl実装: R2R版とRyuJit版でランタイムルックアップの初期化処理を変更
- SuperPMI: メソッドコンテキスト記録/再生機構を調整
- jiteeversionguid.h: バージョンGUID更新(JIT-EE インターフェース互換性管理)
パフォーマンスへの影響
改善点: ランタイムへのコールバック往路と復路の削除により、ジェネリックメソッド呼び出しの際のレイテンシが削減されます。特にR2RおよびNativeAOTコンテキストで、ヘルパーエントリポイント取得時のオーバーヘッドが軽減されます。
関連Issue
なし
その他
- 互換性: JIT-EEインターフェースバージョンが更新されているため、JITとランタイム間の互換性チェック機構が新バージョンを認識する必要があります
- スコープ: 変更は主にR2R/NativeAOT実装に限定され、コア JIT エンジンへの影響は最小限
#124679 [Wasm RyuJit] fix some issues with calls
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月20日 21:42:12(UTC)
- マージ日時: 2026年02月22日 19:01:25(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly RyuJIT コンパイラの関数呼び出し処理の2つの問題を修正します。マネージド呼び出し規約を持つ呼び出しに対して、期待されたシグネチャに一致させるため、最後の引数として偽のPEポインタを渡すようにしました。また、メインメソッドまたはfuncletの最後の命令がリターンしない呼び出しである場合、unreachableの後にend命令が確実に発行されるようにしました。
変更内容
- src/coreclr/jit/codegenlinear.cpp (+11行):マネージド呼び出し規約での呼び出し時に、期待されたシグネチャに合わせるための偽のPEポインタ引数の追加処理
- src/coreclr/jit/gentree.cpp (+2/-3行):関連する呼び出しシグネチャ処理の調整
- src/coreclr/jit/morph.cpp (+5/-1行):リターンしない呼び出しの後の
end命令発行ロジック
パフォーマンスへの影響
直接的なパフォーマンス測定値は提供されていませんが、これらの修正は主にコード生成の正確性に関するものであり、パフォーマンスへの顕著な影響は予想されません。ただし、正しいシグネチャの実装により、Wasmランタイムでの検証オーバーヘッドが減少する可能性があります。
関連Issue
なし
その他
これらの修正はWebAssembly(Wasm)ターゲットのRyuJITコンパイラに特化しています。マネージド呼び出し規約の実装とWasm仕様への準拠が対象となっており、Wasm環境での.NETアプリケーション実行時の正確性向上が期待されます。
#124633 [wasm][coreclr] Use 4GB limit for corerun
- 作成者: @radekdoulik
- 作成日時: 2026年02月20日 09:35:20(UTC)
- マージ日時: 2026年02月22日 19:07:17(UTC)
- ラベル: arch-wasm area-Infrastructure-coreclr
概要
WASM/CoreCLR corerun ホストのメモリ上限を2GBから4GBに拡大し、大規模配列割り当てをテストするJITリグレッションテストを再度有効化します。これにより、WebAssembly環境でのメモリ制約によるテスト失敗を解決します。
変更内容
- src/coreclr/hosts/corerun/CMakeLists.txt: Emscripten の
-sMAXIMUM_MEMORYを 2GB から 4GB に変更 - src/tests/JIT/jit64/regress/vsw/373472/test.il: WASM向けの
ActiveIssueAttributeスキップ属性(5行)を削除し、WASM上でのテスト実行を再度有効化
パフォーマンスへの影響
WebAssembly リニアメモリの初期割り当てが増加する可能性がありますが、実際のメモリ使用量は必要に応じた動的割り当てに依存します。4GBへの上限拡大により、大規模配列を扱うリグレッションテストが WASM 環境で正常に実行可能になり、メモリ不足によるテスト失敗を防ぎます。
関連Issue
PR #123377 のフォローアップ(当該の変更が前回無効化されていた)
その他
本変更は前回の PR #123377 で性能回帰の調査対象として無効化されていた機能を、十分な検証後に再度有効化するもの。WASM 環境での JIT リグレッションテスト実行が目的です。
#124626 Refine PersistedAssemblyBuilder test coverage per review feedback, helper deduplication, and AssemblyNameInfo-based identity validation
- 作成者: @Copilot
- 作成日時: 2026年02月20日 03:41:04(UTC)
- マージ日時: 2026年02月22日 18:18:51(UTC)
- ラベル: area-System.Reflection.Emit
概要
PersistedAssemblyBuilder のテストカバレッジをレビューフィードバックに基づいて整理しました。アセンブリ識別情報の検証、Save/GenerateMetadata ライフサイクルの相互作用、クロスアセンブリのジェネリック参照、カスタム属性エッジケースに焦点を絞ったテストに統合。AssemblyNameInfo ベースの同一性検証で簡潔化し、重複するヘルパーロジックを既存の共有ヘルパーに統合しました。
変更内容
- AssemblySaveAssemblyBuilderTests.cs: アセンブリ識別エッジケース(
Name、Version、CultureName、Flags、PublicKeyのラウンドトリップ検証)と Save/GenerateMetadata ライフサイクル検証テストを追加。AssemblyNameInfoを用いた同一性検証の簡潔化と、既存ヘルパーパターンの再利用。 - AssemblySaveILGeneratorTests.cs: クロスアセンブリのジェネリック参照テスト(制約付きジェネリックパラメータを含む)を追加。
- AssemblySaveCustomAttributeTests.cs: 名前付き引数のみのカスタム属性ラウンドトリップテスト(列挙体配列ペイロード対応)を追加。
パフォーマンスへの影響
影響なし。テストカバレッジの拡張であり、ランタイム動作またはメモリ使用量への変更なし。
関連Issue
なし
その他
- レビュー時に除外範囲とされたテスト(AssemblyLoadContext 隔離、メタデータ決定論性、ストリームコーナーケース処理、追加エントリポイント形式)は削除。
MissingScenarios.txtファイルを削除。- 全てのテスト検証に成功(6テスト合格、0失敗、0スキップ)。
AssemblyNameInfo.ToAssemblyName()を直接使用することで、アセンブリ識別情報の抽出とエンコーディング検証を標準化。