注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
#127434 JIT: Use normalized block for comparison in RBO dominator walk
- 作成者: @hez2010
- 作成日時: 2026年04月26日 14:12:17(UTC)
- マージ日時: 2026年04月26日 18:53:58(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
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
その他
本修正は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
その他
- 内部実装(JITコンパイラ)の変更であり、公開APIへの影響なし
- 互換性に関する破壊的変更なし
#127427 Use safe Span.Slice loop pattern in Enumerable.FillIncrementing
- 作成者: @EgorBo
- 作成日時: 2026年04月25日 17:35:26(UTC)
- マージ日時: 2026年04月26日 11:27:22(UTC)
- ラベル: area-System.Linq reduce-unsafe
概要
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
その他
- GitHub Copilot(AI支援)により作成されたPR
- メモリ安全性を向上させながら、パフォーマンス特性を保持
#127280 [browser] Enable StackTraceLineNumberSupport in StackTrace tests
- 作成者: @maraf
- 作成日時: 2026年04月22日 15:28:37(UTC)
- マージ日時: 2026年04月26日 16:28:59(UTC)
- ラベル: arch-wasm area-System.Diagnostics test-enhancement os-browser
概要
ブラウザ(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ファイル包含との組み合わせで、ブラウザ環境でのスタックトレース機能を完全に活用できるようになります。