Pull Request on 2026年05月16日

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

注意点

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



#128263 Implement DacDbi cDAC APIs and simplify generic type context APIs

  • 作成者: @Copilot
  • 作成日時: 2026年05月15日 17:09:48(UTC)
  • マージ日時: 2026年05月16日 05:38:35(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DacDbi APIの4つの実装をマネージドcDACに追加します。GetSimpleType、ResolveAssembly、ResolveExactGenericArgsToken、GetGenericArgTokenIndexをRuntimeTypeSystemコントラクト経由で実装し、ジェネリック型コンテキストAPI処理を簡素化します。各実装は既存の#if DEBUGレガシークロスチェックパターンでゲートされています。

変更内容

  • DacDbiImpl.cs: 4つのDacDbi API実装を追加(GetSimpleType、ResolveAssembly、ResolveExactGenericArgsToken、GetGenericArgTokenIndex)
  • IRuntimeTypeSystem.cs: 新規APIをサポートするためインターフェース定義を拡張(+8行)
  • RuntimeTypeSystem_1.cs: RuntimeTypeSystemコントラクト実装を更新(+33行)
  • IDacDbiInterface.cs: DacDbiインターフェースに新規メソッドシグネチャを追加(+5行)
  • RuntimeTypeSystem.md: デザインドキュメントを更新(ジェネリック型解決の詳細説明を追加)
  • CorDbHResults.cs: 新規HRESULT定義を追加(+1行)
  • GcScanner.cs: 軽微な修正(+1/-1)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 各API実装は_target.Contracts.RuntimeTypeSystemを経由してメタデータ解決とジェネリック辞書の走査を実行
  • GetGenericArgTokenIndexはネイティブの3段階結果(S_FALSE/*pIndex = 0/*pIndex = TYPECTXT_ILNUM)をミラーリング
  • レガシーコード互換性維持のため、すべての実装は#if DEBUGクロスチェックパターンでカバー

#128230 Delete unused WBF_NoBarrier_CheckNotHeapInDebug and CORINFO_HELP_ASSIGN_REF_ENSURE_NONHEAP

  • 作成者: @Copilot
  • 作成日時: 2026年05月14日 22:09:58(UTC)
  • マージ日時: 2026年05月16日 16:14:42(UTC)
  • ラベル: area-CodeGen-coreclr

概要

未使用の書き込みバリア形式 WBF_NoBarrier_CheckNotHeapInDebug と対応するJITヘルパー CORINFO_HELP_ASSIGN_REF_ENSURE_NONHEAP を削除する変更です。このヘルパーは gcIsWriteBarrierCandidate によって生成されることがなく、すべてのコンシューマーが到達不可能なデッドコードパスであるため、削除しても機能に影響はありません。

変更内容

  • JITヘルパー定義: corinfo.h、CorInfoHelpFunc.cs、jithelpers.h から CORINFO_HELP_ASSIGN_REF_ENSURE_NONHEAP を削除
  • 書き込みバリア形式: jitgcinfo.h から WBF_NoBarrier_CheckNotHeapInDebug を削除
  • JITのデッドコード削除: codegencommon.cpp の genUseOptimizedWriteBarriers 関数とヘルパー選択ロジックを簡潔化、utils.cpp の mutatesHeap 分析から対応ケースを削除、codegenwasm.cpp のWASM用ヘルパーシグネチャを削除
  • VM実装削除: vm/jitinterface.h と vm/gchelpers.cpp から JIT_WriteBarrierEnsureNonHeapTarget 関数の宣言と実装を削除
  • バージョン管理: jiteeversionguid.h の JIT-EE GUID をバージョンアップ(CorInfoHelpFunc 列挙型変更に対応)

パフォーマンスへの影響

影響なし。削除されるコードはすべてデッドコードパスであり、ランタイムの実行にも機能にも影響しません。むしろJITヘルパーの分岐ロジックが簡潔化されるため、わずかなコード削減と保守性向上が期待できます。

関連Issue

なし

その他

  • ビルド検証: ./build.sh clr -rc checked でコンパイル成功(警告・エラー0)
  • この変更はマイナーなクリーンアップ作業で、互換性への影響はありません
  • JIT-EE GUID のバージョンアップにより、CorInfoHelpFunc 列挙型の変更がJIT側とVM側で同期されます

#128187 Move the folding of double not/neg to gtFoldExpr

概要

JIT コンパイラの式の畳み込み処理をリファクタリングし、二重 NOT/NEG 演算の最適化を fgMorphSmpOp から gtFoldExpr に移動しました。これにより不要なノードの早期削除が可能になり、測定可能なスループット改善が得られます。gtFoldExpr を単項/二項ノード向けのヘルパー関数に分割し、最適化ロジックを一元化しています。

変更内容

  • src/coreclr/jit/morph.cpp: fgMorphSmpOp から二重 NOT/NEG 削除ロジック(10行)を削除
  • src/coreclr/jit/gentree.cpp: gtFoldExpr をリファクタリングし、ノードタイプに基づいてディスパッチするよう改善。gtFoldExprUnary/gtFoldExprBinary ヘルパーを追加(+115/-47行)し、二重 NOT/NEG 畳み込みを gtFoldExprUnary で実装
  • src/coreclr/jit/compiler.h: 新しいヘルパー関数 gtFoldExprUnary/gtFoldExprBinary の宣言を追加(+2行)

パフォーマンスへの影響

スループット(TP)の測定可能な改善を達成。SPMI ベンチマーク結果(T0 と FullOpts 間)で効果を確認。改善の主要因は gtFoldExpr のチェック順序の再編成と gtFoldExprUnary の分割による早期最適化です。

関連Issue

#128187

その他

変更は JIT コンパイラの内部実装(gentree.cpp/morph.cpp)に限定され、公開 API には影響なし。Valnum-CSE 処理中の呼び出しに関する想定を厳密化しています。


#128165 Unify O2K_CHECKED_BOUND_ADD_CNS and O2K_VN

  • 作成者: @EgorBo
  • 作成日時: 2026年05月13日 20:57:45(UTC)
  • マージ日時: 2026年05月16日 00:30:35(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラの値番号(Value Numbering)管理において、O2K_CHECKED_BOUND_ADD_CNSとO2K_VN_ADD_CNSの2つの演算子を統合しました。O2K_VN_ADD_CNSは「X+CNS」の形式を、Xの値番号とCNS定数に分解して表現するようにし、アサーション伝播時のホットループ処理を効率化しています。

変更内容

  • compiler.h: 値番号演算子の定義と関連インターフェースを統合・簡潔化(+30/-44行)
  • assertionprop.cpp: アサーション伝播ロジックを統合版の新しい意味論に対応させ、GetVNFunc呼び出しの削減(+15/-27行)
  • rangecheck.cpp: 範囲チェック処理を新しい分解された値番号体系に対応(+23/-18行)

パフォーマンスへの影響

改善点: MergeEdgeAssertions処理のホットループでGetVNFunc呼び出しを削減し、X(全体のADD演算ではなく左辺オペランド)の値番号に直接アクセスできるため、メモリアクセスとの呼び出しオーバーヘッドが削減される可能性があります。

関連Issue

なし

その他

  • 非負性保証の扱いを明確化:O2K_VN_ADD_CNS単体では非負性を暗に示さず、必要に応じてGetOp2().IsVNNeverNegative()で明示的に確認するように修正
  • 境界チェックノードが2つのアサーションを生成できるよう将来的に改善する検討中(現状はツリーあたり最大1つのアサーションのため制限あり)

#128054 [cDAC] Reshape DacDbi API GetHeapSegments to EnumerateHeapSegments and implement in cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年05月11日 20:53:22(UTC)
  • マージ日時: 2026年05月16日 17:11:21(UTC)
  • ラベル: area-Diagnostics-cdac

概要

ヒープセグメント取得APIをメモリ割り当てを回避するために、GetHeapSegments(配列を返す)からEnumerateHeapSegments(コールバック経由で列挙)へ再設計しました。DAC/DBI、cDAC、契約サポートおよびテストを含む実装を追加しています。

変更内容

  • ネイティブDAC/DBI: IDacDbiInterface::GetHeapSegmentsをコールバックベースのEnumerateHeapSegments(fpCallback, pUserData)に置き換え(dacdbi.idl、dacdbiinterface.h、dacdbiimpl.cpp)
  • cDAC契約: IGC.EnumerateHeapSegmentsを追加し、GCSegmentClassificationおよびGCHeapSegmentInfo型を実装(IGC.cs、GC_1.cs)
  • ランタイムサポート: RemotingServices層(process.cpp)をコールバックAPIに対応させ、ローカルにセグメントを集約
  • テスト/ドキュメント: HeapSegmentモックディスクリプタ、ワークステーション/サーバーおよびリージョン/セグメント動作をカバーするユニットテストを追加、GC契約ドキュメントを更新

パフォーマンスへの影響

メモリ割り当てを削減できます。従来のGetHeapSegmentsは呼び出しのたびにセグメント配列をヒープに割り当てていましたが、コールバックベースの設計により、不要な割り当てが排除されます。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

  • Copilotの自動レビューコメントで、docs/design/datacontracts/GC.md内のHEAP_SEGMENT_FLAGS_READONLYの型ドキュメント(ulongと記載)が、実装上のTargetNUIntと不一致である可能性が指摘されています。
  • IDacDbiInterface.csにマークダウンテキストが残存している可能性があり、ファイルの完全性確認が必要です。

#122607 [browser] Library mode without workload

概要

WebAssembly ライブラリモード(RID=browser-wasm、OutputType=Library)のビルドで、WASM ワークロードのインストールを不要にする変更。ライブラリプロジェクトは SelfContained や PublishTrimmed をデフォルトで有効にすべきではないという設計方針に基づいている。

変更内容

  • ILLink ターゲット移行: _RootEntireIntermediateAssembly を BrowserWasmApp.targets(ワークロード)から Microsoft.NET.Sdk.WebAssembly.Browser.targets(WASM SDK)に移行し、ワークロード非依存でもライブラリモードのトリミング設定が利用可能に
  • SelfContained デフォルト削除: WorkloadManifest.targets.in の browser-wasm 向け SelfContained=true を廃止
  • PublishTrimmed デフォルト削除: ワークロード側の PublishTrimmed=true デフォルトを廃止(WASM SDK で設定)
  • ワークロード必須条件の緩和: _WasmNativeWorkloadNeeded ゲートから _UsingBlazorOrWasmSdk を削除し、RID=browser-wasm 設定だけではワークロード不要に
  • テストアセット簡略化: LazyLibrary.csproj から不要な UseMonoRuntime を削除
  • テスト拡充: ライブラリモードテストを 1 ケースから 4 ケースに拡充(useWasmSdk × isPublish マトリクス、すべて no-workload タグ付き、ビルド/パブリッシュの両方に対応)

パフォーマンスへの影響

影響なし

関連Issue

#123477

その他

  • 公開 API の変更なし(SDK 設定調整のみ)
  • ワークロード非インストール環境での WebAssembly ライブラリ開発がサポートされるようになる

目次