Pull Request on 2026年07月12日

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

注意点

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



#130579 [Wasm RyuJit] fix validation error in Microsoft.CodeAnalysis.dll

概要

WebAssembly(WASM)JITコンパイラにおいて、構造体ローカル変数のゼロ初期化時に型検証エラーが発生する問題を修正しました。ゼロ定数(GT_CNS_INT(0))をローカル変数のレジスタ型に再型付けすることで、WASMの厳密な型検証要件を満たすようにしています。

変更内容

  • src/coreclr/jit/lower.cpp:構造体ローカル変数の格納処理の低レベル化(lowering)を調整し、GT_CNS_INT(0)のゼロ定数をWASMターゲットでローカル変数のレジスタ型に再型付けする処理を追加しました(+10/-2)。SIMD型のゼロ初期化と同様のアプローチを採用し、lclRegTypeが定数の型と異なる場合に再型付けを実行します。

パフォーマンスへの影響

影響なし

関連Issue

#130579

その他

  • 本修正はWASMターゲットに限定され、非WASM環境での既存動作は保持されます(小規模なリファクタリング除く)
  • SIMD型のゼロ初期化に関する既存の動作も維持されます
  • Microsoft.CodeAnalysis.dllの検証エラー解決に向けた修正です

#130473 [release/8.0-staging] Disable failing iOS device tests

概要

iOS物理デバイス上で実行されるiOS.Device.Aot.TestとiOS.Device.ExportManagedSymbols.Testをrelease/8.0-stagingブランチで無効化します。これらのテストはCI信号として有用性がなくなり、servicing branch上ではmacOS新バージョンへの対応予定がないため、テスト実行を停止します。

変更内容

  • src/tests/FunctionalTests/iOS/Device/AOT/iOS.Device.Aot.Test.csproj: 2行追加
  • src/tests/FunctionalTests/iOS/Device/ExportManagedSymbols/iOS.Device.ExportManagedSymbols.Test.csproj: 2行追加

(変更内容の詳細は提供されていません)

パフォーマンスへの影響

影響なし

関連Issue

#119665

その他

  • 物理iOSデバイス基盤が必要なため、ローカル検証は実施されていません
  • CI環境で変更が妥当性検証される予定です
  • release/8.0-stagingブランチ(servicing branch)上での変更であり、メインラインではなく保守バージョンに対する変更です

#130471 [release/9.0-staging] Disable failing iOS device tests

概要

release/9.0-stagingブランチにおいて、物理的なiOSデバイスでのみ実行される2つのテスト(iOS.Device.Aot.TestとiOS.Device.ExportManagedSymbols.Test)を無効化します。これらのテストはCI信号の有用性が低下しており、サービシングブランチではmacOSの新バージョン対応が行われないため、無効化されます。

変更内容

  • src/tests/FunctionalTests/iOS/Device/AOT/iOS.Device.Aot.Test.csproj: テスト無効化設定を追加
  • src/tests/FunctionalTests/iOS/Device/ExportManagedSymbols/iOS.Device.ExportManagedSymbols.Test.csproj: テスト無効化設定を追加

パフォーマンスへの影響

影響なし(テスト実行の無効化のため、CI実行時間の短縮が期待される)

関連Issue

#119665

その他

  • 物理的なiOSデバイスインフラストラクチャが必要なテストのため、ローカル環境でのテストは実行されていません
  • サービシングブランチではmacOSの新バージョン対応が計画されていないため、これらのテストの維持が不可能なことが背景にあります

#130446 JIT: always home register params on wasm

概要

WebAssemblyターゲットのJITコンパイラにおいて、関数プロローグ中のレジスタパラメータのホーミング処理を常に実行するように修正しました。WasmRegAllocはLSRAと異なりcalleeRegArgMaskLiveInを設定しないため、この修正により正確性問題を解決しています。また、ホーミング判定ロジックを入口ブロックのライブイン情報から参照カウント(lvRefCnt())ベースに変更しました。

変更内容

  • src/coreclr/jit/codegencommon.cpp: genFnProlog関数でWASMターゲット向けにcalleeRegArgMaskLiveInをゲート条件としない無条件のgenHomeRegisterParams呼び出しを追加
  • src/coreclr/jit/codegenwasm.cpp: WasmのgenHomeRegisterParams実装において、パラメータをスピルするかどうかの判定をfgFirstBB->bbLiveInからlvRefCnt()に変更

パフォーマンスへの影響

SuperPMI(corelib crossgen2、ブラウザターゲット)での計測: +28バイト / 4コンテキスト / 0.00%(実質的な性能への悪影響なし)

関連Issue

#129850(caller-side this-drop ブロッカーを解決)

