注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #127547 Revert "[android] Enable CoreCLR runtime pack production for android-arm (#127225)"
- #127540 [cDAC] Implement EnumerateAssembliesInAppDomain for cDAC
- #127534 X25519DiffieHellmanOpenSsl
- #127526 [QUIC] Do not allocate exception if it might not be used
- #127524 JIT: fix Vector{128,256}.ConvertToInt32 use-before-def in gtNewSimdCvtNode
- #127513 Don't get last write time of empty list of files
- #127478 Exclude DeadThreads test from GC stress compatible set
- #127471 [cDAC] Implement EnumTypeDefs, EnumMethods, GetExportedTypeProps, FindExportedTypeByName
- #127370 [browser][coreCLR] Support interpreter code resolution on portable entrypoint platforms
- #127369 Add missing custom attribute marking to ILTrim TokenBased nodes
- #127355 Fix sporadic AccessViolation in compressed single-file apps on Apple Silicon
- #127292 Add configurable EventPipe CPU sampling rate via
DOTNET_EventPipeThreadSamplingRate - #127267 Rename JitDasmWithAddress to JitDisasmWithAddress
- #127220 [wasm][coreclr] Update the ConvertToInteger tests active issue
- #127148 Replace PERFSCORE_MEMORY_* macros with PerfScoreMemoryAccessKind enum class
- #127060 [ios-clr] Enable StackTrace tests on Apple mobile
- #127058 [ios-clr] Enable ResourceAssemblyLoadContext fallback for Apple mobile CoreCLR
- #127033 [X64][APX] Fix a few bugs in APX implementation and improve the control knob design
- #126998 [release/10.0] [QUIC] Update MsQuic
- #126977 Port 126929 to 10.0
- #126953 [interp] Fix doubled interpreter frames in DAC/DBI stack walks
- #126905 Add
Type.GetNullableUnderlyingType()virtual API - #126649 Reinstate LINQ join convenience overloads and fix the build break
- #126607 Adjust breaking change workflow based on issues seen
- #126576 [clr-interp] Add initial CoreCLR interpreter func-eval support
- #126360 JIT: Fully share helper-based suspension tails
- #125180 JIT: Accelerate floating->long casts on x86
#127547 Revert "[android] Enable CoreCLR runtime pack production for android-arm (#127225)"
- 作成者: @simonrozsival
- 作成日時: 2026年04月29日 05:47:14(UTC)
- マージ日時: 2026年04月29日 10:44:33(UTC)
- ラベル: area-Infrastructure
概要
PR #127225で有効化したandroid-arm向けのCoreCLRランタイムパック生成を無効化するリバート。android-armがCI環境でSystem.DateTime.get_Now()内でSIGSEGVクラッシュを発生させているため、根本原因の調査中に変更を取り消します。
変更内容
- eng/Subsets.props: Android 32ビットアーキテクチャ(arm、x86)を対象外とするCoreCLRサポートゲーティングを復活
- eng/pipelines/runtime.yml: CoreCLR Android シナリオから
android_armを削除(Mono Android レーンは維持) - eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml: CoreCLR Android 追加プラットフォームジョブから
android_armを削除 - eng/pipelines/coreclr/templates/helix-queues-setup.yml:
android_arm向けのCoreCLR Helixキューマッピングを削除
パフォーマンスへの影響
影響なし(リバート変更のため)
関連Issue
#127225(リバート対象のPR)、#127500(android-armのSIGSEGVクラッシュ)
その他
Android ARM32(armeabi-v7a)のCoreCLRサポートは、根本的なクラッシュの原因が特定・修正されるまで再度無効化されます。
#127540 [cDAC] Implement EnumerateAssembliesInAppDomain for cDAC
- 作成者: @Copilot
- 作成日時: 2026年04月29日 00:33:09(UTC)
- マージ日時: 2026年04月29日 20:13:35(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Component DAC)のEnumerateAssembliesInAppDomain機能をレガシー委譲スタブから管理実装に置き換えました。ILoaderコントラクトを使用してアセンブリ列挙ロジックを実装し、ネイティブC++実装(dacdbiimpl.cpp)と動作を統一します。
変更内容
- IDacDbiInterface.cs:
EnumerateAssembliesInAppDomainのコールバックパラメータをnintからdelegate* unmanaged<ulong, nint, void>に変更(型安全性向上) - DacDbiImpl.cs: 完全な管理実装
- Null AppDomainで早期にS_OK を返す
ILoader.GetModuleHandlesでIncludeLoading | IncludeLoaded | IncludeExecutionフラグを指定して列挙- 各ModuleHandleを
ILoader.GetAssemblyでアセンブリポインタに解決 - 各エントリに対してコールバック実行
- DEBUG時の検証:レガシーDAC出力と照合
- DacDbiImplTests.cs: 5つのユニットテスト追加(null AppDomain、nullコールバック、単一/複数/空のアセンブリ列挙をモック化した
ILoaderでテスト)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRはDiagnosticsセッション時のアセンブリ列挙処理をマネージコードで実装することで、レガシーDAC への依存を減らし、cDACの完全性を向上させます。EnumerateThreadsと同じパターンで実装されており、一貫性があります。
#127534 X25519DiffieHellmanOpenSsl
- 作成者: @vcsjones
- 作成日時: 2026年04月28日 22:06:12(UTC)
- マージ日時: 2026年04月29日 15:14:48(UTC)
- ラベル: area-System.Security cryptographic-docs-impact
概要
OpenSSL上で動作するX25519DiffieHellmanOpenSslの実装を追加します。既存のEVP_PKEYハンドルをラップし、ハンドルの検証と秘密鍵の有無を判定する機能を提供します。
変更内容
- 新しい公開API:
X25519DiffieHellmanOpenSslクラスをSystem.Security.Cryptographyに追加(OpenSSL環境とNotSupported環境で異なる実装) - ネイティブ実装:
CryptoNative_X25519IsValidHandlePAL関数を追加し、EVP_PKEYハンドルのX25519妥当性検証と秘密鍵の有無を検出 - マネージド相互運用: Unix環境向けのP/Invoke実装とラッパーを追加
- テスト: Unix/OpenSSL環境向けのハンドルコンストラクタ・複製・相互運用テスト、および非Unix環境向けのPlatformNotSupportedExceptionテストを追加
- リソース: 無効なX25519 EVP_PKEYハンドル用のエラー文字列を追加
パフォーマンスへの影響
影響なし
関連Issue
その他
- OpenSSL環境とそれ以外で条件付きコンパイルにより異なる実装を提供
- ネイティブレイヤー(C)とマネージドレイヤー(C#)の相互運用実装を含む
- ref assemblyおよびプロジェクトファイルの更新により、ビルドと公開APIに新しい型を統合
#127526 [QUIC] Do not allocate exception if it might not be used
- 作成者: @ManickaP
- 作成日時: 2026年04月28日 18:59:41(UTC)
- マージ日時: 2026年04月29日 08:22:53(UTC)
- ラベル: area-System.Net.Quic
概要
QUIC ストリームのシャットダウンパスにおいて、不要な例外割り当てを削減するパフォーマンス最適化です。ストリーム開始タスクソース(_startedTcs)が既に完了している場合、OperationAborted 例外の作成をスキップして、不要なメモリ割り当てと例外処理のオーバーヘッドを回避します。HTTP/3 サーバーシナリオの高頻度シャットダウンイベントパスに対する最適化です。
変更内容
- src/libraries/System.Net.Quic/src/System/Net/Quic/QuicStream.cs
_startedTcs.TrySetException(ThrowHelper.GetOperationAbortedException())の呼び出しを_startedTcs.IsCompletedのチェックで保護- タスクソースが既に完了している場合、例外割り当てをスキップ
- シャットダウン完了セマンティクスは保持しつつ、不要な例外生成を防止
パフォーマンスへの影響
改善あり - 画像による検証結果として、修正前に発生していた QuicException の割り当てが削減されました。HTTP/3 サーバーシナリオにおいて高頻度で発生するシャットダウンパスでの割り当て削減により、メモリ圧力とガベージコレクション負荷の軽減が期待できます。具体的な数値はPRに明記されていませんが、このような低レベルのホットパスの最適化は累積的なパフォーマンス向上に寄与します。
関連Issue
その他
なし
#127524 JIT: fix Vector{128,256}.ConvertToInt32 use-before-def in gtNewSimdCvtNode
- 作成者: @EgorBo
- 作成日時: 2026年04月28日 18:42:00(UTC)
- マージ日時: 2026年04月29日 02:19:21(UTC)
- ラベル: area-CodeGen-coreclr
概要
Compiler::gtNewSimdCvtNodeにおける非AVX-512経路で、Vector{128,256,512}.ConvertToInt32(Vector*<float>)が入力値に対して誤った結果を生成するuse-before-def バグを修正しました。具体的には、float.MinValue入力時に部分的なゼロが混在した結果ではなく、正しく飽和値-2147483648が返されるようになります。
変更内容
- src/coreclr/jit/gentree.cpp:
gtNewSimdCvtNode内のGT_AND_NOT操作における引数順序を修正op1Clone1(IsNaN計算用)とop1(AND_NOT左オペランド)の使用対象を入れ替えAND_NOT(a, b)がAND(a, NOT(b))に分解される際、左オペランドaが先に評価される仕様に対応- 修正前:
AND_NOT(op1Clone1, mask1)→ 修正後:AND_NOT(op1, mask1)で、COMMA内のSTOREが先に実行されるよう保証
パフォーマンスへの影響
影響なし
関連Issue
その他
- 根本原因:
fgMakeMultiUseで生成されたCOMMA式(STORE temp = orig, LCL_VAR temp)の評価順序の誤り。AND_NOTの左オペランドが右側のIsNaN計算より先に評価されるため、STORE前のテンポラリ値を読み込んでいた - 潜在期間: SIMD32/64定数伝播の改善(PR #127124/#127402)以前は、内部の
IsNaN(op1)展開がアセンブリコード生成で十分にマテリアライズされていたため、バグが顕在化していなかった - 検証状況:
- AVX-512無効時と有効時の両環境で正しい出力を確認
Vector512Tests.ConvertToInt32Test/ConvertToInt32NativeTestがDOTNET_EnableAVX512=0で合格- SuperPMI検証: 38,409コンテキスト、0失敗・0アサート
- 補足: 関連PR #127499は当初
impSpecialIntrinsicにAVX-512ゲートを追加していたが、その処理は非AVX-512環境ではすでに到達不可能なため、本PRが実質的な修正対象
#127513 Don't get last write time of empty list of files
- 作成者: @jtschuster
- 作成日時: 2026年04月28日 15:46:44(UTC)
- マージ日時: 2026年04月29日 09:18:01(UTC)
- ラベル: area-Infrastructure-coreclr
概要
MSBuildが空のファイルリストに対してSystem.IO.File.GetLastWriteTime(...)を呼び出すのを防ぐ修正です。fresh test run(キャッシュが存在しない新規実行)時にIL-CG2 "done"ファイルがまだ存在しない場合に、テストビルドパイプラインの失敗を回避します。
変更内容
- src/tests/Common/tests.targets:
_StaleIlCg2DoneFileアイテムの計算を@(_IlCg2DoneFiles)が空でないことを確認する条件で保護(+1/-1行)
パフォーマンスへの影響
影響なし。不要なファイルシステムアクセスを削減するため、パフォーマンスが若干改善される可能性があります。
関連Issue
なし
その他
この変更はsrc/testsビルド/テストパイプラインの初期実行時の安定性向上を目的としています。R2Rキャッシュマーカーが存在しない状態での失敗を防ぎます。
#127478 Exclude DeadThreads test from GC stress compatible set
- 作成者: @Copilot
- 作成日時: 2026年04月27日 23:00:49(UTC)
- マージ日時: 2026年04月29日 15:26:11(UTC)
- ラベル: area-System.Threading
概要
DeadThreadsテストが高い頻度でスレッドを生成するため、GCストレス実行時に頻繁なGCによって実行が遅延し、OOMまたは過度なページングが発生する問題を解決するため、このテストをGCストレス互換テストセットから除外します。
変更内容
- src/tests/baseservices/threading/DeadThreads/DeadThreads.csproj:
<GCStressIncompatible>true</GCStressIncompatible>プロパティを追加し、DeadThreadsテストをGCStress3/GCStressC実行から除外する設定を施しました。
パフォーマンスへの影響
GCストレス実行時におけるメモリ不足(OOM)やページング過剰による性能低下の緩和に貢献します。
関連Issue
なし
その他
- このPR説明はGitHub Copilotにより生成されています。
- テスト除外の理由を説明するコメントが追加されています。
#127471 [cDAC] Implement EnumTypeDefs, EnumMethods, GetExportedTypeProps, FindExportedTypeByName
- 作成者: @max-charlamb
- 作成日時: 2026年04月27日 20:50:47(UTC)
- マージ日時: 2026年04月29日 17:40:32(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Compact Debugging Access Component)の MetaDataImportImpl に4つのメタデータ API を新規実装し、デバッガの no-fallback モード対応を実現しました。以下のメソッドを実装:
EnumTypeDefs/EnumMethods:型定義とメソッドの列挙GetExportedTypeProps/FindExportedTypeByName:エクスポート型の検索と属性取得
すべての実装は既存パターン(HResult 返却、FillEnum インフラ、DEBUG 検証)に従い、legacy DAC との parity 検証も付与しました。
変更内容
MetaDataImportImpl.cs(+401/-46)
EnumTypeDefs:MetadataReader.TypeDefinitions 経由で全 TypeDef トークンを列挙EnumMethods:TypeDefinition.GetMethods() で型のメソッドを列挙GetExportedTypeProps:エクスポート型の名前(namespace.name)、実装トークン、TypeDef ID、フラグを返却FindExportedTypeByName:完全修飾名でエクスポート型を検索、ネストされた型にも対応- 3 つの enum メソッドに DEBUG 検証ブロック追加(legacy DAC とトークンリスト比較)
- 9 つの Get メソッドに文字列内容検証追加(長さだけでなく実内容を比較)
EcmaMetadataUtils.GetRowIdを public 化し、RID マスク抽出用のGetRID()ヘルパー追加
MetaDataImportImplTests.cs(+228/-4)
- エクスポート型エントリを追加したテストメタデータビルダー
- 列挙、ページネーション、メソッド列挙、空リスト、エクスポート型クエリ、ネスト型検索、切り詰め、not-found ケースをカバーする 11 の単体テスト追加
MetaDataImportDumpTests.cs(+80/-0)
EnumTypeDefs_MatchesMetadataReader:cDAC の TypeDef 列挙と MetadataReader 検証EnumMethods_MatchesMetadataReader:メソッド列挙と MetadataReader 検証
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- ビルド成功(0 エラー、0 警告)、1856 unit テスト + 5 dump テスト 全パス
- 文字列切り詰め時は
CLDB_S_TRUNCATION、レコード未検出時はCLDB_E_RECORD_NOTFOUNDを返却 - すべての enum メソッドの DEBUG 検証ブロックは try/catch の後(SOSDacImpl パターン)に配置
- AI/Copilot 生成 PR
#127370 [browser][coreCLR] Support interpreter code resolution on portable entrypoint platforms
- 作成者: @pavelsavara
- 作成日時: 2026年04月24日 08:49:35(UTC)
- マージ日時: 2026年04月29日 06:09:39(UTC)
- ラベル: arch-wasm area-Diagnostics-coreclr
概要
WASM などのポータブルエントリポイント(FEATURE_PORTABLE_ENTRYPOINTS)を使用するプラットフォームで、インタープリタコード解決を有効にする変更です。従来の InterpreterPrecode メカニズムに依存していた EventPipe/ETW の IP-to-メソッド解決が WASM で機能しないため、ポータブルエントリポイント経由で解釈メソッドのバイトコードアドレスを解決できるよう汎化しました。これにより、WASM 上のサンプリングプロファイラが管理メソッドに対してサンプルを正確に帰属させられるようになります。
変更内容
precode.cpp/h: 関数
GetInterpreterCodeFromInterpreterPrecodeIfPresent(TADDR)をGetInterpreterCodeFromEntryPointIfPresent(TADDR, MethodDesc*)に名前変更・シグネチャ変更。新しいpMethodDescパラメータ(デフォルトNULL)により、ポータブルエントリポイント上でMethodDesc::GetInterpreterCode()を通じた解決が可能に。FEATURE_PORTABLE_ENTRYPOINTS定義時にInterpByteCodeStartポインタを MethodDesc から直接取得。prestub.cpp:
JitCompileCodeLockedEventWrapperにFEATURE_PORTABLE_ENTRYPOINTS分岐を追加。ETW メソッド-JIT イベントでInterpByteCodeStartを抽出する際にPortableEntryPoint::GetInterpreterData(pCode)を使用。eventtrace.cpp:
MethodAndStartAddressToEECodeInfoPointerにポータブルエントリポイント向けインタープリタ fallback を追加。明示的な開始アドレスが指定されない場合、MethodDesc::GetInterpreterCode()でInterpByteCodeStartを解決。DAC/デバッガー関連: daccess.cpp、dacdbiimpl.cpp、request.cpp、functioninfo.cpp で呼び出し側を更新し、利用可能な場合は新しい
MethodDesc*パラメータを渡す。method.hpp のGetCodeForInterpreterOrJittedも更新。
パフォーマンスへの影響
影響なし。プロファイリング機能の修正であり、実行時パフォーマンスへの直接的な影響は期待されません。
関連Issue
#126324 から分割。
その他
本変更は内部実装(DAC、ETW、デバッガーコード)の修正です。破壊的変更なし。WASM プラットフォーム(ブラウザ上での CoreCLR)の EventPipe/サンプリングプロファイラ機能の復旧が主目的。
#127369 Add missing custom attribute marking to ILTrim TokenBased nodes
- 作成者: @Copilot
- 作成日時: 2026年04月24日 05:08:36(UTC)
- マージ日時: 2026年04月29日 21:19:01(UTC)
- ラベル: area-Tools-ILLink
概要
ILTrimの複数のTokenBasedNodeサブクラスがカスタム属性依存関係をマークしていなかったため、トリミング時にメタデータテーブル上のカスタム属性が無視されていました。ParameterNode、GenericParameterNode、GenericParameterConstraintNode、ManifestResourceNodeにCustomAttributeNode.AddDependenciesDueToCustomAttributesの呼び出しを追加し、カスタム属性と参照される型・コンストラクタの依存関係を正しく保持するように修正しました。
変更内容
- ParameterNode.cs —
GetStaticDependenciesがnullを返していたのを修正し、パラメータカスタム属性の依存関係をマーク - GenericParameterNode.cs —
yield returnから遅延初期化されるDependencyListへ変更し、カスタム属性マーキングを統合 - GenericParameterConstraintNode.cs —
GenericParameterNodeと同パターンで制約カスタム属性マーキングを統合 - ManifestResourceNode.cs — 依存関係収集を統合し、単一の
AddDependenciesDueToCustomAttributes呼び出しと戻り値で統一、早期リターンを削除 - ILTrimExpectedFailures.txt — 20個のテストが新たにパスし、
--used-attrs-onlyフラグ未実装の5つの新規期待失敗テストを追加
パフォーマンスへの影響
yield returnから明示的なDependencyListへの変更により、不要なメモリ割り当てを回避しながらカスタム属性マーキングを統合しています。影響は最小限に設計されています。
関連Issue
その他
InterfaceImpl、StandAloneSig、TypeSpec、MethodSpec、TypeRef、AssemblyRef、MemberRef、ModuleRefは意図的に除外されました(実装が複雑または既に除外済み)。
#127355 Fix sporadic AccessViolation in compressed single-file apps on Apple Silicon
- 作成者: @elinor-fung
- 作成日時: 2026年04月23日 22:20:07(UTC)
- マージ日時: 2026年04月29日 20:45:05(UTC)
- ラベル: area-Host
概要
macOS Apple Silicon上の圧縮された自己完結型単一ファイルアプリで発生する散発的なAccessViolationExceptionを修正。問題の原因は、FlatImageLayout::LoadImageByCopyingPartsでMAP_JITメモリのRW → RWXへの保護遷移が不可靠だったため。修正では、Apple SiliconでPAGE_NOACCESSからリザーブし、各セクションを最終的な実行保護で直接コミットすることで、信頼できない遷移を回避。
変更内容
- src/coreclr/vm/peimagelayout.cpp:
HOST_OSX && HOST_ARM64環境でのメモリ保護戦略を変更。全イメージリージョンをPAGE_NOACCESSでリザーブしてから、実行セクションはPAGE_EXECUTE_READWRITE、その他はPAGE_READWRITEで各セクションをコミット。PAL_JitWriteProtect下での実行可能コンテンツのコピーを実装。 - src/installer/tests/AppHost.Bundle.Tests/AppLaunch.cs: OSX環境でのみ実行される圧縮単一ファイルアプリの回帰テストを追加。複数の子プロセスの並行起動でイメージロード処理にストレスをかけるテストを実装。
- src/installer/tests/Assets/Projects/HelloWorld/Program.cs:
launch_selfオプション追加。5つの子プロセスを並行で生成しテストが実行される。
パフォーマンスへの影響
影響なし。メモリ保護の遷移方法の変更であり、性能特性に差異なし。
関連Issue
その他
- 修正前: N=5の子プロセスで約74%のクラッシュ率(N≥12では約98%)
- 修正後: N=5での50回以上の試行で0件の失敗を確認
- 修正はApple Silicon環境のみに適用され、他のプラットフォームのコードパスは変更なし
- 読み取り専用セクションは、書き込み権限除去トランジション(
PAGE_READWRITE → PAGE_READONLY)により、元のバグに関与していないため変更なし
#127292 Add configurable EventPipe CPU sampling rate via DOTNET_EventPipeThreadSamplingRate
- 作成者: @pavelsavara
- 作成日時: 2026年04月22日 17:55:40(UTC)
- マージ日時: 2026年04月29日 07:15:12(UTC)
- ラベル: area-System.Diagnostics
概要
EventPipeのCPUサンプリング間隔をDOTNET_EventPipeThreadSamplingRate環境変数で設定可能にする変更です。デフォルト1msはWASM/ブラウザ環境では速すぎるため、この設定値(ミリ秒単位)でオーバーライド可能にしました。0を設定するとプラットフォームのデフォルト値を使用します。
変更内容
- EventPipe設定層:
DOTNET_EventPipeThreadSamplingRate環境変数を新規登録し、初期化時にミリ秒からナノ秒への変換処理を追加(ep.c) - ランタイム実装: CoreCLR、NativeAOT、Monoの3つのランタイムで
ep_rt_config_value_get_sampling_rate()を実装し、各ランタイムの設定体系に従って値を読み取り - WASM/Blazor統合: MSBuildターゲットで
WasmPerformanceInstrumentationから,interval=<ms>サフィックスを抽出してDOTNET_EventPipeThreadSamplingRateとして渡す機能を追加 - 相互運用性修正: WebSocketの extern C宣言にC++名前マングリング対策を追加し、
ds_rt_websocket_recvのバッファパラメータから不正なconst修飾を削除 - 保守性向上: EventPipeセッション終了パスにアサーション追加、プリプロセッサガード整備
パフォーマンスへの影響
WASM/ブラウザ環境でのサンプリング頻度を低下させることで、CPU使用率を軽減します。デフォルト1msから適切な値へ変更することで過度な計測オーバーヘッドを削減可能。プロファイリングデータの密度は低下する可能性あり。
関連Issue
#126324(分割元PR)
その他
- 内部実装変更(
INTERNAL_EventPipeThreadSamplingRate登録)で公開APIへの影響はなし - 3つのランタイム(CoreCLR/NativeAOT/Mono)に対応した実装により、.NET全体で一貫した動作を実現
- Copilotによる検証済み(9ファイル全て確認、3件のコメント)
#127267 Rename JitDasmWithAddress to JitDisasmWithAddress
- 作成者: @Copilot
- 作成日時: 2026年04月22日 08:44:45(UTC)
- マージ日時: 2026年04月29日 08:04:40(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT設定オプション/アクセサの名前をJitDasmWithAddressからJitDisasmWithAddressに変更し、対応する設定キー文字列も更新する。これは命名の一貫性と正確性を向上させるための変更です。
変更内容
src/coreclr/jit/compiler.cpp:JitDasmWithAddressをJitDisasmWithAddressに変更src/coreclr/jit/jitconfigvalues.h: 設定キー文字列をJitDasmWithAddressからJitDisasmWithAddressに更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 変更は内部実装レベルであり、公開APIへの直接的な影響はありません
- JIT設定キーの変更のため、このオプションを使用している開発者は新しい名前
JitDisasmWithAddressに更新する必要があります
#127220 [wasm][coreclr] Update the ConvertToInteger tests active issue
- 作成者: @radekdoulik
- 作成日時: 2026年04月21日 12:41:27(UTC)
- マージ日時: 2026年04月29日 14:23:55(UTC)
- ラベル: arch-wasm area-CodeGen-Interpreter-coreclr
概要
WASM上のCoreClR インタープリタで double/float.ConvertToInteger<TInteger> が正しく動作するように修正。JIT動作と同じ方式でこのメソッドを intrinsic として展開し、マネージドコードの CreateSaturating へのフォールバックを回避します。これまで小さい整数型で不正な結果が返される問題が発生していました。
変更内容
- interpconfig.cpp:
TARGET_WASMでInterpModeのデフォルト値を3に設定し、インタープリタのみのシナリオで intrinsic 展開を有効化 - intrinsics.cpp: インタープリタが
System.Single/Double.ConvertToIntegerをNI_PRIMITIVE_ConvertToIntegerとして認識するようにマッピング - compiler.cpp: 既存の変換 intrinsic 出力パスに
NI_PRIMITIVE_ConvertToIntegerを追加 - SingleTests.GenericMath.cs / DoubleTests.GenericMath.cs:
ConvertToIntegerTestを re-enable するためActiveIssue属性を削除
パフォーマンスへの影響
影響なし(修正によるパフォーマンス差異のベンチマーク結果記載なし)
関連Issue
その他
この修正はWASM環境(ブラウザ+CoreCLR)に限定されます。JITコンパイルを使用しないインタープリタのみのシナリオで、ジェネリック数学API (ConvertToInteger) の動作をJIT相当まで改善するものです。
#127148 Replace PERFSCORE_MEMORY_* macros with PerfScoreMemoryAccessKind enum class
- 作成者: @Copilot
- 作成日時: 2026年04月20日 11:58:12(UTC)
- マージ日時: 2026年04月29日 08:36:50(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT コンパイラのパフォーマンススコア計算において、マクロ定数 PERFSCORE_MEMORY_* を強く型付けされた PerfScoreMemoryAccessKind enum クラスに置き換えました。None、Read、Write、ReadWrite の enum メンバーを定義し、複数のエミッターバックエンド(ARM64、x86/x64、RISC-V、LoongArch64)でメモリアクセス種別の追跡を更新しています。
変更内容
- 内部実装変更(公開API非影響)
emit.h:PerfScoreMemoryAccessKindenum クラスを追加、PERFSCORE_MEMORY_*マクロを削除、insExecutionCharacteristicsフィールドが enum を保持するように更新emit.cpp: パフォーマンススコア評価ロジックを enum 使用に更新emitarm64.cpp: メモリ操作分類を enum に変換、getMemoryOperationの比較ロジックを調整emitxarch.cpp: x86/x64 のパフォーマンススコアメモリ種別追跡を enum に変換emitriscv64.cpp: RISC-V パフォーマンススコアメモリ種別割り当てを enum に変換emitloongarch64.cpp: LoongArch64 パフォーマンススコアメモリ種別割り当てを enum に変換、フォーマッティング調整
パフォーマンスへの影響
影響なし。本変更は型安全性の向上とコード保守性の改善を目的とした内部リファクタリングで、デバッグ/遅延逆アセンブル パス用のパフォーマンススコア計算ロジックに関するものです。
関連Issue
なし
その他
- 検証: CoreCLR コンパイル成功、静的コードレビューおよびセキュリティチェック(CodeQL)で問題なし
- フォローアップ コミットはフォーマッティング のみで動作変更なし
- このデバッグ/遅延逆アセンブル パス専用のコードには直接的なテストが存在しないため、検証はビルド成功と静的チェックに焦点
#127060 [ios-clr] Enable StackTrace tests on Apple mobile
- 作成者: @kotlarmilos
- 作成日時: 2026年04月17日 09:10:00(UTC)
- マージ日時: 2026年04月29日 12:32:13(UTC)
- ラベル: area-System.Diagnostics
概要
Apple mobile(iOS/tvOS)プラットフォームでStackTraceライブラリのテストを有効化するPRです。CoreCLRアプリバンドルにデバッグシンボル(.pdbファイル)を保持することで、スタックトレース情報の取得を改善し、テストスイートを実行可能にします。なお、行番号表示に関する既知の制限は#124087で追跡中です。
変更内容
- src/tasks/AppleAppBuilder/Xcode.cs: CoreCLRランタイム向けの最適化ビルドにおいて、.pdbファイルの除外をスコープ制限(非CoreCLRランタイムのみ除外)
- src/libraries/tests.proj:
System.Diagnostics.StackTrace.Tests.csprojのApple mobile CoreCLR除外を削除してテスト実行を有効化 - src/libraries/System.Diagnostics.StackTrace/tests/StackTraceTests.cs: ファイル情報なしのパターンマッチングをApple mobileに拡張
- src/libraries/System.Diagnostics.StackTrace/tests/StackFrameTests.cs: skip-framesテストのApple mobileアクティブイシューを削除
- src/libraries/System.Diagnostics.StackTrace/tests/DiagnosticMethodInfoTests.cs: オープンデリゲートバグゲーティングを調整し、Apple mobile CoreCLRのアクティブイシュー注釈を追加
パフォーマンスへの影響
影響なし
関連Issue
その他
このPRはテストインフラストラクチャと診断ライブラリの変更であり、ランタイムの公開APIや実装ロジックそのものは変更されません。デバッグシンボル保持によるアプリバンドルサイズへの影響については、提供情報に記載されていません。
#127058 [ios-clr] Enable ResourceAssemblyLoadContext fallback for Apple mobile CoreCLR
- 作成者: @kotlarmilos
- 作成日時: 2026年04月17日 09:08:46(UTC)
- マージ日時: 2026年04月29日 07:54:12(UTC)
- ラベル: area-AssemblyLoader-coreclr linkable-framework os-ios
概要
Apple mobile プラットフォーム(iOS/tvOS)上の CoreCLR で、テストアセンブリが .app バンドル内のファイルとして展開される場合、ResourceAssemblyLoadContext が組み込みリソースを見つけられず失敗する問題を解決します。ResourceAssemblyLoadContext.Load に AppContext.BaseDirectory からのフォールバック読み込み機能を追加し、Apple mobile での System.Runtime.Loader.Tests テスト実行を可能にします。
変更内容
- src/libraries/tests.proj: Apple mobile CoreCLR での
System.Runtime.Loader.Tests除外を削除、テスト実行を再有効化 - src/libraries/System.Runtime.Loader/tests/ResourceAssemblyLoadContext.cs:
GetManifestResourceStreamが null の場合、ディスク上のAppContext.BaseDirectoryからアセンブリを読み込むフォールバック機能を追加 - src/libraries/System.Runtime.Loader/tests/ILLink.Descriptors.xml: 攻撃的なトリミング下で動的読み込みテストアセンブリを保持する設定を追加
- src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/System.Runtime.Loader.RefEmitLoadContext.Tests.csproj: Apple mobile 攻撃的トリミング時にアセンブリを保持するためのターゲットを追加
- src/libraries/System.Runtime.Loader/tests/DefaultContext/System.Runtime.Loader.DefaultContext.Tests.csproj: 同様にトリミング回避のターゲットを追加
パフォーマンスへの影響
影響なし
関連Issue
その他
- テスト専用コンポーネント(
ResourceAssemblyLoadContext)の変更であり、公開 API には影響しません - iOS/tvOS で既知の失敗がある動的アンロードテストには
ActiveIssueゲートを適用 - Apple mobile デバイスでの
.appバンドル展開レイアウトに対応するための設定調整です
#127033 [X64][APX] Fix a few bugs in APX implementation and improve the control knob design
- 作成者: @Ruihan-Yin
- 作成日時: 2026年04月16日 22:05:15(UTC)
- マージ日時: 2026年04月29日 10:49:06(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
AMD64 APX(Advanced Performance eXtensions)実装のJITコンパイラにおける複数のエンコーディングバグ修正と、機能ゲーティング設計の改善です。IMUL命令のREX2エンコーディング修正、CMOV NDD形式の無効化、条件付きチェーニングの制御の厳格化、DIV/IDIV命令のREX2/EVEXプリフィックス対応不足による無効化を含みます。
変更内容
- emitxarch.cpp: IMUL命令のREX2/EVEXエンコーディング修正、サイズロジック調整、レジスタエンコーディングハンドリングの改善
- instrsxarch.h: CMOV命令からNDD機能を削除、DIV/IDIVからREX2エンコーディングを削除
- codegenxarch.cpp: callee-save push/pop処理をPP2とPPXノブで区別、APXユニットテスト追加
- jitconfigvalues.h: 新しい
EnableApxPP2JITコンフィグノブを追加 - optimizebools.cpp: 条件付きチェーニング最適化を
canUseApxEvexEncoding()でゲーティング - lowerxarch.cpp: CCMP関連の下位化を条件付きでゲーティング
- lsraxarch.cpp: DIV/MOD命令のレジスタ候補を低位GPRセットに制限
パフォーマンスへの影響
影響なし(バグ修正と機能ゲーティングが主体。ただしDIV/IDIV無効化により、これら命令を使用するコードパスではAPX最適化が適用されない)
関連Issue
その他
- CMOV NDD形式を無効化した理由は、元のCMOV命令とNDD形式の意味論的な相違。CTEST/CFCMOVを再導入する後続PRが計画されている
- ConditionalChaining(
DOTNET_EnableApxConditionalChaining)をDOTNET_EnableAPXノブの背後に隠蔽 - PP2とPPXの制御ノブを分離して、より細粒度な機能制御を実現
- DIV/IDIV無効化の理由:VM内のREX2/EVEXプリフィックス命令に対する例外処理が不足している
- TEST ACC形式をREX2について無効化:EGPRsを使用しないため非互換
#126998 [release/10.0] [QUIC] Update MsQuic
- 作成者: @ManickaP
- 作成日時: 2026年04月16日 12:05:51(UTC)
- マージ日時: 2026年04月29日 22:32:41(UTC)
- ラベル: Servicing-approved area-System.Net.Quic
概要
System.Net.Quicで使用するMsQuicネイティブライブラリのバージョンをrelease/10.0ブランチで更新します。MicrosoftNativeQuicMsQuicSchannelVersionを2.4.16から2.4.18にアップグレードします。
変更内容
- eng/Versions.props:
MicrosoftNativeQuicMsQuicSchannelVersionを2.4.16から2.4.18に更新(+1/-1)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 内部で検出された変更で、顧客報告はなし
- リグレッションなし
- リスク度は低い(プロダクトコード変更なし、MsQuicライブラリの軽微なバージョンアップのみ)
- 標準CIで検証済み
- dotnet/runtime#126945のrelease/10.0対応版
#126977 Port 126929 to 10.0
- 作成者: @mangod9
- 作成日時: 2026年04月16日 00:23:37(UTC)
- マージ日時: 2026年04月29日 18:59:58(UTC)
- ラベル: Servicing-approved area-GC-coreclr
概要
DOTNET_GCLargePages=1が有効な場合のGCヒープ破損問題を修正します。ラージページが有効な場合、GCはOS レベルのデコミットをスキップしていますが、メモリ内容をクリアせずにブックキーピングのみ更新していました。この結果、リージョンが再利用時にゼロ化されず、ヒープ破損が発生していました。修正は、論理的にデコミットされたメモリをクリアすることで、リージョンの適切なゼロ化を保証します。
変更内容
- src/coreclr/gc/gcpriv.h:
virtual_decommit()メソッド宣言に、オプショナルパラメータend_of_dataを追加 - src/coreclr/gc/gc.cpp:
virtual_decommit()の実装を拡張し、ラージページシナリオでのメモリクリア機能を追加- アグレッシブGC経路から
distribute_free_regions()を通じてheap_segment_used(region)をend_of_dataパラメータとして渡し、heap_segment_committedを縮小時に古い参照を含むバイトをクリア
パフォーマンスへの影響
影響なし。修正はラージページ有効時の特定のコード路のみに限定され、ラージページが無効な通常構成では実行されません。
関連Issue
その他
- 顧客の本番ワークロードで検証済み
- リスク評価:低。この修正は
GCLargePages=1設定にのみ影響する対象的な変更です。 - より大規模な修正は.NET 11向けに別途実施(#127290)
#126953 [interp] Fix doubled interpreter frames in DAC/DBI stack walks
- 作成者: @kotlarmilos
- 作成日時: 2026年04月15日 17:09:36(UTC)
- マージ日時: 2026年04月29日 09:09:35(UTC)
- ラベル: area-Diagnostics-coreclr os-ios
概要
DAC/DBI(Debugging Access Component/Debugging Breakpoint Interface)がインタープリタコードを指すCONTEXTからStackFrameIteratorを初期化する際に、InterpreterFrameが重複して処理される問題を修正します。ResetRegDisp関数で所有するInterpreterFrame*をCONTEXTの第1引数レジスタから読み込み、ProcessCurrentFrame実行前にm_crawl.pFrameをスキップすることで、ダブルカウントを防ぎます。
変更内容
- src/coreclr/vm/stackwalk.cpp: ResetRegDisp関数の処理ロジック修正(+19行/-1行)
- インタープリタコード実行時のスタックフレーム走査で、InterpreterFrameの重複処理を回避
パフォーマンスへの影響
影響なし(バグ修正による正確なスタック走査の実現)
関連Issue
その他
このバグ修正により、以下のインタープリタデバッガテストの失敗が解決されます:
StackWalking.NestedExceptionStackWalking.ChildParentTest
#126905 Add Type.GetNullableUnderlyingType() virtual API
- 作成者: @AaronRobinsonMSFT
- 作成日時: 2026年04月14日 20:57:35(UTC)
- マージ日時: 2026年04月29日 05:45:58(UTC)
- ラベル: area-System.Reflection breaking-change
概要
Type サブクラス(例:MetadataLoadContext の RoType)が Nullable<T> を正しく識別できるよう、新しい公開仮想メソッド Type.GetNullableUnderlyingType() を追加しました。Nullable.GetUnderlyingType() がこの仮想メソッドに委譲されます。Enum.GetUnderlyingType() → Type.GetEnumUnderlyingType() の既存パターンに従います。
public virtual Type? GetNullableUnderlyingType()
{
throw new NotSupportedException(SR.NotSupported_SubclassOverride);
}
変更内容
Type.cs:新しいpublic virtual Type? GetNullableUnderlyingType()を追加(基本実装はNotSupportedExceptionをスロー)Nullable.cs:Nullable.GetUnderlyingType(Type)を新しい仮想メソッドに委譲(ジェネリック型定義の互換性は保持)- ランタイム実装:
RuntimeType.CoreCLR.cs、RuntimeType.Mono.cs、RuntimeType.NativeAot.csに構成型と開放型ジェネリックNullable<>の両方に対応したオーバーライドを実装- NativeAOT 向け
RuntimeTypeInfo.cs、NativeFormatRuntimeNamedTypeInfo.cs、RuntimeConstructedGenericTypeInfo.csにオーバーライドを追加
- Reflection 型ラッパー:
TypeDelegator.cs、ModifiedType.cs、SignatureModifiedType.cs、SignatureConstructedGenericType.cs、SignatureType.cs、RoType.cs、RoModifiedType.csに適切なオーバーライドを実装 - Reflection.Emit:
TypeBuilder.cs、EnumBuilder.cs、GenericTypeParameterBuilder.cs、TypeBuilderInstantiation.cs、SymbolType.csにオーバーライド(返却値はnullまたは適切な結果) - テスト:
NullableTests.cs、SignatureTypes.cs、ModifiedTypeTests.cs、TypeBuilderGetNullableUnderlyingType.cs、TypeTests.Nullable.csにテストカバレッジを追加
パフォーマンスへの影響
影響なし
関連Issue
その他
破壊的変更:BCL 外のカスタム Type サブクラスが新しい仮想メソッドをオーバーライドしないと NotSupportedException がスローされます。ドキュメント化は dotnet/docs#53407 で行われています。互換性のため、Nullable.GetUnderlyingType(Type) は引き続きジェネリック型定義 typeof(Nullable<>) に対して null を返します。
#126649 Reinstate LINQ join convenience overloads and fix the build break
- 作成者: @eiriktsarpalis
- 作成日時: 2026年04月08日 15:47:39(UTC)
- マージ日時: 2026年04月29日 10:04:04(UTC)
- ラベル: area-System.Linq
概要
LINQ join convenience overloads(Join、GroupJoin、LeftJoin、RightJoin)を復活させ、同時にビルド破損を修正するPRです。以前の先制PR(#121998、#121999)で追加されたこれらのオーバーロードが#126624で削除されたため、本PRで再導入します。System.Linq.AsyncEnumerableのテストビルド破損は、ジェネリック型推論が不十分だったAsync対応のセレクタレスオーバーロード呼び出しを明示的にすることで修正されました。
変更内容
- System.Linq: Join、GroupJoin、LeftJoin、RightJoinの便利なオーバーロード(セレクタレス版)を追加
- System.Linq.AsyncEnumerable: 上記と同等のAsync版オーバーロードを追加。テストコードで明示的な型指定により型推論の問題を解決
- System.Linq.Queryable: IQueryable向けのJoin、GroupJoin、LeftJoin、RightJoinのオーバーロードを追加
- 参照アセンブリ(ref): 各ライブラリの参照定義を更新
- テスト: 各ライブラリのテストで新しいオーバーロードをカバー(合計計870行追加)
パフォーマンスへの影響
影響なし
関連Issue
その他
本PRは既に検証済みで、clr+libsのビルド、System.Linq.AsyncEnumerable・System.Linq・System.Linq.Queryableの各テストが正常に実行されています。
#126607 Adjust breaking change workflow based on issues seen
- 作成者: @ericstj
- 作成日時: 2026年04月07日 15:56:24(UTC)
- マージ日時: 2026年04月29日 23:10:23(UTC)
- ラベル: area-skills
概要
breaking-change-docスキルのワークフロー手順とヘルパースクリプトを改善し、バージョン検出の曖昧性を低減、PRコメントの重複を削除、PR担当者への@メンション通知を追加します。
変更内容
- SKILL.md: ワークフロー手順を明確化。ステップ1でPR担当者メタデータの収集を追加、ステップ2でバージョン検出スクリプトの結果処理とログ出力を詳細化
- Build-IssueComment.ps1: PR コメント生成の簡素化(Issue本文の重複削除)と新しい
-Assigneesパラメータ追加により、PR担当者への@メンション通知に対応。URL長診断機能も追加
パフォーマンスへの影響
影響なし
関連Issue
その他
このPRはGitHub Actionsのワークフロー改善に関するもので、ランタイムコード自体への変更ではなく、開発プロセスの自動化ツールの調整です。
#126576 [clr-interp] Add initial CoreCLR interpreter func-eval support
- 作成者: @matouskozak
- 作成日時: 2026年04月06日 12:14:24(UTC)
- マージ日時: 2026年04月29日 07:36:07(UTC)
- ラベル: area-Diagnostics-coreclr
概要
CoreCLRインタープリタで停止しているスレッドに対するデバッガ関数評価(func-eval)サポートを初期実装します。ネイティブコンテキストハイジャッキングを避け、既存の保留中評価ハッシュテーブル(ProcessAnyPendingEvals)に評価要求をキューイングし、InterpBreakpointハンドラから実行します。これにより、インタープリタと例外発生時の評価で共有ディスパッチパスが再利用されます。
変更内容
- debugger.cpp/debugger.h: FuncEvalSetup/DebuggerEval初期化をインタープリタ固有にし、ネイティブ専用セットアップ(実行可能ブレークポイントセグメント割り当て、SPアライメント検証、レジスタ/コンテキスト更新)をスキップ。
m_evalDuringExceptionをm_evalUsesHijackに名前変更(ロジック反転)してフラグの目的を正確に表現 - interpexec.cpp/interpexec.h:
InterpThreadContext::m_pPendingFuncEvalを追加してインタープリタスレッドの評価を保存。INTOP_BREAKPOINTハンドラから合成フィルタコンテキストを使用して保留中評価を実行 - dbginterface.h:
ExecutePendingInterpreterFuncEval(Thread*)をFEATURE_INTERPRETERの下にデバッグインターフェースに追加 - funceval.cpp、datadescriptor.inc、各フレームハンドラ: ファイルのマイナー更新
パフォーマンスへの影響
影響なし(デバッガ機能の拡張であり、ランタイム実行パフォーマンスに直接的な影響はありません)
関連Issue
その他
- ブレークポイント以外で停止しているインタープリタスレッドに対する関数評価要求は
CORDBG_E_FUNC_EVAL_BAD_START_POINTを返却 - インタープリタ評価では直接完了パスが再利用され、ネイティブブレークポイントトラップメカニズムなしで完了が通知される
- iOS シミュレータでローカルテスト、DiagnosticTestsで
--clrinterpreterフラグ下でfunc-eval関連テスト(FuncEval.NestedFuncEvalTest、FuncEval.EscapeSecondPass)が合格確認済み - Copilotにより潜在的なメモリリーク(bpInfoSegmentRX未解放パス)が指摘されているため、マージ前にレビュワーによる確認が望ましい
#126360 JIT: Fully share helper-based suspension tails
- 作成者: @jakobbotsch
- 作成日時: 2026年03月31日 16:24:10(UTC)
- マージ日時: 2026年04月29日 12:35:55(UTC)
- ラベル: area-CodeGen-coreclr
概要
複数の await が共通のコンテキスト処理ロジックを持つ場合、JIT が共有ブロックへのジャンプを通じてそのロジックを完全に共有できるようにする最適化です。新しい finish-suspension ヘルパーメソッドを追加し、複数の suspension epilog を共有ブロック経由でルーティングすることで、生成コードサイズを削減します。
private static async Task Foo()
{
await Bar();
await Bar();
await Bar().ConfigureAwait(false);
await Bar().ConfigureAwait(false);
}
変更内容
- async.cpp/async.h: shared finish-context-handling ブロック作成ロジックを実装。複数の suspension epilog を同一の finish-suspension ブロックへ統合
- AsyncHelpers.CoreCLR.cs:
FinishSuspensionWithContinuationContextとFinishSuspensionNoContinuationContextヘルパーメソッドを追加 - corinfo.h / jitinterface.cpp:
CORINFO_ASYNC_INFOに新しいヘルパーメソッドハンドルを拡張 - corelib.h: AsyncHelpers メソッドのバインダーエントリ追加
- gentree.h: execution context save/restore 判定用フック追加
- SuperPMI / CorInfo 関連: async info 構造体と managed JIT インターフェースを更新
- ExecutionContext.cs: flow-suppressed 状態の内部インスタンスアクセッサを公開
パフォーマンスへの影響
コードサイズ削減:
- サンプル async メソッド: 799 バイト → 725 バイト (74 バイト削減、9.3% 削減)
- インストラクション数: 191 → 175 (削減)
NativeAOT テストバイナリ:
- System.Linq.AsyncEnumerable.Tests: -73,728 バイト (-0.445%)
- System.Net.Http.Functional.Tests: -128,512 バイト (-0.413%)
- System.Text.Json.SourceGeneration.Roslyn4.4.Tests: -465,920 バイト (-0.403%)
- その他多数のテストバイナリで 0.01~0.4% の削減
clrjit.dll はわずかに増加 (+1,024 バイト、+0.046%) ですが、全体的には大幅なコード削減を実現。
関連Issue
なし
その他
- 互換性: 公開 API の破壊的変更なし。
ExecutionContext.InstanceIsFlowSuppressedは内部用 - ランタイム影響: JIT コード生成時の変換ロジック(内部実装)のみに影響
- JIT/EE バージョン GUID が更新されており、JIT と EE の同期が必要
#125180 JIT: Accelerate floating->long casts on x86
- 作成者: @saucecontrol
- 作成日時: 2026年03月04日 15:43:15(UTC)
- マージ日時: 2026年04月29日 13:06:59(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
x86のJITコンパイラが浮動小数点型からlong/ulong型へのキャストをハードウェアアクセラレーションする機能を追加しました。AVX-512とAVX10.2を活用することで、オーバーフロー発生時以外のすべてのキャストがハードウェア命令で処理されるようになります。これまではCORINFO_HELP_DBL2LNGなどのヘルパー関数呼び出しが必要でしたが、新しい実装により関数呼び出しなしでインライン化された命令列で処理されます。
サンプルコード(double→long AVX-512):
// 従来: ヘルパー関数呼び出しによる処理
double value = 123.456;
long result = (long)value; // CORINFO_HELP_DBL2LNG呼び出し
// 新実装: AVX-512命令によるインライン処理
// vmovsd, vcmpordsd, vcmpge_oqsd, vcvttpd2qq, vpblendmqなどで直接処理
変更内容
- decomposelongs.cpp: AVX-512/AVX10.2を用いた浮動小数点↔long/ulongキャストのローリング/デコンポーズロジックを実装
- flowgraph.cpp: x86で浮動小数点↔longキャスト時にAVX-512が利用可能な場合、ヘルパー関数呼び出し回避ロジックを追加
- hwintrinsiclistxarch.h/hwintrinsicxarch.cpp: AVX-512スカラー比較マスク命令(
vcmpss/vcmpsd)を新しいハードウェア組み込み関数として追加 - gentree.cpp/lowerxarch.cpp: ベクトル定数構築をリファクタリングし、新しい組み込み関数の制約サポートを追加
パフォーマンスへの影響
従来のdouble→longキャストでは31バイトのコード(ヘルパー関数呼び出し、スタック操作含む)が生成されていましたが、新実装では53バイトのコード生成となります。ただし関数呼び出しオーバーヘッド(引数プッシュ、戻り値リターン)がなくなり、CPUキャッシュ効率が向上します。実際のパフォーマンス向上値は具体的に記載されていません。
関連Issue
その他
注記: Copilotレビューで指摘されているように、現在の実装ではx86のヘルパー判定ロジックがAVX-512のみをチェックしており、AVX10.2が有効でAVX-512が無効の環境でも不要なヘルパー呼び出しが発生する可能性があります。これは別途の修正が必要な潜在的な問題です。