Pull Request on 2026年04月26日

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

注意点

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



#127434 JIT: Use normalized block for comparison in RBO dominator walk

概要

JIT最適化のRBO(Redundant Branch Optimization)ドミネータウォーク処理において、空のBBJ_ALWAYSブロックチェーンの作成後に早期終了してしまうバグを修正しました。比較対象のブロックを正規化(副作用のないブロックをスキップ)することで、不正なブロック比較を防ぎます。その結果、不必要な条件分岐が削除され、コード生成が改善されています。

変更内容

  • src/coreclr/jit/redundantbranchopts.cpp: ドミネータウォーク処理でブロック比較前にskipSideEffectFreeBlocksでブロックを正規化し、空のBBJ_ALWAYSチェーンによる比較ミスマッチを防止
  • src/tests/JIT/opt/RedundantBranch/RedundantBranchDominating.cs: ネストされたドミネーティング分岐シナリオ(Dom_05)の新規テストケース追加

パフォーマンスへの影響

コード生成が最適化され、冗長な条件分岐が削除されました。具体的には:

  • 生成コードサイズが21バイトから16バイトに削減(約24%削減)
  • PerfScoreが2.88から2.25に改善(約22%改善)
  • 不必要な条件分岐チェックが除去される

関連Issue

#127432

その他

本修正はJITコンパイラの内部最適化パス(optRedundantDominatingBranch)に対する修正であり、公開APIや言語機能には影響を与えません。既存の最適化結果の正確性向上が目的です。


#127433 JIT: relax inliner heuristics for callees on [Intrinsic] types

  • 作成者: @EgorBo
  • 作成日時: 2026年04月26日 12:26:16(UTC)
  • マージ日時: 2026年04月26日 17:02:08(UTC)
  • ラベル: area-CodeGen-coreclr

概要

"unsafe削除"の取り組みで導入されるSpan.SliceやVector.Createなど、[Intrinsic]属性が付与されたメソッドの呼び出しが、JITインライナーの時間予算に負の影響を与えてコード品質が低下している問題を解決します。本PRは、これらのintrinsic型のメソッドをインラインする際の予算チェックを緩和し、小規模メソッドと同様の扱いをすることで、回帰を防ぎます。

変更内容

  • inlinepolicy.h/cpp: 新しい観察値CALLEE_IS_INTRINSIC_TYPEを追加し、intrinsic型呼び出しに対する予算制限と乗数ペナルティ(レアコールサイト、プロファイルベースのペナルティ、非リターン領域キャップ)を緩和
  • inline.def: callee scopeでIS_INTRINSIC_TYPE観察値を定義
  • fgbasic.cpp: インライン候補スキャン時にコンパイル情報からCALLEE_IS_INTRINSIC_TYPEを記録
  • inline.cpp: intrinsic型のstate管理を追加

パフォーマンスへの影響

コードジェン品質の改善が期待されます。特にSpan関連やSIMDベクトル、ハードウェアintrinsicを多用するコードでの回帰防止が目的です。PMI jit-diffsで数件のヒット報告があります。

関連Issue

#127429

その他

  • 内部実装(JITコンパイラ)の変更であり、公開APIへの影響なし
  • 互換性に関する破壊的変更なし

#127427 Use safe Span.Slice loop pattern in Enumerable.FillIncrementing

概要

Enumerable.FillIncrementing<T>のベクトル化フィル処理を、安全なSpan<T>.Sliceループパターンを使用するように書き直しました。Unsafe.*およびMemoryMarshal.GetReferenceを排除し、JITが境界チェックを削除できる形状を維持しています。

変更内容

  • src/libraries/System.Linq/src/System/Linq/Range.cs
    • FillIncrementing<T>のベクトル化フィル処理をリファクタリング
    • Unsafe.*/MemoryMarshal.GetReferenceを使用したポインタ操作を削除
    • while (destination.Length >= Vector<T>.Count) { Vector<T>.CopyTo(destination); destination = destination.Slice(...); } パターンに変更
    • スカラー末尾フィルをシンプル化

パフォーマンスへの影響

影響なし。コード生成は小規模な差分のみで、新しい境界チェックは追加されていません。JITは安全なループ形状を認識し、既存の境界チェック削除の最適化を維持します。

関連Issue

#127427

その他

  • GitHub Copilot(AI支援)により作成されたPR
  • メモリ安全性を向上させながら、パフォーマンス特性を保持

#127280 [browser] Enable StackTraceLineNumberSupport in StackTrace tests

概要

ブラウザ(WebAssembly)をターゲットする場合にSystem.Diagnostics.StackTrace.TestsでStackTraceLineNumberSupportを有効化し、スタックトレースのファイル/行番号情報をサポートします。これにより、CoreCLR+browserでPDB情報に依存するテストが[ActiveIssue]でスキップされずに実行できるようになります。

変更内容

  • System.Diagnostics.StackTrace.Tests.csproj: ブラウザターゲット時にStackTraceLineNumberSupport=trueを設定(外部からのオーバーライドを許可)
  • StackTraceTests.cs: [ActiveIssue(#50957)]の条件からPlatformDetection.IsBrowserを削除し、IsMonoAOTのみに制限(7行変更)
  • StackFrameTests.cs: 同様にスキップ条件をIsMonoAOTに絞り込み(4行変更)
  • StackFrameExtensionsTests.cs: 同様にスキップ条件をIsMonoAOTに絞り込み(2行変更)

パフォーマンスへの影響

影響なし

関連Issue

#50957、#127147の review feedbackに対応

その他

WebAssembly SDKはデフォルトでDebugSymbolsが有効でない場合にStackTraceLineNumberSupportをfalseに設定し、スタックトレースから行番号情報を削除します。本変更により、既に設定されているDebuggerSupport=trueとPDBファイル包含との組み合わせで、ブラウザ環境でのスタックトレース機能を完全に活用できるようになります。


目次