注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #131471 JIT: don't merge assertions from orphaned pred blocks
- #131467 [release/10.0] Fix EH - throw from catch in UnmanagedCallersOnly
- #131462 Update winget install instructions in windows-requirements.md
- #131452 Use Reflection.Emit accessors when dynamic code is supported
- #131446 Hide remaining managed EH helpers from the debugger stack
- #131444 Fix missed case of COOP to PREEMPT transition
- #131443 Fix EnC static field address cDAC API
- #131441 Define
REPO_COMMIT_HASHfor singlefilehost - #131439 Do not allow generic inlining of ldftn requiring a fat function pointer
- #131425 Update SetCredentialsAttributesW to match the native C API declaration
- #131420 [wasm] Don't import the Mono wasm props on the CoreCLR path
- #131413 [browser] Remove AssetEntry from dotnet.d.ts public API
- #131387 Make Uri non-ASCII hex unescaping a bit faster
- #131384 Implement CLRDataMethodDefinition IL extent APIs in cDAC
- #131355 [wasm][R2R] Fix Crst level violation between NativeImageEagerFixups and PregeneratedStringThunks
- #131345 Handle Decimal32/64/128 ABI packing in the VM and AOT type system
- #131312 Improve CI scanner duplicate KBE detection
- #131229 Reuse per-thread MemoryStream/Utf8JsonWriter in EventSourceLogger.ToJson
- #131219 [mono] Fix interface call in case of reabstraction
- #131214 [release/8.0-staging] Reduce EncryptedXml encoded DTD test workload
- #131211 [release/9.0-staging] Reduce EncryptedXml encoded DTD test workload
- #131167 [Wasm Ryujit]: implement runtime-async codegen for R2R Wasm
- #130622 Preserve IL for CoreCLR interpreter fallback on Apple mobile
- #130502 Handle CDATA in unknown extension data (IExtensibleDataObject)
- #130428 Fix xsi:list round-tripping with space-separated serialization
- #130159 Use CodeVersioning for EnC
- #129492 Implement support for derived IXmlSerializable types in XmlSerializer
- #128148 Arm64: Initialization of TYP_SIMD/TYP_MASK locals
- #127520 Arm64 SVE: Support scalable constant vectors and masks
#131471 JIT: don't merge assertions from orphaned pred blocks
- 作成者: @AndyAyersMS
- 作成日時: 2026年07月28日 14:55:14(UTC)
- マージ日時: 2026年07月28日 21:00:14(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのRange Check分析において、RBOのジャンプスレッド処理後に孤立したプリデセッサブロック(bbPreds == nullptr)から不正な範囲アサーション(edge assertions)がマージされることで、誤ったコード生成が発生していた問題を修正します。PHI_ARG入力時に孤立したブロックをチェックし、到達不可能なブロックからのアサーション処理をスキップします。
変更内容
- src/coreclr/jit/rangecheck.cpp:
RangeCheck::MergeAssertionメソッドにGT_PHI_ARGパス用の到達不可能ブロック判定ガード(+11行)を追加。既存のCompiler::optVisitReachingAssertionsで使用されているのと同じisUnreachableBlockチェックロジックを適用し、孤立したプリデセッサブロックからのedge assertionのマージをスキップ。
パフォーマンスへの影響
影響なし。この変更は誤ったアサーション情報のスキップであり、最適化の精度向上に寄与しますが、実行時パフォーマンスへの直接的な変化はありません。
関連Issue
その他
- この修正はJITの正確性向上に関わる重要な修正です。孤立したブロックのPHI参照により生成されるコードが不正な範囲チェック削除につながる問題を解決します。
- 修正は内部実装(JITコンパイラ)に限定され、公開APIへの影響はありません。
#131467 [release/10.0] Fix EH - throw from catch in UnmanagedCallersOnly
- 作成者: @janvorli
- 作成日時: 2026年07月28日 13:52:30(UTC)
- マージ日時: 2026年07月28日 20:53:38(UTC)
- ラベル: Servicing-approved area-VM-coreclr
概要
Windows上でUnmanagedCallersOnly属性を持つメソッド内のcatchから例外がスローされる場合の例外ハンドリング(EH)の不具合を修正します。この問題は.NET 9で新しい例外処理がデフォルト有効化された際に発生した回帰です。catch内からの例外が正しくCallEHFuncletとして検出されず、UnmanagedCallersOnlyメソッド自体から例外が逃げると誤認識されてしまい、同じcatchに何度も再進入して無限ループとスタックオーバーフローを引き起こしていました。
変更内容
- src/coreclr/vm/exceptionhandling.cpp: funcletからのアンワインド時、逆P/Invoke検出ロジックを修正し、親メソッドの逆P/Invoke GC情報を無視するように調整。これにより例外がUnmanagedCallersOnlyメソッドから逃げている場合とfuncletの内部でハンドルされている場合を正しく区別します。
- src/tests/baseservices/exceptions/exceptioninterop/ExceptionInterop.cs: UnmanagedCallersOnly内のcatchからネイティブ/マネージド例外をスローするシナリオに対する回帰テストを追加(Windows限定)。
パフォーマンスへの影響
影響なし
関連Issue
#123579(顧客報告)、#131163(オリジナルPR)
その他
- 本PRはrelease/10.0ブランチへのバックポート版です
- 修正のリスクレベルは低く、UnmanagedCallersOnlyケースに対する不正な条件判定の修正のみです
- Copilotのレビュアコメントで、テストメソッドに[Fact]属性が不足している可能性が指摘されていますが、提供された情報には属性の最終状態が明記されていません
#131462 Update winget install instructions in windows-requirements.md
- 作成者: @EgorBo
- 作成日時: 2026年07月28日 13:09:23(UTC)
- マージ日時: 2026年07月28日 16:47:48(UTC)
- ラベル: area-Infrastructure
概要
Windows開発環境のセットアップドキュメント(windows-requirements.md)のwingetセクションを更新し、Visual StudioとPythonのインストール手順を最新化しました。ARM64マシンで検証済みです。
変更内容
- docs/workflow/requirements/windows-requirements.md:
wingetインストール手順を更新- Pythonバージョンを3.11から3.14に更新
- Visual Studioのインストールコマンドを
Microsoft.VisualStudio.Communityを使用し、リポジトリの.vsconfigファイルを指定するよう変更 .vsconfigの使用とArm64環境でのwingetの動作に関する説明注記を追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
本変更はドキュメント更新であり、コード変更は含まれません。ARM64 Windowsマシンで実機検証されています。
#131452 Use Reflection.Emit accessors when dynamic code is supported
- 作成者: @eiriktsarpalis
- 作成日時: 2026年07月28日 02:51:31(UTC)
- マージ日時: 2026年07月28日 08:11:50(UTC)
- ラベル: area-System.Text.Json
概要
System.Text.JsonのMemberAccessor選択ロジックを変更し、動的コード生成がサポートされている場合にReflection.Emitベースのアクセサを優先するように復元します。これにより、インタープリタベースのランタイムでリフレクションベースのシリアライゼーションパフォーマンスを改善します。
変更内容
src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/MemberAccessor.cs
- アクセサ選択条件を
RuntimeFeature.IsDynamicCodeCompiledからRuntimeFeature.IsDynamicCodeSupportedに変更 - 関連するコメント(条件判定の根拠説明)を更新・簡潔化
パフォーマンスへの影響
大幅な改善(特にインタープリタベースランタイムで)
- Ubuntu 22.04 x64での計測結果:
- リフレクションベースシリアライザ:14.115 us → 6.788 us(2.08倍高速化)
- メモリ割り当て:128 B → 48 B
- ソース生成での動作は変化なし(3.8 us程度で安定)
- JavaScriptCoreおよびV8では、解釈されたDynamicMethodアクセサが従来の方法より3~41倍高速化
- トレードオフ:インタープリタデプロイメントでReflection.Emit スタック保持による約50 KBのサイズ増加、アクセサ生成コスト増加(ただしSystem.Text.Jsonはアクセサをキャッシュし、この初期コストを償却)
関連Issue
#130503、#38693、dotnet/perf-autofiling-issues#76620
その他
- 検証済み:
dotnet buildおよびSystem.Text.Json.Testsで53,409個の.NETテストと53,163個の.NETFrameworkテストがすべて成功 - 本変更により#130503での意図的なトリミング決定(#38693から)が意図的に取り消される
#131446 Hide remaining managed EH helpers from the debugger stack
- 作成者: @tommcdon
- 作成日時: 2026年07月28日 00:49:00(UTC)
- マージ日時: 2026年07月28日 16:37:57(UTC)
- ラベル: area-NativeAOT-coreclr
概要
マネージド例外処理ヘルパーメソッドをデバッガスタックから隠すため、3つのメソッドに[StackTraceHidden]および[DebuggerHidden]属性を追加する変更です。前回のPR #130646で属性ベースの隠蔽に移行した際に見落とされたメソッドを補完し、arm64/インタプリタ構成でのデバッガのコールスタック表示(mdbg where、現在位置、ステップ実行)を正規化します。
変更内容
- ExceptionHandling.cs:
System.Runtime.EH.AppendExceptionStackFrameViaClasslibおよびSystem.Runtime.EH.UpdateStackTraceに属性を追加(+4行) - StackFrameIterator.cs:
System.Runtime.StackFrameIterator.Nextの3つのオーバーロードに属性を追加(+6行)
これらのメソッドに対して、既に同じコード内の8つのEH.*ヘルパーおよびStackFrameIterator.Initで使用されている[StackTraceHidden]と[DebuggerHidden]の両属性を付与しています。
パフォーマンスへの影響
影響なし
関連Issue
その他
- x64およびarm64環境で検証済み
- StackWalking.ExceptionStack/BigStackTestおよびExceptions suite(DivZeroTest、FirstChanceSuppressTest、ReflectionTest、TooManyTest)がすべてパス確認済み
#131444 Fix missed case of COOP to PREEMPT transition
- 作成者: @davidwrighton
- 作成日時: 2026年07月27日 23:03:28(UTC)
- マージ日時: 2026年07月28日 03:18:12(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
CoreCLR インタープリタのデリゲート呼び出し低速パスにおいて、COOP→PREEMPT トランジションのタイミングを修正しました。GetMultiCallableAddrOfCode → MethodDesc::GetTemporaryEntryPoint を経由するAPI呼び出しが必要な場合、トランジションを事前に実行するよう調整しています。
変更内容
- src/coreclr/vm/interpexec.cpp
- 新たに
InvokeDelegateInvokeMethodHelperを導入し、GetMultiCallableAddrOfCode(...)とスタブ更新をGCX_PREEMP()でラップ - キャッシュされたコールスタブテンプレートが不足する場合、
InvokeDelegateInvokeMethodがヘルパーを使用するよう更新
- 新たに
パフォーマンスへの影響
影響なし
関連Issue
その他
このPRはランタイム内部実装(ガベージコレクション協調モード)の修正であり、公開APIレベルでの変更はありません。COOP/PREEMPT トランジション管理は、マルチスレッド環境でのガベージコレクション安全性に関わる重要な機構です。
#131443 Fix EnC static field address cDAC API
- 作成者: @rcj1
- 作成日時: 2026年07月27日 22:46:11(UTC)
- マージ日時: 2026年07月28日 01:03:26(UTC)
- ラベル: area-Diagnostics-cdac
概要
Edit and Continue (EnC) で追加された静的フィールドのアドレス取得処理を修正し、CoreCLR の EnCAddedStaticField::GetFieldData() の動作に合わせました。プリミティブ型はインラインストレージのアドレスを、マネージド型(Class/ValueType)は間接参照を通じてGC追跡対象のストレージアドレスを返すように修正されました。
変更内容
- RuntimeMutableTypeSystem_1.cs:
GetEnCStaticFieldDataAddressメソッドを更新し、プリミティブ型ではインラインストレージアドレスを、Class/ValueType ではFieldDataスロットに格納されたポインタを読み込んで間接アドレスを返すように修正 - RuntimeMutableTypeSystemTests.cs: プリミティブ型とマネージド型(class/valuetype)の両方の EnC 静的フィールドストレージ動作を検証するテストに拡張(56行追加)
- RuntimeMutableTypeSystem.md: 更新されたアルゴリズムとセマンティクスをドキュメント化
- data-descriptor-meanings.json:
EnCAddedStaticField.FieldDataの記述子の意味を明確化
パフォーマンスへの影響
影響なし
関連Issue
その他
この変更は cDAC(CoreClr Data Access Contract)の内部実装に関するもので、Edit and Continue 機能でのデバッグシナリオの正確性向上を目的としています。公開APIには影響しません。
#131441 Define REPO_COMMIT_HASH for singlefilehost
- 作成者: @elinor-fung
- 作成日時: 2026年07月27日 21:43:08(UTC)
- マージ日時: 2026年07月28日 18:10:57(UTC)
- ラベル: area-Host
概要
singlefilehostが静的にリンクされたホスティングコンポーネントに対して、実際のリポジトリコミットハッシュを含めるようにします。これまではCoreClrのビルドプロセスでコミットハッシュが渡されなかったため、常に"static"と報告されていました。本変更により、corehost.projと同じ方式でSourceRevisionId経由でコミットハッシュをCoreCLR nativeビルドに配信し、dotnet/hostfxr/apphostと同様に実際のバージョン情報を含めるようにします。
変更内容
- src/coreclr/runtime.proj:
SourceRevisionIdをCoreClrのネイティブCMakeの引数CLI_CMAKE_COMMIT_HASHとして配信し、SCM初期化をビルド依存関係に追加 - src/native/corehost/configure.h.in:
CLR_SINGLE_FILE_HOST_ONLYプリプロセッサ条件分岐を削除し、REPO_COMMIT_HASHが常にCMakeから提供されるコミットハッシュを使用するよう統一
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
本変更はGitHub Copilotによる支援で作成されました。singlefilehostのバージョン情報表示(dotnet --info、hostfxr_get_dotnet_environment_info、トレーシング等)が改善され、他のホストコンポーネントと一貫性のあるコミットハッシュを報告するようになります。
#131439 Do not allow generic inlining of ldftn requiring a fat function pointer
- 作成者: @agocke
- 作成日時: 2026年07月27日 20:59:20(UTC)
- マージ日時: 2026年07月28日 12:41:32(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOT/ILCで、ldftnがジェネリックコンテキスト引数を必要とするメソッドをターゲットとする場合、インライニング中のジェネリックコンテキストから不正に参照される問題を修正。インライナーとインリーニのジェネリックパラメータの不一致によりIndexOutOfRangeExceptionが発生していた問題を解決します。
class Gen<T>
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static Type Method() => typeof(T);
}
static unsafe nint GetPtr<U>() => (nint)(delegate*<Type>)&Gen<U>.Method;
class Caller<X>
{
[MethodImpl(MethodImplOptions.NoInlining)]
public static nint Run() => GetPtr<X>();
}
変更内容
CorInfoImpl.RyuJit.cs:
getCallInfo内のfat function pointer参照で、トークンコンテキストがコンパイル対象メソッドと異なる場合(インライニング時)にCORINFO_LOOKUP_NOT_SUPPORTEDを返却。インライナーとインリーニのジェネリックパラメータ数不一致を事前に検出し、インラインを中止させJITに処理させることでクラッシュを回避。Generics.cs(NativeAOT SmokeTest):
Test129093Regressionテストを追加。ジェネリックメソッドの関数ポインタ取得時の複数インスタンス化でのジェネリックコンテキスト正確性を検証。
パフォーマンスへの影響
影響なし。この修正はクラッシュを回避するための条件分岐追加であり、正常系パスには影響しません。
関連Issue
その他
- この変更はGitHub Copilotで開発されました
- コンパイラ(ILC)の内部実装変更であり、ランタイム公開APIへの影響なし
- 既存の同様の修正パターン(#102299のdelegate ctor関連修正など)と整合
- テスト追加により回帰防止が実装されています
#131425 Update SetCredentialsAttributesW to match the native C API declaration
- 作成者: @ksharperd
- 作成日時: 2026年07月27日 16:46:09(UTC)
- マージ日時: 2026年07月28日 09:46:25(UTC)
- ラベル: area-System.Net.Security community-contribution
概要
Windows Native APIのSetCredentialsAttributesW P/Invoke宣言を修正し、C言語のunsigned long型(Windows上では4バイト)に対応させるために、longからuintへ型を変更しました。
変更内容
- src/libraries/Common/src/Interop/Windows/SspiCli/Interop.SSPI.cs:
SetCredentialsAttributesWのP/Invoke宣言でパラメータ型をlongからuintに変更(2行) - src/libraries/System.Net.Security/src/System/Net/Security/SslStreamPal.Windows.cs: 同様に
uint型を使用する呼び出しに対応(2行)
パフォーマンスへの影響
影響なし
関連Issue
その他
このPull Requestは、Native APIとのP/Invoke宣言の型安全性を改善するための内部実装修正です。ただし、実際にSetCredentialsAttributesWが外部から呼び出される箇所や、型変更による実行時への影響の詳細は提供された情報には含まれていません。
#131420 [wasm] Don't import the Mono wasm props on the CoreCLR path
- 作成者: @lewing
- 作成日時: 2026年07月27日 14:26:53(UTC)
- マージ日時: 2026年07月28日 07:49:47(UTC)
- ラベル: arch-wasm area-Build-mono
概要
Browser-Wasm向けCoreC LRアプリのパブリッシュ失敗を修正するPull Requestです。Sdk.targetsでMonoプロップスを無条件にインポートすることにより、CoreCLRパスがMonoのターゲット定義を継承し、実装されていないターゲット_WasmBuildAppCoreへの依存が発生していました。修正内容は、BrowserWasmApp.propsとBrowserWasmApp.targetsのインポートをUseMonoRuntime != 'false'条件に変更し、CoreCLRパスには独立したBrowserWasmApp.CoreCLR.targetsを使用するようにします。
変更内容
src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Sdk/Sdk/Sdk.targets.inBrowserWasmApp.propsとBrowserWasmApp.targetsのインポートをMonoランタイム条件付けに変更- CoreCLR向けターゲット(
BrowserWasmApp.CoreCLR.targets)の条件付けを明示化 - CoreCLRパスは独立したターゲットセットとなり、Monoプロップスの継承を回避
パフォーマンスへの影響
影響なし
関連Issue
その他
- MSBuild実行時、
UseMonoRuntime=false(CoreCLR)の場合、RuntimeIdentifierはWebAssembly SDKで既に設定されており、TargetOS/TargetArchitectureはeng/OSArch.propsでRuntimeIdentifierから派生されるため、BrowserWasmApp.propsのインポートは不要 - Monoフレーバーには変更なし、既存動作を維持
- 検証済み:CoreCLRのネストパブリッシュ実行時にエラーが解消されることを確認
- in-treeビルド、WASI、Helix/WBT CoreCLRレグには影響なし
#131413 [browser] Remove AssetEntry from dotnet.d.ts public API
- 作成者: @Copilot
- 作成日時: 2026年07月27日 10:25:49(UTC)
- マージ日時: 2026年07月28日 18:35:54(UTC)
- ラベル: arch-wasm area-System.Runtime.InteropServices.JavaScript os-browser
概要
WebAssembly/Browser ランタイムの公開API(dotnet.d.ts)から未使用の AssetEntry インターフェースを削除しました。このインターフェースは公開API に含まれていながら、他の公開型から参照されていないデッドコードでした。内部実装では AssetEntryInternal が依存しているため、内部型定義は保持されています。
変更内容
- src/mono/browser/runtime/types/export-types.ts:
AssetEntryの import/export を削除 - src/native/libs/Common/JavaScript/types/export-api.ts:
AssetEntryの import/export を削除 - src/mono/browser/runtime/dotnet.d.ts: 再生成(50行削減)
- src/native/libs/Common/JavaScript/loader/dotnet.d.ts: 再生成(46行削減)
パフォーマンスへの影響
影響なし(型定義ファイルの削減のため、ランタイムパフォーマンスに直接的な影響なし)
関連Issue
その他
- 内部実装の
types/index.tsおよびtypes/public-api.tsにはAssetEntryの定義は保持(AssetEntryInternal extends AssetEntryが依存) - 破壊的変更:
AssetEntryを公開APIから利用していたコードは影響を受けます
#131387 Make Uri non-ASCII hex unescaping a bit faster
- 作成者: @MihaZupan
- 作成日時: 2026年07月26日 10:58:04(UTC)
- マージ日時: 2026年07月28日 15:26:48(UTC)
- ラベル: area-System.Net
概要
Uri の非ASCII十六進数アンエスケープ処理を最適化するPR。HexConverter のテーブルルックアップを使用して手動の十六進数計算を置き換え、ホットループの境界チェックを縮小することで、パフォーマンスを改善しています。
変更内容
- src/libraries/System.Private.Uri/src/System/PercentEncodingHelper.cs
- 手動の十六進数ニブル デコードを
HexConverter.FromCharルックアップに変更 %+ 2個の十六進数文字を読み取るための境界チェックを調整し、JITが境界チェックを削除できるように意図- 無効な十六進数がASCI範囲チェックを通過するのを防ぐためのガード追加
- 手動の十六進数ニブル デコードを
パフォーマンスへの影響
改善あり
短い入力(%E4%BD%A0%E5%A5%BD):
- 43.34 ns → 40.43 ns(約7%高速化)
長い入力(72文字の十六進数シーケンス):
- 103.86 ns → 97.55 ns(約6%高速化)
関連Issue
その他
注意: レビューコメントで指摘されているように、無効な十六進数を防ぐための現在のガードが不十分であり、正確性のバグが存在する可能性があります。
#131384 Implement CLRDataMethodDefinition IL extent APIs in cDAC
- 作成者: @Copilot
- 作成日時: 2026年07月26日 03:05:09(UTC)
- マージ日時: 2026年07月28日 03:48:28(UTC)
- ラベル: area-Diagnostics-cdac
概要
CLRDataMethodDefinitionのIL範囲列挙および代表的なエントリアドレス取得APIをcDAC(コンテナデータアクセスコンポーネント)に実装します。StartEnumExtents、EnumExtent、EndEnumExtents、GetRepresentativeEntryAddressメソッドを追加し、レガシーDAC動作(tiny/fat ILヘッダーおよび単一ショット列挙)を保持します。
変更内容
- ClrDataMethodDefinition.cs: IL範囲列挙ロジック(
StartEnumExtents、EnumExtent、EndEnumExtents)とGetRepresentativeEntryAddressメソッドを追加(+195行) - IXCLRData.cs: 新しい公開列挙型
CLRDataMethodDefinitionExtentTypeおよびClrDataMethodDefinitionExtent構造体のフィールド型をuintから列挙型に変更 - CorDbHResults.cs: 新しいエラーコード定義を追加
- IXCLRDataProcessTests.cs: tiny/extended-fat ILヘッダー、無効な引数、欠落ILを含む包括的な検証テスト(+75行)
- task.cpp、ClrDataMethodInstance.cs、SOSDacImpl.cs: マイナーな修正
パフォーマンスへの影響
影響なし
関連Issue
その他
注意点:
- 公開API変更:
CLRDataMethodDefinitionExtentType列挙型の新規追加とClrDataMethodDefinitionExtent.typeフィールド型の変更は、Legacy組立体の公開サーフェスの破壊的変更です。公開API承認プロセスの記載がない点に要注意。 - エンディアン処理: IL ヘッダーはECMA-335仕様により固定的にリトルエンディアンですが、テストコードではターゲットのエンディアンに基づいて書き込みを行っており、ビッグエンディアンプラットフォームでのテスト精度に懸念があります。
- Null チェック:
StartEnumExtentsメソッドでハンドルをデリファレンス前に検証する必要がある可能性があります(ArgumentNullExceptionでE_POINTERを確実に返す)。
#131355 [wasm][R2R] Fix Crst level violation between NativeImageEagerFixups and PregeneratedStringThunks
- 作成者: @lewing
- 作成日時: 2026年07月24日 23:03:46(UTC)
- マージ日時: 2026年07月28日 22:07:29(UTC)
- ラベル: arch-wasm area-VM-coreclr
概要
WebAssembly R2R(Read-to-Run)パスにおいて、NativeImageEagerFixupsとPregeneratedStringThunksの2つのクリティカルセクション(Crst)ロックが定義済みの取得順序なしで取得されることによるCrstレベル違反を修正します。CrstTypes.defにAcquiredBefore PregeneratedStringThunksエッジを追加し、ロック間に明確な順序付けを確立します。
変更内容
- src/coreclr/inc/CrstTypes.def:
NativeImageEagerFixupsにAcquiredBefore PregeneratedStringThunks制約を追加(+1/-1) - src/coreclr/inc/crsttypes_generated.h: 自動生成ファイル、
CrstNativeImageEagerFixupsのレベルを7から8に変更(+1/-1)
パフォーマンスへの影響
影響なし。本修正はロック取得順序の制約定義のみで、実行時のパフォーマンスや動作に変化はありません。
関連Issue
その他
- WebAssemblyランタイムのR2Rパス実装における内部ロック管理の修正
NativeImageEagerFixupsを取得する前に他のロックを取得しているコードは存在しないため、他のCrstレベルへの影響はなし- 本PRはGitHub Copilotの支援を受けて作成されています
#131345 Handle Decimal32/64/128 ABI packing in the VM and AOT type system
- 作成者: @tannergooding
- 作成日時: 2026年07月24日 19:57:59(UTC)
- マージ日時: 2026年07月28日 14:25:30(UTC)
- ラベル: area-Interop-coreclr
概要
System.Numerics.Decimal32/64/128 に対する ABI 特別処理を実装しました。これまで Int128/UInt128 と異なり、特別なABI処理がなかったため、Decimal128 のアラインメントが 8 バイトになっていたこと、および P/Invoke での値渡しマーシャリングで診断エラーを出さずに誤ったコード生成をしていた問題を解決します。Decimal128 は 16 バイトアラインメント、Decimal32/Decimal64 は自然なアラインメント(それぞれ 4/8 バイト)を適用し、すべての値渡しマーシャリングを MarshalDirectiveException でブロックします。
変更内容
- 型マーキング:
Decimal32/64/128を[Intrinsic]属性でマーク、Decimal64/128に[StructLayout(LayoutKind.Sequential)]を追加 - VM レイアウト処理 (
methodtablebuilder.cpp/classlayoutinfo.cpp):Decimal128の 16 バイトアラインメント設定(プラットフォーム別:x86/x64/Wasm は 16 バイト、ARM32 は 8 バイト)、および decimal 浮動小数点型の包含判定フラグを追跡 - マーシャリング制限:
mlinfo.cpp/dllimport.cppでDecimal32/64/128と それらを含む構造体の値渡しマーシャリングを禁止(MarshalDirectiveExceptionでエラー表示) - JIT インターフェース:
jitinterface.cppで decimal 型がフィールド列挙対象外にならないよう修正(struct promotion 喪失を防止) - AOT コンパイラ:
DecimalFieldLayoutAlgorithm新規追加、型システムに統合(R2R/ILCompiler) - テスト: Interop P/Invoke テストを追加(
Decimal128FieldLayoutのアラインメント/参照渡し/値渡し制限、Decimal32/64の制限検証)
パフォーマンスへの影響
影響なし。レイアウト計算時のアラインメント調整であり、実行時オーバーヘッドはありません。
関連Issue
#74209(Int128/UInt128 の by-value P/Invoke マーシャリング未実装)
#131341(Decimal 型の同様の問題追跡)
その他
- 既存
Int128/UInt128パスは変更なし、並列にIsDecimalFloatingPointOrHasDecimalFloatingPointFieldsフラグを導入 - Mono は
Int128特別処理を持たないため対応なし #if BIGENDIANによるフィールド順序の入れ替えは既にDecimal128に実装済み- ネイティブ側テストは
Decimal128をalignas(16) struct { uint64_t lower, upper; }で実装、マネージド側との相互運用検証はUnsafe.As<UInt128, Decimal128>で実施 - 検証:
clr/libs.pretestビルド成功(警告/エラー 0)、新規 Interop テスト合格、System.Runtime.Tests
#131312 Improve CI scanner duplicate KBE detection
- 作成者: @svick
- 作成日時: 2026年07月24日 12:04:16(UTC)
- マージ日時: 2026年07月28日 14:39:39(UTC)
- ラベル: area-Infrastructure
概要
CI失敗スキャナーが重複するKnown Build Error (KBE)を不正に作成する問題を修正。テスト識別子の完全な名前を優先的に検索し、存在しないAzDO attachmentではなくGitHub checkを通じてBuild Analysis情報を参照するように改善。これにより、アンダースコア区切りのメソッド名を含む短縮名検索でマッチしなかった既存KBEが正しく検出される。
変更内容
.github/workflows/shared/create-kbe.instructions.md: 完全なテストメソッド識別子を短縮形の前に検索するガイダンスを追加.github/workflows/ci-failure-scan.md: 非存在のAzDO attachment参照をBuild Analysis GitHub checkの検索に変更.github/workflows/ci-failure-scan.lock.yml: ワークフロー更新に対応したメタデータハッシュを更新
パフォーマンスへの影響
影響なし
関連Issue
その他
検証として実際のビルド1505119をドライモード再実行し、8つの対象グレーダーすべてが成功。Build Analysisチェックで#129691が省略されていても、完全なメソッド名検索で正しく既存KBEを発見し、重複作成を回避することが確認された。
#131229 Reuse per-thread MemoryStream/Utf8JsonWriter in EventSourceLogger.ToJson
- 作成者: @mangod9
- 作成日時: 2026年07月22日 18:54:48(UTC)
- マージ日時: 2026年07月28日 20:32:52(UTC)
- ラベル: area-Extensions-Logging
概要
EventSourceLogger.ToJsonで、JSONメッセージキーワード有効時(例:dotnet-trace収集時)の毎ログイベント呼び出しにおける割り当てを削減します。[ThreadStatic]でキャッシュされたMemoryStreamとUtf8JsonWriterを再利用し、呼び出しごとにMemoryStream.SetLength(0)とUtf8JsonWriter.Reset(stream)でリセットします。返却されるJSON文字列以外の割り当てを排除しました。
変更内容
- src/libraries/Microsoft.Extensions.Logging.EventSource/src/EventSourceLogger.cs
[ThreadStatic]なMemoryStreamとUtf8JsonWriterをキャッシュ化ToJsonメソッド内でスレッドローカル変数をリセットして再利用- UTF-8デコーディング処理を簡潔化
パフォーマンスへの影響
大幅な割り当て削減と速度改善:
- プロパティ0個:割り当て96%削減(824B→32B)、1.56倍高速化
- プロパティ2個:割り当て87%削減(912B→120B)、1.99倍高速化
- プロパティ6個:割り当て82%削減(960B→168B)、1.21倍高速化
残存する割り当ては返却されるJSON文字列のみです。JSONログ有効時のイベントロギング処理全体のオーバーヘッドが大幅に軽減されます。
関連Issue
なし
その他
- 全対象フレームワーク(net462、netstandard2.0を含む)でビルド成功、警告なし
JsonMessageキーワードテストを含む26/26のユニットテストが合格し、出力JSON形式が変更前後で一致することを確認netstandard2.0/net462を含むすべてのターゲットフレームワークで利用可能なAPIのみを使用
#131219 [mono] Fix interface call in case of reabstraction
- 作成者: @BrzVlad
- 作成日時: 2026年07月22日 14:35:16(UTC)
- マージ日時: 2026年07月28日 14:40:16(UTC)
- ラベル: area-Codegen-JIT-mono
概要
Monoランタイムにおいて、インターフェースメソッドの再抽象化(reabstraction)時にIMT(Interface Method Table)スロットが不正に計算される問題を修正しました。build_imt_slotsメソッドで再抽象化されたメソッドに対する正しいvtableスロットの対応付けが行われていなかった問題を解決しています。
変更内容
- src/mono/mono/metadata/object.c:
build_imt_slotsメソッドに再抽象化処理のロジックを追加 - テストケース追加: 複数の再抽象化されたインターフェースメソッドを含むテストケース(ReabstractedInterfaceMethodIMT)を新規追加
パフォーマンスへの影響
影響なし
関連Issue
その他
背景: インターフェースが実装クラスのvtable内にオフセットを割り当てられるため、そのインターフェース上のメソッド呼び出しはvtableスロットを通じて実行されます。IMTスロット(vtable前に配置)の初期化時に、インターフェースメソッドと対応するvtableスロットのマッピングが行われていました。複数のインターフェースメソッドが衝突する場合はthunkが生成されますが、build_imt_slotsが再抽象化を考慮していなかったため、不正なターゲットメソッドで初期化されていました。ただし、mini_resolve_imt_methodが衝突がない場合にIMTスロットをパッチすることで、実際の問題は限定的でした。
#131214 [release/8.0-staging] Reduce EncryptedXml encoded DTD test workload
- 作成者: @github-actions[bot]
- 作成日時: 2026年07月22日 13:25:57(UTC)
- マージ日時: 2026年07月28日 13:58:04(UTC)
- ラベル: Servicing-approved area-System.Security
概要
.NET 8.0 のバックポート PR です。EncryptedXml の DTD エンコード関連テストの負荷軽減を目的とした変更で、テストのみの修正となります。内部で発見された回帰に対応するものです。
変更内容
EncryptedXmlSample5.xml: 90行の XML テストデータファイルを削除EncryptedXmlTests.cs: テストロジックを修正(+4行/-3行)
パフォーマンスへの影響
テストの実行時間が短縮されます。大規模な XML テストデータ(90行)が削除されることで、関連するテストケースの実行速度が改善されます。
関連Issue
#131091(オリジナル PR)
その他
- このPRはオリジナル PR #131091 の release/8.0-staging ブランチへのバックポートです
- テストのみの変更のため、リスクレベルは Low に設定されています
- 内部で発見された回帰(テスト導入による失敗)に対応しています
- .NET 8 はサービシング リリースのため、ターゲットブランチが
release/8.0-stagingとなっています
#131211 [release/9.0-staging] Reduce EncryptedXml encoded DTD test workload
- 作成者: @github-actions[bot]
- 作成日時: 2026年07月22日 13:09:50(UTC)
- マージ日時: 2026年07月28日 14:02:06(UTC)
- ラベル: Servicing-approved area-System.Security
概要
内部で発見された回帰テストの修正をrelease/9.0-stagingにバックポートするPRです。EncryptedXml関連のDTDエンコードテストの重い処理を削減することで、テスト実行時間を短縮しています。
変更内容
- EncryptedXmlSample5.xml: 90行のテストサンプルXMLファイルを削除
- EncryptedXmlTests.cs: テストコードの軽微な調整(4行追加、3行削除)
パフォーマンスへの影響
テスト実行時間の短縮が見込まれます(DTDエンコード処理の重い処理を削減)。
関連Issue
#131091(オリジナルPR)
その他
- 本変更はテストコードのみの修正であり、本体コード変更はありません
- リスク評価: Low(テストのみの変更)
- #131091の回帰テスト失敗を修正するバックポートです
#131167 [Wasm Ryujit]: implement runtime-async codegen for R2R Wasm
- 作成者: @AndyAyersMS
- 作成日時: 2026年07月21日 20:28:02(UTC)
- マージ日時: 2026年07月28日 16:36:42(UTC)
- ラベル: area-CodeGen-coreclr
概要
Wasm ReadyToRun(R2R)パイプラインに対して、runtime-async メソッド(例: async/await)のコード生成サポートを追加します。非同期継続(async continuation)を Wasm グローバル変数で管理し、シグネチャに 'a' マーカーを追加してasync呼び出しを識別。JIT、EE、ILCompiler、ツール、Wasmホスト全体で非同期resume メタデータと継続値の受け渡しに必要な再配置とサンク処理を実装します。
変更内容
JITコンパイラ側(src/coreclr/jit/)
codegenwasm.cpp:非同期継続グローバル処理とasync resume情報のWasm コード生成実装(120行追加)async.cpp:Wasm shadow stack pointerをasync save/restore対象から除外emitwasm.cpp/h:データオフセット定数(i32.const_dataoffs)の新命令フォーマット対応emit.cpp:async resumeResumeフィールドをWasm table index(再配置型WASM_TABLE_INDEX_I32)としてデータセクションに格納
JIT/EE インターフェース(src/coreclr/inc/)
corinfo.h:CORINFO_WASM_WELLKNOWN_GLOBALSにasyncContinuationエントリ追加、新再配置型WASM_TABLE_INDEX_I32追加jiteeversionguid.h:インターフェース変更のため JIT GUID更新
ランタイム側(src/coreclr/vm/)
wasmasynccontinuation.h新規:Wasm固有の共有async continuation グローバル読み書きアクセッサprestub.cpp/wasm/helpers.cpp:interpreter境界でのasync continuation グローバル経由の受け渡しjitinterface.cpp:Wasmでのresumption stub entry point解決をfunction table index経由に調整
ILCompiler/R2R (src/coreclr/tools/aot/ILCompiler.ReadyToRun/)
- 新規
StoreMultiCallableAddrOfCodeSignature.cs(91行):新再配置タイプの対応 WasmInterpreterToR2RThunkNode.cs:interpreter→R2R間での非同期継続転送WasmR2RToInterpreterThunkNode.cs:R2R→interpreter間での非同期継続転送WasmImportThunk.cs:import thunk生成時のasync continuation値の保存/転送
シグネチャ/Wasm ローイング(src/coreclr/tools/Common/JitInterface/)
WasmLowering.cs:async marker'a'のシグネチャエンコード/デコード対応(+36行)CorInfoImpl.cs:新再配置型WASM_TABLE_INDEX_I32をobject writerに対応
Wasmホスト(src/coreclr/hosts/corerun/wasm/)
libCorerun.js:共有WebAssembly.Globalとしてasync continuation作成・管理
SuperPMI/ツール
methodcontext.cpp/agnostic.h:新well-known globalasyncContinuationのSuper PMI対応r2rdump:Wasm global index naming一元化、disassembly時のannotation追加
パフォーマンスへの影響
影
#130622 Preserve IL for CoreCLR interpreter fallback on Apple mobile
- 作成者: @Copilot
- 作成日時: 2026年07月13日 13:31:05(UTC)
- マージ日時: 2026年07月28日 14:04:40(UTC)
- ラベル: area-Infrastructure
概要
Apple mobileプラットフォームでのComposite ReadyToRunパブリッシング時に、コンパイル済みコードが拒否または独自のLoadContextで利用不可になった場合に、CoreCLRインタープリターフォールバックに必要なILが削除されるのを防ぐ変更です。IL削除ポリシーを調整し、メソッドごとの命令セットサポート固定機能を持つメソッドのILを保持し、固定命令セットプラットフォーム(Apple mobile/ブラウザ)で互換性を確保します。
変更内容
- IL削除ポリシーの改善:メソッドごとの命令セットサポート固定機能を持つメソッドのILを保持
- 固定命令セットプラットフォーム分類の導入:
InstructionSetHelpers.csにIsFixedInstructionSetPlatformヘルパーを追加、命令セット処理を統一化 - テスト関連の整備
- 複数のテストプロジェクト(
Regression_o_2.csproj、System.Reflection.Metadata.Tests.csproj、System.IO.Hashing.Tests.csproj)から一時的なIL削除オプトアウト(PublishReadyToRunStripILBodies=false)を削除 StripILBodies.csに命令セット検証用メソッドを追加- ReadyToRun用テストケースにiOS対象の固定命令セット動作検証を追加
SignatureDecoderTests.csに新しいIL削除センチネルパターン(0xFE 0x24)の認識を追加
- 複数のテストプロジェクト(
- コンパイラロジック調整:
CorInfoImpl.csで固定命令セットプラットフォームではISAベースの固定機能生成をスキップ、ReadyToRunCodegenCompilation.csで固定命令セット対応の基準命令セット署名を使用
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
本PRは内部実装(ReadyToRunコンパイラツール、テストインフラ)の変更であり、公開APIには影響しません。Apple mobileプラットフォーム上での実行時動作が対象となります。
#130502 Handle CDATA in unknown extension data (IExtensibleDataObject)
- 作成者: @StephenMolloy
- 作成日時: 2026年07月10日 16:38:27(UTC)
- マージ日時: 2026年07月28日 21:11:53(UTC)
- ラベル: area-Serialization
概要
DataContractSerializerがIExtensibleDataObjectを実装する型に対し、CDATA区間内に値を持つ不明な要素を逆シリアル化する際にSerializationExceptionをスローしていた問題を修正しました。CDATA をテキストと同様に処理することで、ラウンドトリップセマンティクスを保持しながら正常に処理できるようにしました。
変更内容
- XmlObjectSerializerReadContext.cs:
ReadExtensionDataValueとReadUnknownXmlDataメソッドでCDATA型をText型と同じく処理するよう修正。CDATA内容は文字列ノードとしてキャプチャされ、再シリアル化時にエスケープされたテキストとして復元されます。 - DataContractSerializer.cs: CDATA区間を含む未知の要素のシリアル化・逆シリアル化テストケースを追加(33行)
- SerializationTypes.RuntimeOnly.cs: テスト用型定義を追加(21行)
パフォーマンスへの影響
影響なし
関連Issue
その他
公開APIの変更なし(内部実装の修正)。CDATA区間を含むXML要素の逆シリアル化は、ラウンドトリップセマンティクス保持によりテキスト内容はエスケープ済みテキストとして復元されます。
#130428 Fix xsi:list round-tripping with space-separated serialization
- 作成者: @StephenMolloy
- 作成日時: 2026年07月09日 19:20:50(UTC)
- マージ日時: 2026年07月28日 20:56:22(UTC)
- ラベル: area-Serialization
概要
[XmlText]属性を持つ配列型メンバーのラウンドトリップ問題を修正。従来は複数要素が区切文字なしで連結されていたため、デシリアライズ時に単一値として読み込まれていました。本修正により、XML仕様に準拠した4つのXML空白文字(0x20、0x09、0x0D、0x0A)で区切られた形式でシリアライズ/デシリアライズするようになります。この動作は[XmlAttribute]リスト型の既存動作に合わせています。
変更内容
- シリアライゼーション: 反射ベース・IL生成・事前生成の3つのシリアライザーエンジン全体で、
[XmlText]配列メンバーをスペース区切りのリストとしてシリアライズ - デシリアライゼーション: リストテキストと属性リスト値をXML空白文字の4種類で分割。従来の
char.IsWhiteSpace(より広い文字集合)から厳密なXML空白文字セットに変更 - AppContextスイッチ:
Switch.System.Xml.Serialization.UseLegacyXmlListSeparationで従来の連結動作にオプトアウト可能 - メタデータ:
Mappings.csにTextAccessor.IsListプロパティを追加し、アクセッサー単位のリスト意味論を管理 - テスト:
[XmlText]配列・List<string>・混合要素/テキストコンテンツのラウンドトリップ、空白正規化、レガシースイッチの動作をカバー
パフォーマンスへの影響
影響なし
関連Issue
その他
- 破壊的変更:新動作がデフォルト。従来の連結動作に依存するコードは明示的にAppContextスイッチで有効化が必要
- null/空の中間要素は正規化時に折りたたまれ、ラウンドトリップでは失われる(XML空白を個別リスト項目内に埋め込まないことが呼び出し元の責任)
- ランタイムのみのテスト型は
SerializationTypes.RuntimeOnly.csに配置し、事前生成シリアライザーテストプロジェクトから除外
#130159 Use CodeVersioning for EnC
- 作成者: @rcj1
- 作成日時: 2026年07月03日 06:35:58(UTC)
- マージ日時: 2026年07月28日 04:23:39(UTC)
- ラベル: area-Diagnostics-coreclr
概要
Edit-and-Continue (EnC) 機能がコード バージョニング インフラストラクチャに統合されました。EnC編集は明示的なILコードバージョンとして表現され、ReJITとは区別されます。各編集は単一の新しいILCodeVersionと単一のNativeCodeVersionに対応します。EnCとReJITは相互に互換性がありません。
変更内容
コア ランタイム機能:
ILCodeVersionNodeにCodeVersionSource列挙型(kUnknown, kReJIT, kEnC)とEnCVersionフィールドを追加(src/coreclr/vm/codeversion.h/cpp)- EnC IL メソッドを CodeVersionManager を通じてバージョン管理可能に(
src/coreclr/vm/method.hpp/cpp) MethodDesc::GetILHeaderでアクティブな EnC IL をコードバージョンマネージャーから返すように変更- EnC バージョン作成・アクティベーション時にソースとバージョン番号を記録(
src/coreclr/vm/encee.cpp) - ReJIT 設定時に
CodeVersionSource::kReJITでタグ付け(src/coreclr/vm/rejit.cpp)
デバッガ・DAC統合:
- ReJIT 列挙を
ILCodeVersion::IsReJIT()でフィルタリング(EnC・デフォルトバージョンを除外) - DAC/cDAC ReJIT API を真の ReJIT バージョンのみに制限(
src/coreclr/debug/daccess/request.cpp) - IL 取得パスでアクティブな EnC コードバージョンを優先(
src/coreclr/debug/daccess/dacdbiimpl.cpp,ClrDataFrame.cs) - デバッガの ReJIT 関連チェックを EnC バージョンを無視するように更新(
src/coreclr/debug/ee/debugger.cpp) - ローカル署名解析でアクティブな EnC IL を使用(
src/coreclr/debug/ee/functioninfo.cpp)
cDAC (マネージド DAC):
ICodeVersions.IsReJITAPI を新規追加(src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/ICodeVersions.cs)CodeVersionSourceを公開API として導入- レガシー SOS DAC 動作を
IsReJITでフィルタリング - DBI ヘルパーパスで CodeVersionManager を使用して EnC バージョンを解決
- MockDescriptor と単体テストで新フィールドをサポート
ドキュメント:
CodeVersions.mdで新しいCodeVersionSource/IsReJIT概念を文書化
パフォーマンスへの影響
影響なし
関連Issue
#128338のフォローアップ
その他
注意点:
- 新しい公開 API (
CodeVersionSource列挙型、ICodeVersions.GetSource/GetEnCVersion) が導入されていますが、PR説明に API 承認 Issue への参照がありません。dotnet/runtime のポリシーでは新しい公開 API にはapi-approvedラベル付きの Issue リンクが必要です。 - Copilot によるレビューで複数の潜在的な問題が指摘されています:
- `Get
#129492 Implement support for derived IXmlSerializable types in XmlSerializer
- 作成者: @StephenMolloy
- 作成日時: 2026年06月16日 23:46:22(UTC)
- マージ日時: 2026年07月28日 20:07:40(UTC)
- ラベル: area-Serialization
概要
反射ベースのXmlSerializerで、派生したIXmlSerializable型の逆シリアル化サポートを実装しました。xsi:type属性を正しく解析して派生型を特定し、以前はNotImplementedExceptionをスローしていた処理を適切に処理できるようになりました。長年未実装だった機能がこのPRで解決されます。
変更内容
- ReflectionXmlSerializationReader.cs:
SerializableMapping.DerivedMappingsツリーを走査して、xsi:typeに対応する派生IXmlSerializable型を正しく選択・逆シリアル化するロジックを追加。ReadDerivedSerializableヘルパーメソッドで派生マッピング検索とインスタンス化処理を統一 - XmlSerializerTests.RuntimeOnly.cs: スキップされていた
Xml_DerivedIXmlSerializableテストを有効化し、派生IXmlSerializable型のシリアル化・逆シリアル化動作を検証 - XmlSerializerTests.Internal.cs: 実装完了に伴い、スキップ対象テストを削除
- System.Private.Xml.Tests.csproj: テスト構成の調整
パフォーマンスへの影響
影響なし
関連Issue
その他
- これは公開API
XmlSerializerの既存機能の完成です。破壊的変更はありません - 派生
IXmlSerializable型のシリアル化機能はすでに存在していたため、今回は逆シリアル化側の対応となります - XSD標準の
xsi:type属性による型指定が、派生型に対して正しく機能するようになりました
#128148 Arm64: Initialization of TYP_SIMD/TYP_MASK locals
- 作成者: @snickolls-arm
- 作成日時: 2026年05月13日 15:46:31(UTC)
- マージ日時: 2026年07月28日 16:45:48(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
ARM64アーキテクチャにおいて、TYP_SIMDおよびTYP_MASKローカル変数のゼロ初期化処理を改善しました。ベクタストア命令のループを用いてUnknownSizeFrame全体を初期化し、デバッグコードではTYP_SIMDローカルを個別にポイズン値(ブロードキャスト)で初期化します。TYP_MASKローカルはアドレス公開されないためポイズン化しません。初期化コードは関数の最初の基本ブロックで生成されます。
変更内容
- src/coreclr/jit/codegen.h: 初期化処理関連の新規メソッド宣言を追加
- src/coreclr/jit/codegenarm64.cpp: ARM64特有の初期化コード生成ロジックを実装(37行追加)
- src/coreclr/jit/codegenarmarch.cpp: ARM系アーキテクチャ共通の初期化処理を実装(48行追加)
- src/coreclr/jit/codegencommon.cpp: 共通の初期化処理フレームワークを追加(8行追加)
- src/coreclr/jit/codegenlinear.cpp: 線形コード生成での初期化処理統合(7行追加)
- src/coreclr/jit/emitarm64.cpp: ベクタストア命令の生成ロジックを拡張(28行追加、7行削除)
- src/coreclr/jit/lsrabuild.cpp: ライフタイム解析における初期化変数の処理を追加(13行追加)
- src/coreclr/jit/targetarm64.h: ターゲット固有の初期化設定を更新(3行追加、1行削除)
パフォーマンスへの影響
ベクタストアループによるバルク初期化により、複数のSIMD/MASKローカル変数を効率的に初期化できるため、初期化オーバーヘッドが削減される可能性があります。デバッグビルドではポイズン化により若干のオーバーヘッドが発生しますが、これはデバッグ時の検出能力向上のための設計です。
関連Issue
なし
その他
TYP_MASKローカルのポイズン化は明示的に除外されています(アドレス公開されないため)- ジッターコンパイラ(JIT)のARM64コードジェネレーション層での実装です
- 公開APIではなく、内部的なコンパイル時処理の改善です
#127520 Arm64 SVE: Support scalable constant vectors and masks
- 作成者: @a74nh
- 作成日時: 2026年04月28日 17:32:41(UTC)
- マージ日時: 2026年07月28日 06:57:22(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
Arm64 SVE(Scalable Vector Extension)向けに、スケーラブルな定数ベクトルとマスクのサポートを追加します。従来の固定サイズのデータブロックの代わりに、反復値、開始値と段階値を持つシーケンス、または最初のレーンの値で残りがゼロのいずれかで表現されます。これにより、ベースタイプを持つ未知のサイズの定数がサポートされます。
サポートされる操作:
Sve.CreateTrueMask*()、Sve.CreateFalseMask*()Vector.Create()、Vector.CreateScalar()、Vector.CreateScalarUnsafe()、Vector.CreateSequence()
変更内容
- gentree.h/cpp: スケーラブル定数の新しいエンコーディング(
simdscalable_t、simdmaskscalable_t)を導入。GenTreeVecConとGenTreeMskConを拡張し、ハッシング機能を追加 - simd.h/cpp: スケーラブルベクタ/マスク定数のヘルパーAPI実装と変換機能
- valuenum.h/cpp: Arm64向けのスケーラブルSIMD定数のValue Number(VN)サポート追加
- hwintrinsicarm64.cpp: VectorT イントリンシックのインポート処理更新
- hwintrinsiccodegenarm64.cpp: SVE命令の生成
- lowerarmarch.cpp: マスク処理とVectorT イントリンシック処理の更新
- lsraarm64.cpp: 直接エンコードできないスケーラブルベクトル定数用に一時変数を予約
- codegenarm64.cpp: スケーラブルベクトル/マスク定数の生成コード追加
- その他: コンパイラヘルパー、ビットマスク機能、emitarm64における署名付き直接値ヘルパーを拡張
パフォーマンスへの影響
simd_t型定義がsimd16からsimd32サイズへ変更されたため、新しいスケーラブル定数構造をサポートします。2つのスケーラブル定数を組み合わせて第3のスケーラブル定数を生成できない場合があり、その場合IRで2つのベクトルとして保持されます。影響はスケーラブルベクトル定数に特化しており、固定サイズベクトルの既存パスは変更されません。
関連Issue
その他
- マスク定数の
IsAllBitsSet()機能がベースタイプパラメータを追加。マスク値はベースタイプの粒度に依存(例:TYP_LONGの全ビットセットはTYP_BYTEではセットされない) - Arm64ではマスクはSVEのみで使用されるため、スケーラブルなマスクかどうかを判定するには
JitUseScalableVectorTをチェック - VectorT型の定数はTYP_SIMDの場合、スケーラブルと判定
- Copilotレビューで複数の低信頼度コメント指摘あり:スケーラブル定数生成時の値の正規化(特に64ビット未満の基本型)、等価性とハッ