注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #123274 Fix missing static libraries in NativeAOT packs for Apple mobile platforms
- #123261 [RyuJit/WASM] Some fixes related to local addresses and stores
- #123247 [main] Source code updates from dotnet/dotnet
- #123246 Delete TypeGeneratorTests test suite
- #123242 Add multiple environment variable sets to aspnet2 SPMI collection
- #123241 Update NativeAOT Docker samples to use .NET 10 images
- #123240 Fix assertions generated by optCreateJumpTableImpliedAssertions
- #123231 Fix interpreter threadabort in finally
- #123228 Clean up enumCordbDerived: remove outdated comments, delete unused values, remove all MDA code, remove dead CordbContext, and fix type-enum mapping
- #123226 [Startup] Bump PerfMap ahead of DiagnosticServer
- #123223 Fix Base64 incorrectly handling small destinations when inputs contain whitespace
- #123119 [release/10.0] Source code updates from dotnet/dotnet
- #123021 [Wasm RyuJIT] Implement 8 and 16-bit loads/stores; implement indirect loads/stores
- #123015 Bring throw helpers to PUSH_COOP_PINVOKE_FRAME plan
- #122382 [RISC-V] correct comments in emitLoadImmediate
#123274 Fix missing static libraries in NativeAOT packs for Apple mobile platforms
- 作成者: @Copilot
- 作成日時: 2026年01月16日 18:53:00(UTC)
- マージ日時: 2026年01月16日 23:34:23(UTC)
- ラベル: 指定なし
概要
NativeAOT runtime packがApple mobile platforms (iOS、tvOS等)向けの必須な静的ライブラリ(libSystem.Globalization.Native.a、libSystem.IO.Compression.Native.a、libSystem.Native.a、libbrotli*.a)を欠落していた問題を修正しました。バージョン11.0.0-alpha.1.26065.101から発生していた回帰です。修正内容はeng/liveBuilds.targetsのExcludeNativeLibrariesRuntimeFiles条件にBuildNativeAOTRuntimePack != 'true'を追加し、NativeAOTパックは静的ライブラリの除外対象から除外するものです。
変更内容
- eng/liveBuilds.targets (+3/-2)
ResolveLibrariesRuntimeFilesFromLocalBuildターゲット内のExcludeNativeLibrariesRuntimeFiles条件を修正- Apple mobile platforms向けの除外条件に
BuildNativeAOTRuntimePack != 'true'を追加 - コメントを更新し、NativeAOTではこの除外が適用されないことを明記
<!-- 修正前 -->
<ExcludeNativeLibrariesRuntimeFiles Condition="'$(TargetsAppleMobile)' == 'true' and '$(RuntimeFlavor)' == 'CoreCLR'"
<!-- 修正後 -->
<ExcludeNativeLibrariesRuntimeFiles Condition="'$(TargetsAppleMobile)' == 'true' and '$(RuntimeFlavor)' == 'CoreCLR' and '$(BuildNativeAOTRuntimePack)' != 'true'"
パフォーマンスへの影響
影響なし。この修正はパッケージング時の静的ライブラリの包含/除外ロジックの修正で、実行時パフォーマンスには影響しません。
関連Issue
#123253
その他
- 修正対象は Apple mobile platforms(iOS、tvOS等)のNativeAOT runtime packのみ
- Linux等の他のプラットフォーム向けNativeAOTパックはこの問題の影響を受けていない
- 正規CoreCLRパックはCoreClRの共有フレームワークディレクトリからこれらライブラリを取得するため除外されていたが、NativeAOTパックはCoreClR共有フレームワークアーティファクトを参照しないため、LibrariesRuntimeFilesから必要とする設計差
#123261 [RyuJit/WASM] Some fixes related to local addresses and stores
- 作成者: @SingleAccretion
- 作成日時: 2026年01月16日 16:15:45(UTC)
- マージ日時: 2026年01月16日 21:03:50(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr community-contribution
概要
RyuJit/WASMバックエンドにおけるローカル変数アドレス(LCL_ADDR)処理とストア操作に関連するバグ修正。LCL_ADRコード生成から不要なadd命令を削除し、レジスタ割り当て処理を改善しました。
変更内容
src/coreclr/jit/codegenwasm.cpp (+8/-2)
- LCL_ADRコード生成の最適化
- 不要な
add命令の削除
src/coreclr/jit/regallocwasm.cpp (+11/-8)
- レジスタ割り当てロジックの調整
- ローカルアドレスおよびストア操作に関連する処理の修正
パフォーマンスへの影響
改善点:
- LCL_ADRコード生成における不要な
add命令の削除により、生成されるWASM命令列が削減 - コードサイズの軽微な削減が期待される
懸念点:
- 変更規模が小さいため、計測可能な性能改善は限定的と考えられます
関連Issue
PR #122414に関連する修正(参照コメント: https://github.com/dotnet/runtime/pull/122414/files#r2698997821)
その他
- WASMバックエンド固有の修正
- レジスタ割り当て(regallocwasm.cpp)とコード生成(codegenwasm.cpp)の両モジュールに跨がる調整
- 安定性向上を主目的とした改善と推定
#123247 [main] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年01月16日 02:05:28(UTC)
- マージ日時: 2026年01月16日 16:46:57(UTC)
- ラベル: area-codeflow
概要
このPRは、dotnet/dotnetリポジトリからのコードフロー更新です。Roslyn、Razor、Runtime、WinFormsなど複数のコンポーネントの依存関係を2026年1月15日時点の最新版に更新しています。主にMicrosoft.CodeAnalysis、NuGet関連パッケージ、System.Text.Jsonなどの構成要素が更新されました。
変更内容
- eng/Version.Details.props: バージョン情報の更新(+39/-39行)
- eng/Version.Details.xml: 依存関係の詳細定義を更新(+79/-79行)
- global.json: グローバルビルド設定の更新(+4/-4行)
更新された主要な依存関係:
- Microsoft.CodeAnalysis系: 5.4.0-2.26064.120 → 5.4.0-2.26065.101
- Microsoft.DotNet.Arcade.Sdk等ビルドツール: 11.0.0-beta.26064.120 → 11.0.0-beta.26065.101
- NuGet.Frameworks/Packaging/ProjectModel: 7.3.0-preview.1.6520 → 7.3.0-preview.1.6601
- System.Text.Json、System.Reflection.Metadata等: 11.0.0-alpha.1.26064.120 → 11.0.0-alpha.1.26065.101
パフォーマンスへの影響
影響なし。このPRは依存関係の更新と設定ファイルの同期を行うもので、ランタイムやコンパイラのコア実装変更は含まれていません。
関連Issue
なし
その他
- このPRは自動化されたコードフロー更新(dotnet-maestro[bot]による)
- 関連する変更がRazor、Roslyn、Runtime、WinFormsリポジトリに存在
- ビルドID: 20260115.1、コミットハッシュ: bac69806be267e5c3fbd02ea60d69f6bdc0356ae
#123246 Delete TypeGeneratorTests test suite
- 作成者: @jkoritzinsky
- 作成日時: 2026年01月16日 01:05:55(UTC)
- マージ日時: 2026年01月16日 03:27:44(UTC)
- ラベル: area-TypeSystem-coreclr
概要
TypeGeneratorTests テストスイートを削除するメンテナンス変更です。このテストスイートは全体のプロジェクトファイルロード時間の約1/9を占めながら、回帰を検出した実績がなく、Pri1設定でのみ実行されるため、ビルドパフォーマンス改善のために削除されます。
変更内容
- テストスイート全体の削除:
src/tests/Loader/classloader/TypeGeneratorTests/ディレクトリ配下のテストフレームワークと約1000個のジェネレーテッドテストケースを完全削除 - プロジェクト設定の更新:
Directory.Build.propsと複数の.ilprojファイル(各テストケースごと)の削除 - IL ソースの削除: Generated*.il ファイル(IL中間言語のテスト実装)の削除
- 親プロジェクト設定の修正:
src/tests/Common/dirs.projとsrc/tests/Loader/Loader.csprojから該当参照を削除
パフォーマンスへの影響
改善点:
- プロジェクトファイルロード時間を約11%削減(全体の1/9を占めていたため)
- ビルドパフォーマンスの向上により開発者のビルド待機時間を短縮
- テストスイートが回帰検出に寄与していないため、テスト実行パフォーマンスに負の影響なし
- Pri1設定でのみ実行される構成のため、PR実行時のテストカバレッジへの実質的な影響なし
関連Issue
#123202(本変更に関連するディスカッション)
その他
- このPRは #123202 を置き換える形で提出されています
- テストスイートは長期間にわたって回帰を検出した実績がないため、削除による機能的なリスクは極めて低いです
- 削除対象は主に自動生成されたILコードとプロジェクト設定ファイル(3000ファイル超)です
#123242 Add multiple environment variable sets to aspnet2 SPMI collection
- 作成者: @Copilot
- 作成日時: 2026年01月16日 00:53:40(UTC)
- マージ日時: 2026年01月16日 17:51:33(UTC)
- ラベル: 指定なし
概要
superpmi_aspnet2.pyスクリプトを改変し、各ベンチマークシナリオを複数の異なるJIT設定環境変数を使用して実行できるようにしました。従来の4回の実行から、4シナリオ × 6環境セットの計24回の実行に拡張され、より包括的なSPMI(SuperPMI)データ収集が可能になります。
// 環境変数セットの例
// Dummy=0, TieredCompilation=0, TieredPGO=0 など6種類
// 各シナリオで異なるJIT設定での動作を記録
### Running about-sqlite benchmark (set 1/6: Dummy=0)... ###
### Running about-sqlite benchmark (set 2/6: TieredCompilation=0)... ###
変更内容
run_crank_scenario関数の署名変更:env_vars: dictパラメータを追加し、環境変数設定を受け入れるように拡張- 環境変数処理: 辞書を
--application.environmentVariables DOTNET_<variable>=<value>形式のcrankコマンドライン引数に変換 - 6つの環境変数セット定義: TieredCompilation、TieredPGO、ReadyToRun、OSR_HitLimit、TC_PartialCompilationなど複数のJIT関連設定を含む
- メインループの更新: ネストされたイテレーション構造により、4シナリオ × 6環境セット = 24回の実行を実現
パフォーマンスへの影響
影響なし。本変更はSPMI収集スクリプトの機能拡張であり、実際のランタイムパフォーマンスには直接的な影響を与えません。ただし、スクリプト実行時間は従来の4倍(24回実行)に増加します。
関連Issue
特定のissue番号の記載なし。
その他
このPRは内部開発ツール(SuperPMI収集スクリプト)の改善であり、公開APIやランタイムの動作に影響しません。異なるJIT設定下での包括的なパフォーマンスデータ収集により、JITコンパイラの最適化に関する知見を深めることが目的です。
#123241 Update NativeAOT Docker samples to use .NET 10 images
- 作成者: @Copilot
- 作成日時: 2026年01月16日 00:47:05(UTC)
- マージ日時: 2026年01月16日 17:37:52(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOT のDockerサンプルを.NET 8から.NET 10へアップデートするPRです。ビルドツールイメージをCBL Mariner 2.0からAzure Linux 3.0に更新し、SDKイメージも.NET 10対応版へ統一しました。また、Ubuntu互換性要件を16.04から18.04へ引き上げ、ドキュメント内の誤ったリンクを修正しています。
変更内容
Dockerfile.cross-build-x64-arm64 / Dockerfile.cross-build-x64-x64:
- ビルドツールイメージ:
cbl-mariner-2.0-cross-*→azurelinux-3.0-net10.0-cross-* - SDKイメージ:
dotnet/sdk:8.0-cbl-mariner2.0-amd64→dotnet/sdk:10.0 - dotnetコマンドの手動シムリンク作成を削除(3行目)
- ビルドツールイメージ:
containers.md:
- Ubuntu互換性要件を16.04から18.04へ更新
- ドキュメント内のx64-x64 Dockerfile リンク(ARM64版を指していた)を修正
- サンプルコマンドを
ubuntu:18.04へ更新
パフォーマンスへの影響
影響なし(ドキュメント・サンプルの更新のみ)
関連Issue
なし
その他
- 削除された手動シムリンク作成処理は、新しいAzure Linux 3.0/.NET 10イメージに既に組み込まれていることを示唆します
- ドキュメント更新は
release/10.0ブランチの公式Docker設定に準拠しており、テンプレートとしての一貫性が確保されています
#123240 Fix assertions generated by optCreateJumpTableImpliedAssertions
- 作成者: @EgorBo
- 作成日時: 2026年01月16日 00:40:11(UTC)
- マージ日時: 2026年01月16日 14:16:23(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITコンパイラのswitch文最適化における不正なアサーション生成バグを修正。オフセット付きのswitch式で、デフォルトケースに対して誤ったRange Assertionが生成される問題を解決。例えば、case 2,3,4のswitch文で、デフォルトケースに「X >= 5」というアサーションが不正に作成されていたが、実際にはXは0や1の値も取得可能でした。
変更内容
- src/coreclr/jit/assertionprop.cpp:
optCreateJumpTableImpliedAssertions関数の論理を修正。デフォルトケースのアサーション生成時にoffset == 0の条件チェックを追加(+2行) - src/tests/JIT/Regression/JitBlue/Runtime_122254/Runtime_122254.cs: 修正検証用のリグレッションテストを追加。switch文で値0を指定したケースをカバー(+47行)
パフォーマンスへの影響
影響なし。本修正は不正なアサーション生成による誤った最適化パスの削除であり、正確性の向上に該当。Range Assertionの生成ロジック簡潔化により、わずかにコンパイル時間が短縮される可能性がありますが、実行時パフォーマンスへの変化はありません。
関連Issue
#122254
その他
なし
#123231 Fix interpreter threadabort in finally
- 作成者: @janvorli
- 作成日時: 2026年01月15日 22:39:39(UTC)
- マージ日時: 2026年01月16日 20:34:00(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
インタープリタのスレッド中止処理をfinally ブロックで正しく動作するように修正しました。単純な IsAbortRequested() チェックから、より複雑な COMPlusCheckForAbort() 関数に置き換えることで、finally ブロック内でのスレッド中止処理が不正に実行されるのを防ぎます。この修正により、System.Runtime.Tests.ControlledExecutionTests.CancelItselfFromFinally テストが正常に動作するようになりました。
変更内容
- src/coreclr/vm/interpexec.cpp
- インタープリタの例外ハンドラ内の条件チェックを
Thread::IsAbortRequested()からCOMPlusCheckForAbort(resumeIP)に変更 - 戻り値に基づいた条件判定ロジックを導入
- 不要になった
pThreadローカル変数を削除
- インタープリタの例外ハンドラ内の条件チェックを
パフォーマンスへの影響
影響なし。この変更は制御フローの正確性を確保するためのバグ修正であり、通常の実行パスではパフォーマンスに測定可能な影響はありません。
関連Issue
なし
その他
この修正はインタープリタとJIT コンパイラの間での動作一貫性を改善するものです。COMPlusCheckForAbort() 関数はスレッド中止フラグだけでなく、実行コンテキストやセキュリティ要件などより複雑な条件を評価するため、finally ブロック内での中止処理をより安全かつ正確に制御できます。
#123228 Clean up enumCordbDerived: remove outdated comments, delete unused values, remove all MDA code, remove dead CordbContext, and fix type-enum mapping
- 作成者: @Copilot
- 作成日時: 2026年01月15日 20:28:42(UTC)
- マージ日時: 2026年01月16日 02:07:46(UTC)
- ラベル: area-Diagnostics-coreclr
概要
.NET CoreデバッガーのenumCordbDerived列挙型と関連コードの大規模クリーンアップです。同期ずれした数値コメント、18個の未使用列挙値、MDA(マネージドデバッグアシスタント)関連の約689行の不要コード、および使用されないCordbContextクラスを削除しました。同時に、CordbValueEnumとCordbCodeEnumの型マッピングを修正し、コンストラクターが正しく列挙型値をベースクラスに渡すようにしました。
変更内容
| ファイル | 変更内容 |
|---|---|
rspriv.h |
列挙型の数値コメント削除、未使用値18個削除、CordbMDA/CordbContextクラス定義削除 |
rsmda.cpp |
ファイル全体削除(~219行) |
process.cpp |
DB_IPCE_MDA_NOTIFICATIONケース3箇所削除 |
shimcallback.cpp |
MDANotificationコールバック実装削除、E_NOTIMPLスタブに置換 |
rsthread.cpp |
CordbContext::QueryInterface削除、CordbValueEnum/CordbCodeEnumコンストラクター修正 |
debugger.cpp/.h |
SendMDANotification関数・SendMDANotificationParamsスタクト削除 |
dbgipceventtypes.h |
DB_IPCE_MDA_NOTIFICATIONイベント型定義削除 |
CMakeLists.txt |
rsmda.cppをビルドリストから削除 |
パフォーマンスへの影響
影響なし – 本変更は不要な機能削除によるコード削減が主目的です。ただし以下の改善効果があります:
- メモリフットプリント削減:~689行の死亡コード除去
- デバッグシンボルサイズ削減:未使用列挙値・クラス定義の削除
- メンテナンスコスト低減:同期ずれしたコメント・実装されていない機能の除去
関連Issue
https://github.com/dotnet/runtime/pull/123101#discussion_r2695816294
その他
- 重要な判断: MDA機能は.NET Coreでは実装されていないため、完全削除が正当化されています
- 検証: コードベース全体でスキャンし、削除された列挙値・コードが他の場所で使用されていないことを確認済み
- 互換性:
CordbValueEnumとCordbCodeEnumの再追加により、実装済みクラスと列挙型の対応関係を修正
// Before: 数値コメントが実際の値と不一致
typedef enum {
enumCordbStackWalk, // 44
enumCordbHeap, // 48
enumCordbHeapSegments, // 47 ← 順序が逆
enumMaxDerived,
} enumCordbDerived;
// After: シンボル名のみで数値コメント削除
typedef enum {
enumCordbValueEnum,
enumCordbCodeEnum,
enumCordbStackWalk,
enumCordbEnumerator,
enumCordbHeap,
enumMaxDerived,
enumMaxThis = 1024
} enumCordbDerived;
#123226 [Startup] Bump PerfMap ahead of DiagnosticServer
- 作成者: @mdh1418
- 作成日時: 2026年01月15日 18:39:22(UTC)
- マージ日時: 2026年01月16日 22:33:07(UTC)
- ラベル: area-Diagnostics-coreclr
概要
DiagnosticServerのEnablePerfMap IPC コマンドがPerfMap::Initialize()の実行前に呼び出されることで発生するレース条件を修正しました。スタートアップシーケンスでPerfMap初期化をDiagnosticServer初期化より前に移動することで、ランタイムのクラッシュを防ぎます。
// 修正前: DiagnosticServer初期化 → PerfMap初期化 (クラッシュの可能性)
// 修正後: PerfMap初期化 → DiagnosticServer初期化 (安全)
変更内容
- src/coreclr/vm/ceemain.cpp (+4/-1)
EEStartupHelper()内でPerfMap初期化をDiagnosticServer初期化(DiagnosticServerAdapter::Initialize())より前に移動- 既存の依存関係の分析により、PerfMapは
SString::Startup()とPAL/OSサービスにのみ依存していることを確認
パフォーマンスへの影響
影響なし。スタートアップシーケンスの再順序付けのため、パフォーマンス上の変化はありません。
関連Issue
その他
- DiagnosticServerの
EnablePerfMap/DisablePerfMapIPC コマンドでPerfMapの状態を切り替える推奨方法 - 環境変数
DOTNET_PerfMapEnabledでの設定は、このレース条件を回避できないため非推奨 - 本修正により、IPC経由のPerfMap制御が安全に動作するようになります
#123223 Fix Base64
- 作成者: @Copilot
- 作成日時: 2026年01月15日 18:02:41(UTC)
- マージ日時: 2026年01月16日 00:14:22(UTC)
- ラベル: area-System.Buffers
概要
Base64{Url}.DecodeFromUtf8 と DecodeFromChars がホワイトスペースを含む入力でDestinationTooSmallエラーを誤って返す問題を修正しました。実際のデータは十分な宛先バッファに収まる場合でも、入力全体の長さを基にした計算により早期にエラー判定されていました。
byte[] input = Encoding.UTF8.GetBytes(" zA== ");
Base64Url.DecodeFromUtf8(input, new byte[1]); // 修正前: DestinationTooSmall エラー
// 修正後: 正常に1バイト書き込み
変更内容
| ファイル | 変更内容 |
|---|---|
Base64DecoderHelper.cs |
DestinationTooSmallExit ラベルで ignoreWhiteSpace が真の場合、InvalidDataExit へのフォールスルーを追加。ホワイトスペース除去後に宛先サイズを再評価可能に |
Base64DecoderUnitTests.cs |
ホワイトスペース含む小さな宛先へのデコードテスト(105行追加) |
Base64UrlDecoderUnitTests.cs |
先頭/末尾/埋め込みホワイトスペースシナリオのテスト、ホワイトスペースのみ入力テスト(131行追加) |
パフォーマンスへの影響
影響なし。修正は条件分岐ロジックの改善であり、実行パスの追加ではなく、ホワイトスペース存在時の正常系処理へのルーティング修正です。
関連Issue
#123222
その他
- Base64とBase64Urlは同じ基盤実装を共有しているため、両方に同じ修正が適用されます
- バグは
maxSrcLengthの計算がホワイトスペースを含めた全体長に基づいており、宛先が小さい場合に早期にエラー判定されることが原因です - 修正により、ホワイトスペース除去後の実データが実際に宛先に収まるかを正しく判定するようになりました
#123119 [release/10.0] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年01月13日 05:48:23(UTC)
- マージ日時: 2026年01月16日 17:41:34(UTC)
- ラベル: Servicing-approved area-codeflow
概要
このPRは.NET 10.0リリースブランチへのコードフロー更新で、VMR(Virtual Machine Repository)からのソースコード変更と依存関係の更新をもたらします。主に開発ツールチェーン、コード分析ライブラリ、ビルドタスク、NuGetパッケージなど多数のコンポーネントが更新されています。
変更内容
- NuGet.config: NuGetフィード設定の更新
- eng/Version.Details.props/xml: 依存関係バージョンの更新(29行変更)
- global.json: SDK/ランタイムバージョンの更新
- ビルドテンプレート: CI/CDパイプライン関連の設定更新
- publish-build-assets.yml
- post-build.yml
- pool-providers.yml
主な依存関係の更新:
- Microsoft.CodeAnalysis: 5.0.0-2.26057.111 → 5.0.0-2.26062.108
- Microsoft.DotNet系ツール: 複数パッケージが26057.111 → 26062.108へ更新
- NuGet: 7.0.2-rc.5811 → 7.0.2-rc.6308(Frameworks、Packaging、ProjectModel、Versioningなど)
- System.Text.Json、System.Reflection.Metadata: 10.0.3へ更新
パフォーマンスへの影響
影響なし。このPRは主に開発ツール、ビルドシステム、分析ツールの依存関係更新であり、ランタイムパフォーマンスへの直接的な影響はありません。
関連Issue
なし
その他
- このPRはコードフロー自動更新(dotnet-maestrobot作成)のため、個別の機能実装ではなく、複数のリポジトリ(arcade、aspnetcore、runtime、sdk、templating、windowsdesktop、winforms)からの定期的な変更同期です
- 2026年1月13日に生成されたビルド(20260112.8)からの更新
#123021 [Wasm RyuJIT] Implement 8 and 16-bit loads/stores; implement indirect loads/stores
- 作成者: @kg
- 作成日時: 2026年01月09日 00:57:57(UTC)
- マージ日時: 2026年01月16日 03:34:02(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssembly RyuJIT コンパイラに8ビットおよび16ビットのロード/ストア命令と間接ロード/ストア命令を実装しました。同時に、最大無チェックnullオブジェクトオフセットを0に設定することで、nullチェックがより適切に配置されるようにしています。
変更内容
- src/coreclr/jit/codegenwasm.cpp (+64行): 8/16ビットロード/ストアおよび間接ロード/ストア命令の生成ロジックを実装
- src/coreclr/jit/instr.cpp (+14行): 命令定義関連の追加実装
- src/coreclr/jit/instrswasm.h (+7行): WebAssembly固有の命令定義ヘッダーの拡張
パフォーマンスへの影響
メモリ操作の効率化により、より細粒度なデータアクセスが可能になります。間接ロード/ストア命令の実装により、複数のインダイレクション参照時のコード生成が最適化されることが期待できます。ただし具体的なベンチマーク結果は提供されていません。
関連Issue
なし
その他
- 作成者は間接(IND)実装の正確性について懸念を表明しており、レビュー過程でこの点について複数回の指摘と修正が行われた可能性があります
- nullオブジェクトオフセット最大値の変更(0に設定)は、ジェネレートされるnullチェックコードの配置戦略に影響する重要な変更です
- WebAssembly ターゲット向けのコードジェネレーション改善として、ランタイムのバイナリサイズおよびセキュリティ(nullチェック強化)に利益をもたらす可能性があります
#123015 Bring throw helpers to PUSH_COOP_PINVOKE_FRAME plan
- 作成者: @am11
- 作成日時: 2026年01月08日 22:04:27(UTC)
- マージ日時: 2026年01月16日 13:32:12(UTC)
- ラベル: area-VM-coreclr community-contribution
概要
このPRは、P/Invoke フレーム関連の例外処理に throw helper を導入する変更です。PUSH_COOP_PINVOKE_FRAME マクロが例外をスローする際に、専用の throw helper 関数を使用することで、アセンブリコードの肥大化を抑制し、メンテナンス性を向上させています。複数のプラットフォーム(x86、x64、ARM、ARM64、LoongArch64、RISC-V)のアセンブリマクロを統一的に更新する大規模な変更です。
変更内容
- excep.cpp:P/Invoke フレーム関連の新しい throw helper 関数を追加(
ThrowPinvokeFrameExceptionなど) - asmhelpers.S/asmhelpers.asm:各プラットフォームで throw helper を呼び出すアセンブリコードを実装
- asmmacros.inc/asmmacros.h:
PUSH_COOP_PINVOKE_FRAMEマクロを修正し、インライン例外スロー処理から throw helper 呼び出しへ変更 - frames.h:フレーム関連マクロの調整
- jithelpers.cpp:JIT helper の例外処理ロジック更新
パフォーマンスへの影響
改善点:
- アセンブリコードサイズが削減。複数プラットフォームで重複していた例外処理コードが単一の throw helper に統合されることで、コードジェネレーションサイズが低下
- P/Invoke 呼び出しが成功する通常パスでは追加のオーバーヘッドなし
懸念点:
- 例外発生時のみ throw helper 関数呼び出しが発生するため、エラーパスではわずかなレイテンシ増加の可能性あり(ただし、例外発生時のため実用上の影響は軽微)
関連Issue
その他
- 複数プラットフォーム(ARM、ARM64、x86、x64、LoongArch64、RISC-V)の一貫性を維持する大規模リファクタリング
- アセンブリマクロの変更により、将来の例外処理ロジック修正が一箇所の C++ コード更新で済むようになり、保守性が向上
#122382 [RISC-V] correct comments in emitLoadImmediate
- 作成者: @credo-quia-absurdum
- 作成日時: 2025年12月10日 12:17:13(UTC)
- マージ日時: 2026年01月16日 09:34:47(UTC)
- ラベル: area-CodeGen-coreclr community-contribution arch-riscv
概要
RISC-V JITコンパイラのemitLoadImmediate関数内のコメントの正確性と一貫性を改善するPRです。不正な投機的コメントを削除し、実装との不一致を修正し、コメントスタイルをリポジトリ規約に統一しました。コード生成ロジック自体の変更はなく、ドキュメンテーションの改善のみです。
変更内容
- src/coreclr/jit/emitriscv64.cpp:
emitLoadImmediate関数のコメントを修正- 不正な投機的記述(「小さいオフセットが最少命令数を生成する」)を削除し、反例を提供
- 条件式(3)のコメントを実装に合わせて修正:
(b - a) - (y - x) >= 11から(y - x) - (b - a) >= 11に変更 - ブロックコメント形式を
/* */から//に統一(リポジトリ規約に準拠) - 複合条件
(1) && ((2) || (3))を明確に記述
パフォーマンスへの影響
影響なし。本PRはコメントとドキュメンテーションの改善のみで、実装ロジックは変更されていません。
関連Issue
#84834の一部(Samsung関連のRISC-V改善プロジェクト)
その他
- 著者が最適化アプローチ(各モード正確な命令数計算と選択)を試験的に検証した結果、64ビット空間をサンプリングした場合でも約100万ケースに1ケース程度の改善率のため、既存ヒューリスティクスの維持が現実的であることが確認されています
- JITの定数ロード生成ロジックは5命令超過時に
emitDataConstへフォールバックするため、実務的影響は限定的です