注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #128263 Implement DacDbi cDAC APIs and simplify generic type context APIs
- #128230 Delete unused WBF_NoBarrier_CheckNotHeapInDebug and CORINFO_HELP_ASSIGN_REF_ENSURE_NONHEAP
- #128187 Move the folding of double not/neg to gtFoldExpr
- #128165 Unify O2K_CHECKED_BOUND_ADD_CNS and O2K_VN
- #128054 [cDAC] Reshape DacDbi API GetHeapSegments to EnumerateHeapSegments and implement in cDAC
- #122607 [browser] Library mode without workload
#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
- 作成者: @tannergooding
- 作成日時: 2026年05月14日 10:05:01(UTC)
- マージ日時: 2026年05月16日 15:24:58(UTC)
- ラベル: area-CodeGen-coreclr
概要
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
その他
変更は 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
- 作成者: @maraf
- 作成日時: 2025年12月17日 13:36:10(UTC)
- マージ日時: 2026年05月16日 18:42:25(UTC)
- ラベル: arch-wasm area-Build-mono os-browser
概要
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
その他
- 公開 API の変更なし(SDK 設定調整のみ)
- ワークロード非インストール環境での WebAssembly ライブラリ開発がサポートされるようになる