Pull Request on 2026年07月18日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。



#131000 Implement wasm codegen for sub-16 SIMD load/store

概要

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 0
  • simd8 store: v128.store64_lane 0, lane 0
  • simd12 load: local.get addr; v128.load64_zero 0; v128.load32_lane 8, lane 2
  • simd12 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_SIMD12 store間接参照(書き換えで導入されたSTOREINDを含む)に対して内部v128レジスタを割り当て

パフォーマンスへの影響

corelib crossgen2ブラウザSuperPMIコレクション(27,540コンテキスト)での測定結果:

  • ハードアサーション: 403 → 30 に削減
  • 373個のSIMD8/SIMD12 load/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

概要

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

概要

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

#128047

その他

  • 変更は単体テストコードに限定(製品コードなし)
  • ロック機構は完全ではなく、テスト内でのコールバック経由のアクセス規制にとどまる
  • Windowsのみで発生する競合状況に対する回避策であり、他のプラットフォームへの影響なし

#130836 Wire up orphaned Runtime_129288 regression test

概要

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

概要

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

#129557

その他

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

概要

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

#128478、#128088、#127454

その他

本PRはバグ修正とテストカバレッジ強化が主目的ですが、既知のパフォーマンス回帰の解決を期待するか、#127454の変更内容とのトレードオフを検討する必要がある旨が開発者から示唆されています。


目次