Pull Request on 2026年05月10日

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

注意点

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



#128004 Fix flaky AsyncContinuation cDAC dump test on osx-arm64 by using Task.Yield

概要

osx-arm64プラットフォームの高速マシン上で、非同期継続のcDAC(Compact Data Access Component)ダンプテストが不安定に失敗する問題を修正します。Task.Delay(1)をawait時に使用していたため、タイマーが継続チェック前に発火してしまい、AsyncDispatcherInfo型がロードされないまま進行していました。Task.Yield()に変更することで、マシン速度に関わらず確実に非同期サスペンションを保証します。

変更内容

  • src/native/managed/cdac/tests/DumpTests/Debuggees/AsyncContinuation/Program.cs: InnerAsync()メソッド内でawait Task.Delay(1)をawait Task.Yield()に変更
    • YieldAwaitableのIsCompletedは常にfalseを返すため、マシンの処理速度に依存せず確実にDispatchContinuations()経由で継続がポストバックされます

パフォーマンスへの影響

影響なし(テストコード修正のため)

関連Issue

#127774

その他

  • このPull Requestはビルド1413917と1411121で報告された失敗に対応しています
  • GitHub Copilotの支援を受けて作成されました

#127999 Fix CS9361 stackalloc unsafe context in X25519DiffieHellmanCng

  • 作成者: @Copilot
  • 作成日時: 2026年05月09日 21:29:03(UTC)
  • マージ日時: 2026年05月10日 04:03:54(UTC)
  • ラベル: area-System.Security

概要

新しいRoslyn 5.7.0で導入されたコンパイラエラーCS9361に対応するため、X25519DiffieHellmanCng.DeriveRawSecretAgreementCoreメソッドのstackalloc式を修正しました。アセンブリ全体に[SkipLocalsInit]が設定されている環境では、初期化されていないstackallocはunsafeコンテキストが必須となります。メソッド全体をunsafeにするのではなく、stackallocの割り当てだけを最小限のunsafeブロックでラップし、scoped修飾子で参照安全性を保持します。

scoped Span<byte> publicKeyBuffer;
unsafe
{
    publicKeyBuffer = stackalloc byte[PublicKeySizeInBytes * 2];
}

変更内容

  • X25519DiffieHellmanCng.Windows.cs: Span<byte> publicKeyBuffer = stackalloc byte[...]をscoped Span<byte>で宣言し、初期化式を狭いスコープのunsafeブロックに移動。これにより、メソッド自体の安全性を維持しつつCS9361エラーを回避します。

パフォーマンスへの影響

影響なし

関連Issue

#127944(Roslyn 5.7.0導入)、#127995(ビルド失敗報告)

その他

  • コンパイラの破壊的変更に対応した修正で、機能的な変更はありません。
  • scoped修飾子を使用することで、元の参照安全性セマンティクスを保持しながら、unsafe修飾子をメソッドに追加しない設計となっています。
  • System.Security.Cryptographyプロジェクト内の他のstackallocサイトもコンパイラの確認によって検査されており、本PR以外での問題は確認されていません。

#127997 Remove buildConfig from sccache cache key to share across PR/rolling builds

  • 作成者: @agocke
  • 作成日時: 2026年05月09日 18:37:20(UTC)
  • マージ日時: 2026年05月10日 08:31:55(UTC)
  • ラベル: area-Infrastructure

概要

sccache のAzure Pipelines キャッシュキーから buildConfig (Debug/Release) を削除し、PR ビルドがローリングビルドのキャッシュを再利用できるようにしました。これにより、PR のネイティブコンパイルレッグで 33-46% のビルド時間削減 が期待されます。

変更内容

  • eng/pipelines/coreclr/templates/setup-sccache.yml: sccache Cache@2 キーと restoreKeys から buildConfig を削除。ネイティブコンパイラフラグは -rc (RuntimeConfiguration) で決定され、-c (Configuration) に依存しないため、PR/ローリングビルド間でのキャッシュ共有が安全であることをドキュメント化。
  • System.Security.Cryptography ファイル群: 軽微な変更(3ファイル、各1行の修正)

パフォーマンスへの影響

