Pull Request on 2026年05月28日

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

注意点

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



#128726 [cdac] Cache negative lookups in ManagedTypeSource_1

概要

ManagedTypeSource_1における負のキャッシング機構の追加により、ホットパスの効率性を大幅に改善しました。従来は成功したルックアップのみをキャッシュしていたため、失敗したルックアップは毎回System.Private.CoreLib内のすべてのTypeDefinition行を再スキャンしていました。本修正により、負のルックアップ結果をセンチネル値(nullやTypeHandle(TargetPointer.Null))としてキャッシュし、繰り返される失敗ルックアップの再スキャンを回避します。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/ManagedTypeSource_1.cs
    • _typeInfoCacheでnullを格納できるようにして、負のルックアップ結果をキャッシュ
    • _typeHandleCacheにTypeHandle(TargetPointer.Null)センチネルを格納して失敗したハンドルルックアップをキャッシュ
    • 再入ガード(_inSearch)は従来通りキャッシュせず(外側の検索が再帰終了後に成功する可能性がある)
    • 既存のTryGetFieldDescで使用されているパターンに統一

パフォーマンスへの影響

SOS WebApp3ヒープダンプでの測定(Debug cDAC、インプロセス):

操作 Before After 改善率
Cold !dumpheap -stat(9,239オブジェクト) 5.90秒 0.35秒 約17倍
Cold ヒープウォーク 1.61秒 0.16秒 約10倍
Warm イテレーション 変化なし 変化なし -

冷パスの高速化は、System.Private.CoreLibで解決しない型名に対するメタデータスキャンの繰り返しを完全に排除することで実現。ウォームパスの読み取り回数は変化なし。修正前のTryFindTypeDefinitionは!dumpheap -statの総実行時間の約87%を占めていました。

関連Issue

#128717

その他

  • Microsoft.Diagnostics.DataContractReader.Tests: 2,381件パス / 16件スキップ / 0件失敗
  • 機能的検証: GetObjectData、GetMethodTableName、GetMethodTableData、GetMethodTableFieldDataの出力がWebApp3ダンプでバイト同一であることを確認
  • GitHub Copilotの支援により作成されたPR

#128712 JIT: Make async tail merging layout equality assert a check

概要

非同期テール マージング時のレイアウト等価性チェックをアサーション(デバッグ用)から実際のチェック(本番対応)に変更します。Issue #128704で既存のコメントが不正確であることが判明したため、詳細な原因調査までの一時対応として実施されます。

変更内容

  • src/coreclr/jit/async.cpp: アサーションをランタイムチェックに置き換え(+7行、-4行)
    • 非同期テール マージング処理においてレイアウト等価性の検証方法を変更
    • デバッグビルドでのみ検出されていた潜在的な問題を、本番環境でも適切に処理するように修正

パフォーマンスへの影響

影響なし

関連Issue

#128704

その他

本変更は一時的な修正であり、作成者が詳細な原因調査を実施する予定です。


