注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #131000 Implement wasm codegen for sub-16 SIMD load/store
- #130973 Align CoseKey async verification with synchronous validation
- #130938 [wasm] Implement WasmBase LeadingZeroCount/TrailingZeroCount JIT intrinsics
- #130925 Bump actions/setup-dotnet from 5 to 6
- #130924 [wasm] Publish __stack_pointer before SuppressGCTransition native calls
- #130875 Load the duplicate attribute PFX under a lock
- #130836 Wire up orphaned Runtime_129288 regression test
- #130803 Remove unused functions from the xarch emitter
- #129935 [cDAC] Add EnC metadata and caching
- #128484 Fix TensorPrimitives.IndexOfMaxMagnitude signed integer tie
#131000 Implement wasm codegen for sub-16 SIMD load/store
- 作成者: @tannergooding
- 作成日時: 2026年07月17日 21:45:17(UTC)
- マージ日時: 2026年07月18日 14:20:38(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly JITコンパイラのVector2(TYP_SIMD8)とVector3(TYP_SIMD12)に対するSIMDメモリ操作(load/store)のコード生成を実装しました。これらの型はネイティブなwasm valtypeを持たないため、v128として8/12バイトのみを使用しており、従来はNYI(Not Yet Implemented)でベイルアウトしていました。レーン単位のload/store命令シーケンスを発行することで、この制限を回避します。
発行される命令シーケンス:
simd8 load:v128.load64_zero 0simd8 store:v128.store64_lane 0, lane 0simd12 load:local.get addr; v128.load64_zero 0; v128.load32_lane 8, lane 2simd12 store: 一時的なv128に値をコピー、低8バイトをv128.store64_lane、上位4バイトをv128.store32_laneで処理
変更内容
- codegenwasm.cpp:
TYP_SIMD8とTYP_SIMD12に対する分割レーンload/storeシーケンスを実装、アドレス再生成を含むヘルパールーチンを追加 - instr.cpp:
ins_Load(TYP_SIMD8)をINS_v128_load64_zeroとして実装 - lowerwasm.cpp: コード生成がアドレスを再利用/再生成する必要がある
TYP_SIMD12間接参照アドレスに対して、複数使用をマーク - regallocwasm.cpp:
TYP_SIMD12store間接参照(書き換えで導入されたSTOREINDを含む)に対して内部v128レジスタを割り当て
パフォーマンスへの影響
corelib crossgen2ブラウザSuperPMIコレクション(27,540コンテキスト)での測定結果:
- ハードアサーション: 403 → 30 に削減
- 373個の
SIMD8/SIMD12load/store アサーション排除 - パフォーマンス低下なし
- 残存する30個のアサーションは既存の
NYIRAW汎用キャッチオール(本変更と無関係)
関連Issue
#130866(SIMD ABI ベイルアウトのシャドウイング除去)
その他
この変更は単体でもcorelib crossgen2コレクションの373個のアサーションを解決しますが、完全な効果を得るには#130866の適用が必要です。ローカル・スタック・ストア書き換え処理(RewriteLocalStackStore)で生成される合成STOREIND内のv128 teeレジスタは主要な収集ウォーク外のため、RewriteLocalStackStore内で明示的に要求されます。
#130973 Align CoseKey async verification with synchronous validation
- 作成者: @Copilot
- 作成日時: 2026年07月17日 14:29:39(UTC)
- マージ日時: 2026年07月18日 03:06:12(UTC)
- ラベル: area-System.Security
概要
CoseKeyを使用した署名検証時、非同期検証が保護されたalgヘッダーの検証を同期検証と異なる方法で実施していた問題を修正。非同期検証で保護されたalgヘッダーの欠落またはミスマッチを同期検証と同じレベルで厳密に検証するようにしました。
変更内容
- CoseSign1Message.cs: 同期検証のインライン検証を
ValidateAlgorithm(key)ヘルパーメソッドに置き換え、非同期検証エントリーポイントにも同じ検証を追加 - CoseSignature.cs: 非同期検証前に
ValidateAlgorithm(key)を追加し、同期検証コア内にも同じ検証を実装 - Strings.resx: 検証エラーメッセージ用リソース文字列を3行追加
- CoseSign1MessageTests.Verify.Stream.cs: 保護された
algヘッダーの欠落・ミスマッチに関する回帰テストを追加し、同期/非同期の一貫性を検証 - CoseMultiSignMessageTests.Verify.Stream.cs:
CoseMultiSignMessage内のCoseSignature検証に対する並列的な回帰テストを追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この変更はSystem.Security.Cryptography.Coseライブラリの公開API動作に影響します。以前非同期検証で許可されていた不正な署名(保護`algヘッダーが欠落またはミスマッチ)が検証失敗するようになります。これは同期検証との一貫性を確立するための意図的な変更です。
#130938 [wasm] Implement WasmBase LeadingZeroCount/TrailingZeroCount JIT intrinsics
- 作成者: @lewing
- 作成日時: 2026年07月17日 01:02:21(UTC)
- マージ日時: 2026年07月18日 15:38:45(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly バックエンド向けに System.Runtime.Intrinsics.Wasm.WasmBase の LeadingZeroCount/TrailingZeroCount 組み込み関数を JIT で実装します。これまで未実装のため管理コードの低速フォールバック実装を使用していましたが、本変更により RyuJIT-wasm が native wasm の clz(count leading zeros)/ctz(count trailing zeros) 命令へ直接降級できるようになります。
変更内容
- hwintrinsic.cpp — WasmBase の IsaRange を
{ NI_Illegal, NI_Illegal }から{ FIRST_NI_WasmBase, LAST_NI_WasmBase }に修正し、実装対象として認識させる - hwintrinsiclistwasm.h — スカラー版の
LeadingZeroCount/TrailingZeroCount(int/uint/long/ulong) をHW_Category_Scalarで追加、HW_Flag_SpecialImport|HW_Flag_NoFloatingPointUsedフラグを指定して既存の xarch パターンに合わせる - hwintrinsicwasm.cpp — 両関数を
NI_PRIMITIVE_LeadingZeroCount/NI_PRIMITIVE_TrailingZeroCountに special-import してからGT_INTRINSICノードに変換(既存の wasm コード生成がi32/i64.clz/ctzに降級可能)
パフォーマンスへの影響
System.Numerics.BitOperations の LeadingZeroCount/Log2/TrailingZeroCount が WasmBase で利用可能な場合、管理コードのソフトウェア実装から native wasm clz/ctz 命令へ置き換わるため、パフォーマンスが向上します。具体的な数値は記載されていません。
関連Issue
なし
その他
- 内部実装のみの変更 —
WasmBaseはinternalクラスで既に main ブランチに存在しており、本 PR は JIT 降級の実装に過ぎません。公開 API への変更はありません。 - 検証状況 — JIT コンパイルは成功(警告・エラーなし)し、降級対象の
NI_PRIMITIVE_*ZeroCountは既にcodegenwasm.cppで処理されているため、既証のコード生成パスを再利用しています。実運用環境でのテスト実行は試みられていません(WebAssembly-CoreCLR 実験版ランタイムの bring-up 問題により)。既存のSystem.Numerics.BitOperationsテストが全オーバーロードをカバーしており、ランタイムの完成後にこのコードパスが演習されます。
#130925 Bump actions/setup-dotnet from 5 to 6
- 作成者: @dependabot[bot]
- 作成日時: 2026年07月16日 21:23:28(UTC)
- マージ日時: 2026年07月18日 08:04:57(UTC)
- ラベル: area-codeflow
概要
GitHub Actions のワークフローで使用される actions/setup-dotnet を v5 から v6 にアップグレードします。v6.0.0 では ESM(ECMAScript Module)への移行と依存関係のアップグレードが行われています。
変更内容
.github/workflows/jit-format.yml:actions/setup-dotnetの参照を v5 から v6 に更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
v6.0.0 の主な変更は以下の通りです:
- ESM への移行と依存関係のアップグレード
actions/checkoutを 6.0.3 から 7.0.0 にアップグレード@actions/cacheを 6.2.0 にアップグレード
dotnet/runtime リポジトリ全体での .NET SDK セットアップに影響します。この更新により、GitHub Actions ワークフローで最新バージョンの setup-dotnet アクションの機能と改善が利用可能になります。
#130924 [wasm] Publish __stack_pointer before SuppressGCTransition native calls
- 作成者: @lewing
- 作成日時: 2026年07月16日 21:13:37(UTC)
- マージ日時: 2026年07月18日 00:12:50(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssembly R2R(Ready-to-Run)において、SuppressGCTransitionネイティブ呼び出し前に shadow stack pointer を __stack_pointer グローバル変数に発行する機能を追加します。これにより、emscripten などの __stack_pointer に依存するネイティブコードが正しいスタック位置を観測し、R2R フレーム上のローカル変数破損を防ぎます。
// 修正前: __stack_pointer がstaleのままnative codeが実行される
// → native calleeが呼び出し元のSP(R2Rフレーム上)からシャドウフレームを割り当て
// → spilled pointer が破損 → 後続のメモリアクセスでNullReferenceException
// 修正後: SuppressGCTransition呼び出し直前に shadow SP を発行
local.get <shadowSP>
global.set <__stack_pointer>
// → native calleeが正しく呼び出し元フレーム下にシャドウフレームを割り当て
変更内容
- src/coreclr/jit/codegenwasm.cpp:
IsUnmanaged() && IsSuppressGCTransition()呼び出し直前に、shadow SP local を__stack_pointerグローバル(eeGetWasmWellKnownGlobals()->stackPointerから取得)に発行するコードを追加(+14行)
パフォーマンスへの影響
wasm operand stack上で net-zero であるため、パフォーマンス低下はなし。
関連Issue
#130923、#130924(本PR) 依存: #129717、関連: #130634
その他
- ドラフトPR扱いで、R2R-on-wasm bring-up スタック統合前のため現在の main 上では CI 検証不可能
- wasm JIT(
clr.jit)のコンパイルは確認済み - R2R-on-wasm プロトタイプでの検証済み(修正前は crash、修正後は pass、R2R↔interpreter バッテリーは byte-identical)
- GitHub Copilot の支援下で作成
#130875 Load the duplicate attribute PFX under a lock
- 作成者: @vcsjones
- 作成日時: 2026年07月16日 14:23:17(UTC)
- マージ日時: 2026年07月18日 01:52:21(UTC)
- ラベル: area-System.Security test-bug
概要
Windows PFXローダーの競合状態によるテスト不安定性に対処するため、"duplicate attribute" PKCS#12テストデータの読み込みをロック機構で保護するもの。同じ名前付きキーを持つPFXが同時読み込みされると、Windows PFXローダーがキーインスタンスを共有してしまい、一方の証明書の破棄後に他方で"keyset not found"エラーが発生する問題を解決します。
変更内容
- TestData.cs:
DuplicateAttributesPfxプロパティをprivateに変更し、WithDuplicateAttributesPfx(Action<byte[]> callback)ヘルパーメソッドを追加。ロック下でコールバック経由でPFXバイト列へのアクセスを提供 - X509CertificateLoaderPkcs12Tests.cs: duplicate attribute PFXの読み込みを新しいヘルパー経由に変更
- X509CertificateLoaderPkcs12Tests.WindowsAttributes.cs: duplicate attribute PFXアクセスをヘルパー経由に統一
- X509CertificateLoaderPkcs12CollectionTests.cs: コレクションローダーテストをヘルパー経由に変更
- PfxTests.cs: レガシー
X509Certificate2コンストラクタテストをヘルパー経由に更新
パフォーマンスへの影響
影響なし。変更はテストコードのみであり、ロック機構はPFX読み込み時のみ適用(証明書ライフタイム全体ではない)
関連Issue
その他
- 変更は単体テストコードに限定(製品コードなし)
- ロック機構は完全ではなく、テスト内でのコールバック経由のアクセス規制にとどまる
- Windowsのみで発生する競合状況に対する回避策であり、他のプラットフォームへの影響なし
#130836 Wire up orphaned Runtime_129288 regression test
- 作成者: @tannergooding
- 作成日時: 2026年07月16日 03:08:36(UTC)
- マージ日時: 2026年07月18日 17:27:53(UTC)
- ラベル: area-CodeGen-coreclr
概要
Runtime_129288.cs は #129348 で追加されたJIT回帰テストですが、Regression_ro_2.csproj に参照されていなかったため、SDK形式のCLRテストプロジェクト(EnableDefaultItems=false)でビルド・実行されていませんでした。本PRは、このテストをRegression_ro_2.csprojに明示的に追加し、CI環境での実行を確実にします。
変更内容
src/tests/JIT/Regression/Regression_ro_2.csproj:JitBlue/Runtime_129288/Runtime_129288.csを<Compile Include>リストに追加(数値順で近隣テストの隣に配置)
パフォーマンスへの影響
影響なし
関連Issue
#130832(同じパターンの問題を修正) #129348(このテストが追加されたPR)
その他
- 作成者は
src/tests/JIT/Regression/配下の全.csファイルを監査し、孤立したテストはRuntime_129288のみであることを確認 - 他の6つの参照されていない
.csファイル(Runtime_70259,Runtime_70607,Runtime_73615,Runtime_80731,Runtime_40607,DevDiv_754566)は意図的に未コンパイル参照ソース(.il+.ilprojと対になっている)のため変更なし
#130803 Remove unused functions from the xarch emitter
- 作成者: @tannergooding
- 作成日時: 2026年07月15日 17:47:25(UTC)
- マージ日時: 2026年07月18日 16:43:42(UTC)
- ラベル: area-CodeGen-coreclr
概要
CoreCLR x86/x64 JITエミッターから未使用の関数16個を削除し、デッドコードをクリーンアップするメンテナンスPR。動作上の変更はありません。削除対象はプリフィックス/エンコーディングヘルパー(emitExtractRex2Prefix、AddRex2WPrefix、insKMaskBaseSizeなど)と命令エミッター(emitIns_AI_R、emitIns_I_AIなど)、その他のユーティリティ関数です。
変更内容
src/coreclr/jit/emitxarch.h: 未使用の関数宣言とインライン定義を削除(68行削除)
- プリフィックス/エンコーディングヘルパー3個
- 命令エミッター5個
- その他2個(
IsAVXOnlyInstruction、emitIns_J_S)
src/coreclr/jit/emitxarch.cpp: 対応する関数定義とドキュメントコメントを削除(388行削除)
- すべての削除対象関数の実装
パフォーマンスへの影響
影響なし(デッドコード削除のみ。ビルド成功、警告・エラーなし)
関連Issue
なし
その他
- 削除前に
git grepでコールサイトがないことを再確認済み - 削除後の連鎖的なデッドコード発生がないことを確認済み(削除関数が呼び出していたヘルパーはすべて他の場所で使用中)
- 関連する未使用関数
emitIns_IJは既存のデッドコードとして今回のスコープ外で意図的に除外 - jit-formatで変更なし
#129935 [cDAC] Add EnC metadata and caching
- 作成者: @rcj1
- 作成日時: 2026年06月28日 01:03:54(UTC)
- マージ日時: 2026年07月18日 13:46:55(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Core Data Access Component)がEdit-and-Continue(EnC)シナリオと読み取り・書き込みメタデータの読取に対応するための機能拡張です。メタデータキャッシング方式を追加し、前進実行中はキャッシュを保持して世代番号で更新を追跡し、遡及実行の可能性がある場合はキャッシュをフラッシュします。RWメタデータ構造(MDInternalRW → CLiteWeightStgdbRW → CMiniMdRW)のウォークと、これらをECMA-335準拠のメタデータイメージに再構成する機能が実装されています。
変更内容
- CoreCLRデータディスクリプタ追加:RWメタデータ構造(StgPool、StgPoolSeg、MDInternalRW、CLiteWeightStgdbRW、CMiniMdRW、CMiniMdSchema)とEnCモジュール状態(EditAndContinueModule)の新規定義
- マネージドコントラクトモデル拡張:PEAssembly、Module、DataTypeに新フィールド/型を追加;Module.MetadataGenerationで動的メタデータの無効化追跡
- メタデータキャッシング実装:生成番号(RefEmit)またはEnC編集カウンタに基づく世代的キャッシング;前進実行時はキャッシュ保持、遡及実行時はフラッシュ
- RWメタデータ再構成:ストレージプール統合を含むECMA-335準拠メタデータイメージの生成
- ドキュメント更新:新メタデータソースと無効化シグナルを反映
パフォーマンスへの影響
提供データなし。ただし、メタデータキャッシング導入により前進実行中のメタデータ再読取が削減される可能性がある一方、RWメタデータ再構成の処理コストが発生します。
関連Issue
その他
Copilot指摘の重要懸念事項:
- Flush(FlushScope.All)時にキャッシュされたMetadataReaderProviderがDisposeされず、バッファ/ストリームリークの可能性
- GetReadWriteSavedMetadataAddressで、動的モジュールの再シリアライズ中にキャッシュが陳腐化する可能性(世代検出後も古いアドレス/サイズが使用される)
- ReadStoragePool内の腐敗ガード(各値で独立チェック)により、totalSize + dataSizeが意図上限を超える可能性
- EcmaMetadata_1のReadWriteパス実装に対するユニットテストが不足
- 新公開API(EcmaMetadataUtils.ReadMetadataVersion、DataType値、CorDbgHResults.CLDB_E_FILE_CORRUPT)が関連Issueのapi-approvedラベルなしで追加されている
#128484 Fix TensorPrimitives.IndexOfMaxMagnitude signed integer tie
- 作成者: @lilinus
- 作成日時: 2026年05月22日 13:58:16(UTC)
- マージ日時: 2026年07月18日 17:35:39(UTC)
- ラベル: area-System.Numerics.Tensors community-contribution
概要
TensorPrimitives.IndexOfMaxMagnitudeとTensorPrimitives.IndexOfMinMagnitudeにおける符号付き整数型での同値タイ処理の不具合を修正します。#128478で報告されたバグに対応し、テストカバレッジを強化しています。
変更内容
- TensorPrimitives.IndexOfMaxMagnitude.cs / IndexOfMinMagnitude.cs: 符号付き整数型のタイブレーク処理を修正(各ファイルで+9/-3の変更)
- TensorPrimitivesTests.cs: テストカバレッジを拡充
IndexOf*Magnitude_Negative1LesserThanPositive1で固定バグのカバレッジ追加IndexOf*Magnitude_AllLengthsのアサート強化とMinValueを含めたテストIndexOf*_Negative0LesserThanPositive0でベクトル化パスをカバーするテスト追加
- TensorPrimitives.Generic.cs:
NFloat型での浮動小数点テスト実行対応
パフォーマンスへの影響
作成者が指摘する通り、#128088で報告されたTensorPrimitives.IndexOfMaxのパフォーマンス回帰がある可能性があります。修正内容がそれに対応するか、あるいは#127454の判定ロジック変更の影響を受けるかは別途検証が必要とされています。
関連Issue
その他
本PRはバグ修正とテストカバレッジ強化が主目的ですが、既知のパフォーマンス回帰の解決を期待するか、#127454の変更内容とのトレードオフを検討する必要がある旨が開発者から示唆されています。