大幅な改善

  • PR ビルドの初回プッシュでのキャッシュヒット率が 0% から ~99% に向上
  • linux-x64 ネイティブコンパイルレッグで 33-46% のビルド時間削減を見込み
  • ローリングビルド(main スコープ)で生成されたキャッシュをPRビルドが活用可能に

関連Issue

なし

その他

キャッシュの安全性:ネイティブコンパイラのビルド設定は -rc で固定されており、-c フラグはマネージドコード(sccache がキャッシュしない領域)にのみ影響するため、PR/ローリングビルド間でのキャッシュ共有に互換性問題なし。


#127995 Optimize Enumerable Min/Max final reduction with shuffles

  • 作成者: @EgorBo
  • 作成日時: 2026年05月09日 16:46:36(UTC)
  • マージ日時: 2026年05月10日 14:15:30(UTC)
  • ラベル: area-System.Linq

概要

Enumerable.Min/Maxのベクトル化実装における最終的な還元処理を最適化しました。Vector128<T>アキュムレータをスカラループからシャッフルベースの水平還元に変更することで、特に小さい要素型(byte/short)で大幅な性能向上を実現しています。

変更内容

  • src/libraries/System.Linq/src/System/Linq/MaxMin.cs:
    • Vector128<T>の最終還元ロジックを専用ヘルパーHorizontalMinMax<T, TMinMax>に置き換え
    • 従来のレーンごとのスカラループ処理から、log₂(レーン数)回のシャッフル操作による還元に変更
    • byte/short/int/long各型に対応した汎用ロジックを実装

パフォーマンスへの影響

大幅な性能向上を実現(特に小要素型で顕著):

  • ARM64 (Neoverse-N2):

    • MaxByte (Length=16): 27.85倍高速化 (51.54ns → 1.85ns)
    • MaxShort (Length=64): 6.33倍高速化 (22.35ns → 3.53ns)
  • Intel AVX-512 (Emerald Rapids):

    • MaxByte (Length=64): 11.39倍高速化 (16.31ns → 1.44ns)
    • MaxShort (Length=64): 4.77倍高速化 (6.52ns → 1.37ns)
  • AMD EPYC (Turin):

    • MaxByte (Length=16): 6.27倍高速化 (4.41ns → 0.70ns)
    • MaxByte (Length=64): 4.61倍高速化 (5.86ns → 1.27ns)

larger型(int/long)は既に最適化されていたため影響は限定的です。

関連Issue

なし

その他

  • GitHub Copilot CLIにより生成されたPRです
  • Tensorsライブラリの類似実装にインスパイアされており、IL サイズの懸念からTensorsへの依存は避けています
  • 異なるジェネリクスを使用するため、ソースファイルの共有は見送られました

#127615 JIT: Fix GenTree::IsPow2 functions

概要

JITコンパイラのGenTree::IsPow2関連関数における符号拡張の問題を修正しました。IsIntegralConstUnsignedPow2が符号拡張された値を渡していたため、実際には符号なし整数として機能していませんでした(例:1 << 31がpow2として認識されない)。新たにUnsignedIntegralValueメソッドを追加してゼロ拡張リテラルを提供し、複数の関数で使用することで修正しました。

変更内容

  • gentree.h/gentree.cpp: UnsignedIntegralValueメソッドを追加し、定数値をゼロ拡張して返すように実装
  • morph.cpp: fgMorphUModToAndSubでUnsignedIntegralValueを使用するよう更新
  • lower.cpp: lower処理でUnsignedIntegralValueを使用するよう更新
  • emitarm64.cpp: 符号拡張関連のコード(13行削除)を整理
  • utils.h: 補助的な定義を追加

パフォーマンスへの影響

間接的なパフォーマンス向上が期待されます。符号拡張の問題を修正することで、pow2判定が正確になり、最適化(特にモジュロ演算の変換やビット演算最適化)がより適切に適用されるようになります。

関連Issue

なし

その他

この修正は、符号なし整数の定数値で指数が大きい値(特に31ビット目以上)を扱う場合の最適化精度向上に寄与します。JITの定数折り畳みおよびビット演算最適化に関する内部実装の改善です。


目次