その他

  • 本変更はGitHub Copilotの支援を受けて作成されました
  • WASM固有の正確性修正であり、他のターゲット(LSRA使用)には影響しません
  • calleeRegArgMaskLiveInの初期化により、将来的にこの値を参照する場合のランダムな動作を防止しています

#130426 Fix range-check monotonicity for multiplication

  • 作成者: @EgorBo
  • 作成日時: 2026年07月09日 18:48:17(UTC)
  • マージ日時: 2026年07月12日 12:02:13(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Range Analysis(範囲解析)におけるバグ修正。乗算と左シフト操作が負の値を縮小できるにもかかわらず、単調増加操作として扱われていました。この不正な扱いにより、無効な範囲に拡大され、比較式が誤ってコンパイル(constant folding)される問題がありました。修正では単調ワイデニングを加算のみに限定し、回帰テストを追加しています。

変更内容

  • src/coreclr/jit/rangecheck.cpp: 乗算と左シフト操作の単調性チェックを修正。単調ワイデニングを加算のみに限定する変更(+5/-6行)
  • src/tests/JIT/Regression/JitBlue/Runtime_130425/Runtime_130425.cs: 報告されたコンパイル誤りに対する回帰テスト追加(+35行)
  • src/tests/JIT/Regression/Regression_ro_2.csproj: テストプロジェクト構成の更新(+1行)

パフォーマンスへの影響

影響なし。SuperPMI benchmarks.runで、より精密な修正と比較してアセンブリコードの差分がゼロであることが確認されています。

関連Issue

#130425

その他

JIT(Just-In-Time)コンパイラの内部実装(Range Analysis)に対する修正。保守的なアプローチとして、乗算と左シフトの単調増加性を除外し、加算のみを信頼できる単調操作として扱うようにしています。


#130332 Arm64: use FEAT_CSSC cnt/ctz for PopCount and TrailingZeroCount

  • 作成者: @EgorBo
  • 作成日時: 2026年07月08日 07:14:07(UTC)
  • マージ日時: 2026年07月12日 12:03:32(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Arm64アーキテクチャにおいて、FEAT_CSSC(ARMv8.8以上対応)の検出と統合を実装し、BitOperations.PopCountおよびBitOperations.TrailingZeroCountをスカラcnt/ctz命令で最適化します。対応CPUでは、ベクトルレジスタとのラウンドトリップを回避し、特にPopCount(ulong)で大幅なパフォーマンス向上を実現します。

// 最適化の対象
static int TestPOPCNT(uint value) => BitOperations.PopCount(value);
static int TestPOPCNT64(ulong value) => BitOperations.PopCount(value);
static int TestTZC(uint value) => BitOperations.TrailingZeroCount(value);
static int TestTZC64(ulong value) => BitOperations.TrailingZeroCount(value);

変更内容

  • CPU機能検出: minipalでLinux HWCAPおよびApple sysctlを経由してFEAT_CSSCを検出し、VM CPU flagsに反映
  • ISA統合: InstructionSet_CsscをJIT内部で定義し、Ready2Runメタデータに追加(R2R bit 93)
  • コード生成最適化:
    • PopCount: ベクトル演算(movi+ins+cnt+addv+umov)からcnt w0, w0/cnt x0, x0へ簡略化
    • TrailingZeroCount: rbit+clzの2命令からctz w0, w0/ctz x0, x0の1命令へ簡略化
  • LSRA/エミッター更新: CSSC利用時にSIMDテンポラリレジスタを不要化し、スカラ命令エンコーディングを追加
  • 設定ゲート: EXTERNAL_EnableArm64Cssc設定スイッチで制御可能
  • JIT/EE互換性: インターフェース版GUIDを更新

パフォーマンスへの影響

Apple M5 Proでのベンチマーク結果(1024要素配列を対象):

メソッド 現在 CSSC適用後 改善率
PopCount(uint) 271.9 ns 247.5 ns 0.91倍(9%改善)
PopCount(ulong) 1,568.5 ns 247.7 ns 0.16倍(84%改善)
TrailingZeroCount(uint) 255.4 ns 246.3 ns 0.96倍(4%改善)
TrailingZeroCount(ulong) 255.8 ns 243.4 ns 0.95倍(5%改善)

PopCount(ulong)の大幅な改善はGPR⟷SIMDラウンドトリップ回避に起因。サーバーArm64ハードウェアでは異なる結果の可能性あり。

関連Issue

なし

その他

  • Apple M5/M4では完全対応、Helix環境(Apple M4)ではまだCSCSを非サポートのため、M5以上またはNeoverse N4+/V4+搭載ハードウェアで全機能テスト可能
  • 今後CSSC追加命令対応の可能性:abs、smaxなど

目次