#128662 JIT: Encapsulate VNFuncApp fields and clean up FuncIs/IsVNBinFunc usage

  • 作成者: @EgorBo
  • 作成日時: 2026年05月27日 19:57:54(UTC)
  • マージ日時: 2026年05月28日 14:08:30(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのValue Numberingにおいて、VNFuncAppの内部フィールドをカプセル化し、危険な直接アクセス(特にm_args配列へのstd::swap)を排除しました。GetArg(x)メソッドでarityチェック付きアクセスを提供し、安全性を向上させています。またVNFunc比較や関数型チェックのコードをより標準的なヘルパー(FuncIs、IsVNBinFunc)に統一しました。

変更内容

  • valuenum.h/cpp: VNFuncAppのカプセル化(m_argsフィールドをprivate化)、GetArg(x)メソッド追加、FuncIs(VNFunc)ヘルパーの拡張(可変長対応)
  • assertionprop.cpp: funcApp.m_args[x]をGetArg(x)に置き換え、std::swapの危険な操作を除去
  • rangecheck.cpp: キャスト記法(VNFunc)GT_XをVNF_Xに統一、GetFunc() == VNF_XをFuncIs(VNF_X)に置き換え
  • redundantbranchopts.cpp: 同様に関数型チェックをモダン化
  • gentree.cpp, optimizer.cpp, scev.cpp: コード形式の統一(VNF_X記法、FuncIsヘルパー利用)

パフォーマンスへの影響

SPMIベンチマーク実行済み:差分なし(Zero SPMI diffs)

関連Issue

なし

その他

  • GitHub Copilotの支援を受けて作成されたPR
  • 内部実装(JIT最適化ロジック)の改善であり、公開APIへの影響なし
  • チャンク所有のVNストレージへの不正な変異を防ぐセーフティガード実装

#128655 Add breadcrumb READMEs under src/ for test-doc discoverability

  • 作成者: @steveisok
  • 作成日時: 2026年05月27日 17:00:04(UTC)
  • マージ日時: 2026年05月28日 11:14:06(UTC)
  • ラベル: area-Meta

概要

dotnet/runtimeリポジトリの主要コンポーネントディレクトリ配下に軽量なREADME.mdファイルを追加し、AIエージェントやユーザーが容易にドキュメントを発見できるようにするための"breadcrumb"ドキュメント構造を導入します。各READMEはdocs/workflow/配下の権威的なドキュメントへのリンク集となっています。

変更内容

  • src/coreclr/README.md (新規): CoreCLRコンポーネントの概要と関連ドキュメントへのリンクを追加
  • src/mono/README.md (新規): Monoコンポーネントの概要と関連ドキュメントへのリンクを追加
  • src/tests/README.md (新規): CoreCLRランタイムテストツリーであることを明示し、ビルド方法(src/tests/build.sh使用、dotnet testではない)、よく見落とされるフラグ(-priority1、-GenerateLayoutOnly等)を記載
  • src/libraries/README.md (既存): 「Building and testing」セクションを追加

パフォーマンスへの影響

影響なし

関連Issue

#125558

その他

なし


#128654 JIT: Fix bug in GenTree::Equals

概要

JIT コンパイラの GenTree::Equals メソッドにおいて、異なるディスパッチセルを持つ仮想スタブコールが同一と判定される問題を修正しました。この問題により、共有ジェネリック インターフェース ディスパッチの不正なヘッド/テール マージが発生していました。

変更内容

  • src/coreclr/jit/gentree.cpp: GenTreeCall::Equals メソッドに仮想スタブコールの gtStubCallStubAddr 比較ロジックを追加(+6行)
  • src/tests/JIT/Regression/JitBlue/Runtime_128631/Runtime_128631.cs: ディスパッチセル マージバグのリグレッション テストを新規追加(+43行)
  • src/tests/JIT/Regression/Regression_ro_2.csproj: リグレッション テスト プロジェクトに新規テストを登録(+1行)

パフォーマンスへの影響

影響なし

関連Issue

#128631

その他

この修正はコンパイル時の呼び出しノード比較ロジックの改善であり、共有ジェネリック インターフェース ディスパッチを含むコードの JIT コンパイル正確性向上に関連しています。


#128646 Dead-code cleanup: HandleTableMap multi-bucket / multi-AppDomain scaffolding

  • 作成者: @Copilot
  • 作成日時: 2026年05月27日 13:57:27(UTC)
  • マージ日時: 2026年05月28日 19:07:23(UTC)
  • ラベル: area-GC-coreclr

概要

2019年のAppDomain-per-process廃止以降、g_HandleTableMapは単一ノードで安定し、CreateHandleStoreの呼び出し元がなくなったため、マルチバケット・マルチAppDomain対応の不要なスキャフォルディングコードを削除します。削除されたコードはアサーション付きのスタブに置き換えられ、リグレッション検出を強化します。

変更内容

  • objecthandle.h/cpp: Ref_InitializeHandleTableBucket関数を削除(宣言と定義)。呼び出し元はCreateHandleStoreのみだったため。
  • gchandletable.cpp: 以下のメソッドを実装からアサーション付きスタブに置き換え、vtableスロットは保持:
    • GCHandleStore::Uproot
    • GCHandleStore::ContainsHandle
    • GCHandleManager::CreateHandleStore
    • CreateHandleStore内のFEATURE_NATIVEAOT条件分岐を単一スタブに統一
  • 削除: 約90行のデッドコード
  • HandleTableBucketHolderはRef_Initializeで使用中のため保持

パフォーマンスへの影響

影響なし。この変更は不要なコードの削除のみで、実行時動作に変更はありません。

関連Issue

なし

その他

  • ABI互換性: 外部スタンドアロンGC実装との互換性維持のため、GC_INTERFACE_MAJOR_VERSION 5向けにvtableスロットは保存。
  • デバッグ強化: 以前はサイレント状態だったデッドパスが、チェック/デバッグビルドではアサーション失敗により検出されるようになります。
  • 内部実装変更: vtableスロット保持のため、公開APIへの直接的な影響はなし。

#128644 [browser][coreCLR] Diagnostic server improvements for CoreCLR on WASM

概要

WASMにおけるEventPipeベースの診断インフラストラクチャを改善するPRです。主な変更は以下の3点です:

  1. ds_rt_browser_performance_measureの追加 — ネイティブコードからJS側のperformance.measure()を呼び出し、DevToolsでのプロファイリング/トレーシング表示を有効化
  2. スタートアップ診断ポート有効化 — DOTNET_DiagnosticPorts=js://readyをデフォルト有効化し、ランタイム初期化前から診断シナリオ(gcdump、counters、cpu-samples)に接続可能に
  3. 診断メッセージキュー性能改善 — メッセージ受信時のArray.shift()をヘッドポインタ方式に変更し、O(n)の配列コピーをO(1)に改善

変更内容

  • EventPipeスレッドサンプリングレート の変更: "unset"センチネルをUINT32_MAXに統一し、サンプリングレート0を最高頻度サンプリングを意味するように変更(ep.c、ep-shared-config.h.in、Mono/NativeAOT実装部)
  • ブラウザ診断エクスポートの拡張: native→JS interop用にds_rt_browser_performance_measureを新規追加し、タイプテーブルに登録
  • スタートアップ診断クライアント対応: gcdump、counters、cpu-profilerで起動時モードをサポート。診断サーバーではResumeRuntimeを発行
  • メッセージキュー最適化: DiagnosticConnectionBase.recv()の受信キューを配列ポインタ方式に変更
  • ロバストネス改善: WebSocket.send周辺の防御的エラーハンドリング追加、intervalSecondsでのゼロ値保持の修正(||から??へ変更)

パフォーマンスへの影響

メッセージ受信キュー: Array.shift()の廃止により、1メッセージあたりのコピーオーバーヘッドがO(n)からO(1)に改善(n=キュー内メッセージ数)。特に大量の診断イベントを扱う場合に効果的。

その他の変更はパフォーマンスに直接的な影響なし。

関連Issue

#126324から分割

その他

  • 互換性: EventPipeThreadSamplingRateの"unset"デフォルト値をUINT32_MAXに変更するため、プラットフォーム横断的な実装更新が必要(Mono、NativeAOT、CoreCLR対応済み)
  • レビュー指摘: diagnostic-server-js.tsで起動時の自動シナリオ実行とカスタム診断クライアント(globalThis.dotnetDiagnosticClient)の優先度関係が曖昧となる可能性が指摘されている(低信頼度コメント)

#128643 Update area-Extensions lead from @karelz to @anicka-net

  • 作成者: @anicka-net
  • 作成日時: 2026年05月27日 12:26:51(UTC)
  • マージ日時: 2026年05月28日 21:11:35(UTC)
  • ラベル: area-Meta

概要

dotnet/runtime リポジトリの area-Extensions 関連領域のオーナーシップを @karelz から @anicka-net に移管するドキュメント更新です。8つの拡張機能領域のリードを変更し、組織的な責任を再配分します。

変更内容

  • docs/area-owners.md: 以下の8つの area-Extensions 領域のリード変更

    • area-Extensions-Caching
    • area-Extensions-Configuration
    • area-Extensions-DependencyInjection
    • area-Extensions-FileSystem
    • area-Extensions-Hosting
    • area-Extensions-Logging
    • area-Extensions-Options
    • area-Extensions-Primitives
  • 変更なし: area-Extensions-HttpClientFactory は @karelz が継続(ネットワーキングチームとの共有領域)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • これはドキュメント更新のみで、コード変更はありません
  • 承認者: @rosebyte (Jaroslav Ruzicka)
  • FYI対象: @karelz, @jeffhandley

#128639 createdump: detect cycles in link_map traversal

概要

createdumpツールのElfReader::EnumerateLinkMapEntriesメソッドで、動的リンカーのlink_mapリストをたどる際にサイクル検出機能がなく、メモリ破損やプロセス改変によってlink_mapが循環構造になった場合に無限ループに陥る問題を修正します。Brentのサイクル検出アルゴリズムを実装し、チェックポイントポインタを指数間隔(2の累乗)で移動させることで、メモリ読み込み失敗時の元の動作(すべてのモジュール訪問まで続行)を保持しながらサイクルを検出します。

変更内容

  • src/coreclr/debug/dbgutil/elfreader.cpp: ElfReader::EnumerateLinkMapEntriesにBrentのサイクル検出アルゴリズムを追加
    • ウォーカーポインタがチェックポイントに戻った場合にサイクルを検出
    • チェックポイントは2の累乗の間隔(1, 2, 4, 8...)で更新
    • ReadMemory失敗時は既に訪問したすべてのモジュールを返すため、元の動作と一致

パフォーマンスへの影響

  • サイクルなしの正常系では各ノード当たり1回のメモリ読み込み、追加のメモリオーバーヘッドなし
  • サイクル検出時も追加計算量は最小限
  • 無限ループによるCPU消費の解消

関連Issue

#128623

その他

  • Floydのウサギと亀アルゴリズムの代わりにBrentのアルゴリズムが選択された理由:ReadMemory失敗時の動作がより好ましく(全モジュール訪問)、O(N)のキャッシング不要
  • ハードコードされた上限値ではなくサイクル検出を採用することで、マジックナンバー不要でより堅牢

#128621 Add Windows API needed by SafeProcessHandle to WindowsAPIs.txt

概要

NativeAOT環境でのSafeProcessHandle/System.Diagnostics.Processの使用時に、Win32 APIをOS ローダーによる直接インポート(hard import)として解決できるようWindowsAPIs.txtを更新しました。これにより、LoadLibrary/GetProcAddressを用いた動的ロード機構が不要となり、バイナリサイズを1 MBから972 KBへ削減(約27 KB削減)します。

変更内容

  • src/coreclr/nativeaot/BuildIntegration/WindowsAPIs.txt: 以下のWin32 APIをNativeAOT向け直接P/Invoke許可リストに追加
    • advapi32!CreateProcessWithLogonW
    • kernel32!AssignProcessToJobObject
    • kernel32!CreateJobObjectA
    • kernel32!CreateJobObjectW
    • kernel32!SetInformationJobObject

パフォーマンスへの影響

バイナリサイズ削減: SafeProcessHandle.Start(new ProcessStartInfo("whoami")).WaitForExit()の実行ファイルサイズが1 MBから972 KBに削減(約2.7%削減)

改善のメカニズム:

  • NativeLibrary.SetDllImportResolver、DefaultDllImportSearchPathsAttributeなどの動的DLL ロード支援機構がコンパイル時に不要となり、対応するランタイムコード生成の削減に繋がります

関連Issue

なし

その他

この変更は内部実装の最適化であり、公開APIへの影響はありません。NativeAOT環境でのプロセス管理機能の利用におけるバイナリサイズの最適化が主な目的です。


#128620 Ensure other cases of lzcnt/tzcnt/popcount are handled by rangecheck

概要

JIT範囲分析(RangeCheck::GetRangeFromAssertionsWorker)を更新し、lzcnt/tzcnt/popcount命令に関連する追加のvalue-numbering関数ケースを認識するようにしました。また、推論される定数上限を固定値の64からビット幅に応じて32または64に厳密化しています。

変更内容

  • src/coreclr/jit/rangecheck.cpp: xarch/arm64アーキテクチャのLZCNT/TZCNT/POPCNT関連VN関数IDをカバーするターゲット条件付きswitchケースを追加
  • LeadingZeroCount、TrailingZeroCount、PopCountの推論上限値を、型に基づいて32(32ビット型)または64(64ビット型)に厳密化

パフォーマンスへの影響

JIT最適化の精度向上により、これらのビット操作命令を含むコード路の範囲チェック最適化が改善される可能性があります。範囲分析の精度向上に伴い、不要な境界チェックのより効果的な除去が期待されます。

関連Issue

#128620

その他

この変更は内部JIT実装への変更であり、公開APIには影響しません。


#128600 Add local create-kbe skill

  • 作成者: @vitek-karas
  • 作成日時: 2026年05月26日 18:26:44(UTC)
  • マージ日時: 2026年05月28日 15:37:43(UTC)
  • ラベル: area-skills

概要

Known Build Error(KBE)トリアージガイダンスを共有ドキュメント化し、CI失敗スキャンワークフローとローカルPR対応ツーリング間で同じKBEマッチング・テンプレートルールを使用するようにしました。新規のcreate-kbeスキルを追加し、PR Build Analysis結果を分析してKBE案を生成し、GitHub Issueの作成前にユーザー確認を行うローカルツーリングを実現します。

変更内容

  • .github/workflows/shared/create-kbe.instructions.md(新規): KBEマッチングルールとKBE Issueテンプレートの共有ドキュメント。複数のKBE生成ワークフロー/ツールで再利用される単一の情報源として機能
  • .github/workflows/ci-failure-scan.md: CI失敗スキャンガイダンスをリファクタリング。インラインのテンプレート重複を削除し、共有KBE指示を参照するように変更(-232行、+47行)
  • .github/skills/create-kbe/SKILL.md(新規): PR CI失敗からKBE案を生成・下書きするローカルPR対応スキル仕様を新規追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはツーリング/ワークフロー改善で、実行時のランタイムコードには影響しません
  • スキル名については作成者が提案を募集中です
  • KBEドキュメント化により、複数ワークフロー間でのルール一貫性が向上します

#128567 [browser][coreCLR] Export __stack_pointer global

概要

WebAssembly ブラウザ ビルドで __stack_pointer グローバル エクスポートがデッドコード削除(metadce)により削除される問題を修正します。libCorerun.js が動的に読み込まれた Webcil サブモジュールとスタック ポインタを共有するために必要です。

変更内容

  • eng/native.wasm.targets: ___stack_pointer をエクスポート関数リストに追加
  • eng/native/configureoptimization.cmake: ブラウザ Release ビルドの最適化レベルを -O3/-Os/-Oz から -O2 に変更(metadce 実行を防止)
  • src/coreclr/hosts/corerun/CMakeLists.txt: -Wl,--export=__stack_pointer リンカーフラグと -lexports.js を追加
  • src/mono/browser/build/BrowserWasmApp.CoreCLR.targets: CoreCLR リリンク引数に -Wl,--export=__stack_pointer と -lexports.js を追加
  • src/native/corehost/browserhost/CMakeLists.txt: -Wl,--export=__stack_pointer と -lexports.js をリンク引数に追加

パフォーマンスへの影響

最適化レベルを -O2 に変更することで、wasm-opt 最適化は有効となりますが、より積極的な最適化(metadce)は実行されません。バイナリサイズへの影響あり。

関連Issue

なし

その他

本 PR は暫定的な修正であり、作成者は将来の Emscripten アップグレード後により効率的な実装方法を検討予定としています。__stack_pointer はブラウザ/JavaScript でのアクセスが必要な WebAssembly グローバル変数であり、子 WASM インスタンスへのインポートとして渡されます。


#128547 [cDAC] Implement EnumerateStackFramesFromException in DacDbi API (previously GetStackFramesFromException)

  • 作成者: @Copilot
  • 作成日時: 2026年05月25日 05:21:23(UTC)
  • マージ日時: 2026年05月28日 13:37:33(UTC)
  • ラベル: area-Diagnostics-cdac

概要

CoreCLR DAC/DBI インターフェースの例外スタックフレーム列挙機能を、コールバックベースの API として実装しました。GetStackFramesFromException から EnumerateStackFramesFromException へ移行し、管理コード側の cDAC (DataContractReader) 実装に新しい Exception contract API を追加しています。

新しい公開 API:

record struct ExceptionStackFrameInfo(
    TargetPointer Ip,
    TargetPointer MethodDesc,
    bool IsLastForeignExceptionFrame);

IEnumerable<ExceptionStackFrameInfo> GetExceptionStackFrames(TargetPointer exceptionAddr);

変更内容

  • DAC/DBI インターフェース(ネイティブ側): GetStackFramesFromException をコールバックベースの EnumerateStackFramesFromException に置き換え(dacdbi.idl、dacdbiinterface.h、dacdbiimpl.cpp/h)
  • Exception contract(管理側): 新しい ExceptionStackFrameInfo 構造体と GetExceptionStackFrames() メソッドを IException に追加(IException.cs、Exception_1.cs)
  • スタックトレース解析: StackTraceArrayHeader と StackTraceElement の新しいデータディスクリプターを追加し、ランタイムのスタックトレースペイロード形式をパース(DataType.cs、StackTraceArrayHeader.cs、StackTraceElement.cs)
  • データディスクリプター: object.h で StackTraceArray::ArrayHeader レイアウトを公開、datadescriptor.inc で CDAC ディスクリプターを定義
  • RS(Remote Server)対応: divalue.cpp で新しい列挙 API をコールバック累積を通じて消費
  • ユニットテスト: ExceptionTests.cs に null、空、複数フレームなど各種スタックトレース形状をカバーする契約レベルのテストを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部実装(ネイティブ DAC/DBI インターフェースと管理 cDAC 契約)の改善であり、デバッガ機能の正確な例外情報取得を支援します。コールバックベースの API への移行により、フレーム列挙の効率化が期待されます。


#128542 Remove CORINFO_HELP_ASSIGN_BYREF

  • 作成者: @EgorBo
  • 作成日時: 2026年05月25日 01:13:57(UTC)
  • マージ日時: 2026年05月28日 07:12:40(UTC)
  • ラベル: area-CodeGen-coreclr

概要

CORINFO_HELP_ASSIGN_BYREFヘルパー(GC ポインタを含む構造体コピー用のカスタム呼び出し規約を持つ書き込みバリア)を削除し、CORINFO_HELP_ASSIGN_REFまたはCORINFO_HELP_CHECKED_ASSIGN_REF、あるいはバルク書き込みバリア(CORINFO_HELP_BULK_WRITEBARRIER)に置き換えます。x64での遅いrep movsq命令の使用を回避し、SIMDの活用が可能になります。

// GC ポインタを含む構造体のコピーが高速化
record struct MyStruct(long N1, long N2, long N3, long N4, long N5, string A, string B);

class MyClass
{
    MyStruct _fld;
    void SetA(MyStruct value) => _fld = value; // 大幅に高速化
}

変更内容

  • JIT側: CpObjブロック操作を削除し、GC ポインタを含む構造体コピーを以下のいずれかに分解:
    • 小数のGCポインタ:各スロットごとにASSIGN_REF写き込みバリアに分解(TryDecomposeBlockStoreAsIndirs)
    • 大数のGCポインタ:バルク書き込みバリアヘルパー呼び出し(LowerBlockStoreAsGcBulkCopyCall)
  • ランタイム側: すべてのアーキテクチャ(x86、AMD64、ARM、ARM64、RISC-V、LoongArch64、WebAssembly)のJIT_ByRefWriteBarrierヘルパー実装を削除
  • NativeAOT: RhpByRefAssignRefヘルパー呼び出しを削除
  • R2R形式: メジャーバージョンを19に更新、ヘルパーID0x32を予約(再利用防止)
  • ターゲット定義: すべてのプラットフォームのASSIGN_BYREFレジスタ/キルセット定義を削除
  • LSRA: CpObj固有のレジスタ割り当てロジックを削除

パフォーマンスへの影響

大幅な改善(GC ポインタを含む構造体コピー時):

  • Intel Xeon Platinum 8573C: 11.44倍高速化(31.152 ns → 2.724 ns)
  • AMD EPYC 9V45: 6.68倍高速化(13.121 ns → 1.968 ns)
  • Apple M4: 1.53倍高速化(1.4646 ns → 0.9574 ns)

改善要因:遅いrep movsq命令の廃止とSIMD(vmovdqu)の活用、または効率的な個別スロット書き込みバリア呼び出しに置き換え。ARM64ではrep movsqがないため改善率が低い。

関連Issue

#128542

その他

  • 破壊的変更: ReadyToRun形式のメジャーバージョン更新により、新しいバージョンでコンパイルされたアセンブリは旧バージョンのランタイムで実行できません
  • 今後の作業: CoreCLR/NativeAO

#128541 JIT: skip stack allocation for unused locals

概要

JITのエスケープ解析を拡張し、未使用のローカル変数に対するスタック割り当てをスキップする最適化を実装しました。追跡対象のローカル変数が実際に使用されているかどうかを判定する「used」ビットを追加し、エスケープせず使用もされないローカル変数はヒープ割り当てのままにして後続フェーズで削除可能にします。これにより、不要なスタック展開と死んだストア推論を回避できます。

変更内容

  • src/coreclr/jit/objectalloc.h: エスケープ解析データ構造に「used」ビットを追加(45行追加)
  • src/coreclr/jit/objectalloc.cpp: 「used」ビットの計算とクロージャー処理を実装。ローカル変数がコピー以外の非自明な使用を持つかどうかを判定し、接続グラフを通じて関係を伝播(134行追加)
  • src/coreclr/jit/morph.cpp: 未使用判定を活用した最適化ロジックを追加(27行追加)

パフォーマンスへの影響

スタック割り当てをスキップすることで、不要なメモリ操作を削減し、メモリフットプリントとコンパイル時間を改善する可能性があります。後続フェーズでの削除によって追加の最適化の機会を生み出します。ベンチマーク結果の記載なし。

関連Issue

なし

その他

内部実装の最適化であり、公開APIへの影響はありません。破壊的変更なし。


#128440 [ci-scan] Improve ci-failure-scan emission rules and add daily feedback loop with KPI tracker

概要

ci-failure-scan agentic workflowの改善を行うPRです。既存のCI失敗スキャナーの発行ルールを厳密化して誤検知を削減し、新たに ci-failure-scan-feedback workflowを追加して、メンテナーからのフィードバックを収集し、KPIトラッキングとプロンプト編集提案を日次で行う仕組みを導入します。

変更内容

  • ci-failure-scan.md: スキャン・発行ルールを強化。フォローアップビルドの存在確認、同一実行内の重複排除キャッシュ、拡張されたKBE/トラッカー/修正PR検索ヒューリスティクスを追加。発行されるKBEおよびPRテンプレートに「フィードバック提供方法」のフッターを追加。
  • ci-failure-scan.lock.yml: 新しいプロンプトとリポジトリガード条件を反映した編集後のコンパイル済みワークフロー。
  • ci-failure-scan-feedback.md: 新規追加。週次フィードバック収集、KPIトラッキング、プロンプト編集PRの提案を行うgh-awワークフロープロンプト。
  • ci-failure-scan-feedback.lock.yml: 新規追加。新しいフィードバックワークフロー用のコンパイル済みロックファイル。

パフォーマンスへの影響

影響なし(CI/CDワークフロー管理の改善であり、ランタイム・コンパイラ・ライブラリのパフォーマンスには直接的な影響なし)

関連Issue

なし

その他

  • メンテナーは発行されたすべてのKBE/PRに対して、ワークフロー内でインラインでフィードバックをコメントできます。
  • 次のフィードバック実行時にそのコメントが読み込まれ、プロンプト編集が提案されます。
  • KPIトラッカーが測定可能な指標を報告:発行数vs終了数、「not_planned」としてクローズされた割合、中央値および90パーセンタイル値のクローズ時間、スキャナー確立以降の実行ウィンドウ内での週次トレンドチャート。
  • エージェントジョブは読み取り専用で実行。すべての書き込みはsafe_outputsハンドラージョブにスコープされており、設定済み出力を発行するために必要な狭い書き込み権限を持ちます。
  • 個人フォーク上では実行されません。

#128356 [cDAC] Source generator for IData<T> data classes

概要

Roslyn増分ソースジェネレータ(DataGenerator)を導入し、cDAC IData<T> データクラスの生成を自動化するPRです。属性駆動型のアプローチにより、~150個の手書きクラスをポートしました。[CdacType]、[Field]、[StaticAddress] などの属性で、フィールド読み書きや型ハンドルアクセサを宣言的に定義できます。

[CdacType("System.Threading.Lock")]
internal sealed partial class Lock : IData<Lock>
{
    [Field("_state")]
    public uint State { get; }

    [Field("_owningThreadId")]
    public int OwningThreadId { get; }
}

変更内容

  • 新規属性定義 (CdacAttributes.cs):[CdacType]、[Field]、[StaticAddress]、[StaticReference]、[ThreadStaticAddress]、[RawOffset]、[FieldAddress]、[InstanceDataStart]、[OnInit] を定義
  • ソースジェネレータ実装 (DataGenerator):属性ベースのコード生成により手書きコード量を削減
  • IData クラスのポート:Data/ ディレクトリ配下の ~150 クラスを属性駆動型に変換
  • IManagedTypeSource 新規インターフェース追加:マネージド型ソースの統一的なアクセスを提供
  • IRuntimeTypeSystem から2メソッド削除:GetTypeByNameAndModule と GetCoreLibFieldDescAndDef(削除に伴う互換性への影響あり)
  • ドキュメント追加:IData.md、ManagedTypeSource.md でベストプラクティスと設計方針を記載

パフォーマンスへの影響

影響なし。ソースジェネレータは、コンパイル時にコード生成するため実行時パフォーマンスへの影響はありません。手書きコードからの機械的なポートにより、既存の実行時特性は維持されます。

関連Issue

なし

その他

  • 互換性への懸念:Copilotが指摘する通り、IRuntimeTypeSystem から GetTypeByNameAndModule と GetCoreLibFieldDescAndDef を削除していることは、このインターフェースの外部利用者に対する破壊的変更となります。フォワーディングメソッドまたは非推奨化メソッドの検討が推奨されます。
  • テスト実施:全 cDAC ユニットテストが合格(2177 + 32 個のソースジェネレータ固有テスト)。フィールド読み書き、書き込み可能フィールド、静的/スレッド静的フィールドアクセサ、型ハンドル生成、名前フォールバック、管理型-ネイティブ型の移行シナリオをカバー。
  • 設計ガイド:IData.md で、IData クラスはアルゴリズムロジックを避け宣言的属性のみを使用し、複雑なロジックは OnInit で処理する、ポインタ参照は遅延評価(TargetPointer として保存)すること、1クラス1デスクリプタの原則を推奨。

#127174 Add runtime-diagnostics pipeline to Build Analysis

概要

runtime-diagnostics パイプライン(Azure DevOps定義ID 309)をBuild Analysis設定に追加するPRです。このパイプラインはSOS統合テスト、cDAC no-fallbackテスト、DACベースラインテスト、cDACダンプテストを実行します。現在これらのテスト結果はBuild Analysisで追跡されていないため、PR mergeをブロックできない状態が改善されます。

変更内容

  • eng/build-analysis-configuration.json: パイプラインID 309(runtime-diagnostics)をBuild Analysis設定のallowlistに追加(+4行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはGitHub Copilotの支援により作成されています
  • 影響範囲は、cDAC、runtimeinfo、またはパイプラインYAMLパスへの変更を含むPRのみに限定されます
  • src/native/managed/cdac/**、src/coreclr/debug/runtimeinfo/**、eng/pipelines/** に対する変更でruntime-diagnosticsパイプラインがトリガーされます

#126947 JIT: Unify to instParamLookup and improve GVM test coverage

概要

JIT のジェネリック仮想メソッド(GVM)デバーチャライゼーション機能を準備するための段階的リファクタリングです。CORINFO_DEVIRTUALIZATION_INFO 構造体の複数の ad-hoc フラグを単一の instParamLookup に統一し、GVM テストカバレッジを拡充します。これにより後続の GVM デバーチャライゼーション有効化作業が容易になります。

変更内容

  • テスト拡充: generic_virtual_methods.cs にランタイムルックアップと委譲を対象とした GVM テストケースを追加(148行増加)
  • メタデータリファクタリング: CORINFO_DEVIRTUALIZATION_INFO から複数フラグを削除し、単一の CORINFO_LOOKUP instParamLookup フィールドを導入(corinfo.h)
  • JIT デバーチャライゼーションロジック: importercalls.cpp で instParamLookup を消費し、ガード付きデバーチャライゼーション(GDV)候補追跡を更新
  • JIT/EE インターフェース同期: jiteeversionguid.h でバージョン GUID を更新、マネージド型定義(CorInfoTypes.cs)と SuperPMI シリアライゼーション(agnostic.h、methodcontext.cpp)を対応
  • ヘルパー関数簡略化: morph.cpp のルックアップツリーヘルパーを CORINFO_LOOKUP を直接受け取るように変更

パフォーマンスへの影響

影響なし(リファクタリングと機能追加のみで、実行時パフォーマンスに直結する変更なし)

関連Issue

#112596、#123323 から抽出

その他

  • 互換性: JIT/EE インターフェース GUID 更新により、JIT と EE のバージョン整合を必須とします(内部インターフェース)
  • 設計意図: 複数フラグを instParamLookup に統一することで、メタデータ構造を単純化し、今後の GVM デバーチャライゼーション実装を進めやすくする基盤作りです
  • Copilot レビューから: importercalls.cpp で仮想呼び出しビットクリアの際、GTF_CALL_VIRT_VTABLE のみではなく全仮想種別マスク(GTF_CALL_VIRT_KIND_MASK)をクリアするべきとの指摘あり

#126200 [release/9.0-staging] Update dependencies from dotnet/hotreload-utils

概要

dotnet/hotreload-utilsの依存関係を更新するPull Requestです。Microsoft.DotNet.HotReload.Utils.Generator.BuildToolが9.0.0-alpha.0.26152.4から9.0.0-alpha.0.26202.3にバージョンアップされています。

変更内容

  • eng/Version.Details.xml: HotReload.Utils関連の依存関係バージョン情報を更新(commit 89bc3f1e2272db405757426e0870e8243b2efdd1を参照)
  • eng/Versions.props: Microsoft.DotNet.HotReload.Utils.Generator.BuildToolのバージョン番号を更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動依存更新PR(dotnet-maestrobot作成)
  • release/9.0-stagingブランチへの更新
  • hotreload-utils側のrelease/9.0ブランチ(2026年4月2日ビルド)からの同期

目次