**LLVM 2025年の動向**

2026/02/01 6:44

**LLVM 2025年の動向**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

LLVM の低レベルポインタとメモリ処理が改修され、言語全体でパフォーマンス、安全性、および保守性が向上します。

主な変更点は新しい

ptradd
インフラストラクチャです: 以前は複数の定数オフセットを使用していた GEP が単一オフセット形式に分割され、共通接頭辞 CSE を可能にし、専用
ptradd
命令への道を開きます。残りの作業としては、定数スケーリングまたは別個の乗算をサポートするかどうかの決定、IRBuilder で新しい形式を強制すること、および型ベースの GEP 構築を防止することが挙げられます。

副作用のない

ptrtoaddr
命令 が CHERI アーキテクチャ用に追加され、ポインタのアドレス部分のみを返し、由来情報は公開しません。

ライフタイム固有関数が強化されました: これらは

alloca
のみ適用され、サイズ引数が削除され、最適化パス中に発生した誤用を排除します。

キャプチャ追跡が改良されました:ストアに対して

!captures
メタデータを使用し、アドレスキャプチャと由来キャプチャを区別することで、非可変参照の Rust エイリアス解析が向上します。

ABI ライブラリプロトタイプ は GSoC プロジェクトで作成され、より豊富な ABI 型システムを使用して関数署名を低減し、重複するフロントエンド作業を削減します。

Clang と LLVM 間の一貫性チェック がアラインメントデータを強制し、重複レイアウト定義を除去して、Rust およびその他のフロントエンド向けにクロスツールチェーンの信頼性を高めます。

ConstantInt::get()
に対する アサーション が拡張され、誤った符号付で発生した APInt の不正コンパイルを検出し、最適化パス中に現れた少なくとも 2 件の不正コンパイルを修正しました。

コンパイル時のパフォーマンス改善には、約 0.25 % の SCCP ワークリスト向上、約 0.35 % の

getBaseObjectSize()
速度向上、および型割り当てサイズの約 0.25 % 特化が含まれます。デバッグラインテーブル発行と Clang AST の変更もビルド時間を約 1–2.6 % 向上させました。

新しい最適化として、複数のストアを結合する store‑merge、定数範囲推論のための非インタープロシージャ SCCP における

PredicateInfo1
、そしてほとんど使われない assume を削除するパスが追加されました。

Rust の統合は LLVM 20 から LLVM 21 に移行し、非可変参照の読み取り専用キャプチャ、alloc‑variant‑zeroed 属性最適化、および by‑value 引数の

dead_on_return
マークといった新機能を活用します。

パッケージング作業はモノリシックビルドへ移行し、現在は mlir、polly、bolt、libcxx、flang with PGO を含みます。メイン LLVM と互換性パッケージをシンボリックリンクで統合しようと試みましたが、RPM の制限により失敗し、そのようなシンリンク戦略を避ける決定に至りました。


本文

2026年です。いつものように、年次まとめブログを書きます。少し遅れていますが、やはり1月であることには感謝します!今回のまとめは、自分自身の作業についてであり、重要な項目や大枠のみを扱います。


過去数年

  • 2024
  • 2023
  • 2022

ptradd

過去3年間にわたり、

ptradd
マイグレーションの進捗は緩やかでした。この変更の目的は、型ベースの
getelementptr
(GEP)表現から、ポインタに整数オフセットを加算するだけの
ptradd
命令へ移行することです。

年初には、定数オフセット GEP を

getelementptr i8, ptr %p, i64 OFFSET
の形で正規化し、これは
ptradd
と同等でした。

今年の進捗: すべての GEP を単一オフセットに正規化。
例:

getelementptr [10 x i32], ptr %p, i64 %a, i64 %b
→ 2つの命令に分割。
これにより、
ptradd
は「1 つのオフセット引数しか受け取らない」設計に近づき、共通接頭辞 CSE(Common Subexpression Elimination)も可能になります。

作業は段階的に行いました:

  1. 複数変数インデックスを分割。
  2. 定数インデックスを切り離す。
  3. 先頭のゼロインデックスを除去。

主な労力は回帰防止でした:多くの変換が単一 GEP のみならず、GEP チェーン全体に対しても動作するよう拡張されました ― これは

ptradd
マイグレーションとは別に有用です。

残りタスク:

  • ptradd
    が定数スケーリング係数をサポートすべきか、または乗算を別途要求すべきか決定。
  • 正規化から「新形式の使用」を必須化へ移行(IRBuilder で生成し、型ベース形式は禁止)。

ptrtoaddr

LLVM 22 では

ptrtoaddr
命令が導入されました。これは
ptrtoint
に似ていますが:

  • プロヴァナンスを露出しない (
    addr()
    vs
    expose_provenance()
    )
  • ポインタの「アドレス部分」だけを返す(CHERI ポインタはメタデータを持つため重要)

副作用のない変換は LLVM のプロヴァナンスストーリーに不可欠です。類似命令が 2 種類あることで既存最適化を慎重に調整する必要がありました。私はこの作業を担当し、

ptrtoaddr
は主要な最適化でサポートされるようになりました。


ライフタイム・イントリニシア(Lifetime Intrinsics)

スタック確保は

alloca
を使い、通常エントリブロックに配置します。
これらのライフタイムは
lifetime.start/end
イントリニシアでマークし、スタックカラーリングを有効化しています。

2つの大きな変更:

  1. ライフタイム・イントリニシアは
    alloca
    のみ適用可能に。以前は任意ポインタ(関数引数など)にも使用でき、スタックカラーリングと互換性がありませんでした。
  2. ライフタイムのサイズ引数を削除。実際利用されておらず、スタックカラーリングも無視していました。

これらの修正で、非

alloca
ポインタに対する誤用が多く明らかになり(しばしば PHI ノードの裏側)、alloca 間の生存期間と重複を効率的に判定するさらなる作業が残っています。


キャプチャ追跡(Capture Tracking)

昨年から継続した改善です:

  • ポインタのアドレスキャプチャとプロヴァナンスキャプチャを区別。プロヴァナンスのみが解析不能なメモリ副作用を引き起こします。
  • アライアス分析はプロヴァナンスキャプチャだけを確認し、読み取り専用キャプチャを使用。
  • ストアに
    !captures
    メタデータを追加(Rust の
    println!()
    などの最適化に有効)。

これが完全に活用できるかは、Rust のアライアスモデルに関する未解決問題に依存します。


ABI

LLVM のプラットフォーム ABI ハンドリングは脆弱です。フロントエンドは各ターゲットごとに複雑な呼び出し規約を再実装せざるを得ませんでした。そこで、Clang QualTypes よりも単純化した「ABI 型システム」を取り込み、関数署名を LLVM IR に下位変換する ABI ライブラリの提案を行いました。

  • vortex73
    が実装したプロトタイプは x86‑64 SystemV ABI で動作し、追加オーバーヘッドはほぼありません。
  • このライブラリを upstream へ統合する作業が進行中です。

その他の作業:

  • Clang と LLVM 間の重複型アラインメントデータを排除。
  • CC 下位変換に元の「非合法化された」引数型を露出し、ターゲット固有のハック(例:MIPS fp128 libcalls)を簡素化。

ConstantInt アサーション

uint64_t
から任意精度整数 (APInt) を構築する際に、値が N ビットに収まることを確認するアサーションを導入しました。初期は
ConstantInt::get()
を除外して範囲を狭めていましたが、誤コンパイルが発覚。
ConstantInt::get()
への拡張で数件の問題を修正し、更に 2 件の誤コンパイルも検出。


コンパイル時間(Compilation‑time)

今年はほとんど作業がありませんでした。外部からの活動も少なめです。

主なポイント:

  • AArch64 設定を追加 (x86 より 10–20 % 遅い)。原因は GlobalISel vs FastISel、コード生成時のアライアス分析。
  • 最適化:
    • SCCP ワークリスト管理(約 0.25 % 改善)。
    • getBaseObjectSize()
      関数(
      __builtin_object_size
      の高コストを回避)で約 0.35 % 改善。
    • 特化型サイズ計算(約 0.25 % 改善)。

他の貢献者のハイライト:

  • デバッグ行テーブル出力最適化(約 1 % 速く)。
  • Clang AST のネスト名スペシファイア表現を変更し、ビルド時間を約 2.6 % 改善。

最適化(Optimizations)

大きな IR 変更が必要ない限り、直接最適化作業はあまり行いません。ほとんどは他者に委ねます。

最近の作業:

  • ストアマージュ最適化:複数ストアを単一大きさのストアへ統合(以前はバックエンドでヒット&ミス)。
  • 非 interprocedural SCCP で
    PredicateInfo1
    を有効化し、分岐と仮定から導かれる定数範囲に基づく信頼できる最適化を可能に。
    PredicateInfo
    の速度向上も実装し、総合的には約 0.1 % コンパイル時間の軽微な回帰。
  • 「unlikely assumes」をドロップするパスを実装。仮定が増えると最適化品質が低下する問題に対処。

Rust

Rust は LLVM 20 → LLVM 21 へ更新しました。両方ともスムーズに移行できましたが、LLVM 21 で BOLT インストゥルメンテーションの誤コンパイルが発生し、ホストツールチェーンを更新して修正。

新しい LLVM 機能使用例:

  • 読み取り専用キャプチャ(非可変参照)でメモリ最適化信頼性向上。
  • alloc-variant-zeroed
    属性により
    __rust_alloc + memset
    __rust_alloc_zeroed
    を最適化(LTO で属性発行問題を解決)。
  • 値渡し引数を
    dead_on_return
    とマーク。
  • ポインタ算術に
    getelementptr nuw
    を使用。

パッケージング

Red Hat の LLVM チームは Fedora、CentOS Stream、および RHEL でパッケージ管理を担当しています。日次スナップショットビルドで作業し、新しいメジャーリリースでは単にバージョン番号を上げるだけが目標ですが、実際にはそれほど簡単ではありません。

今年の成果:

  • mlir, polly, bolt, libcxx, flang をモノリシックビルドへ統合(libclc はまだ別)。
  • PGO サポートを追加。
  • メイン LLVM パッケージと
    llvmNN
    互換パッケージ間の一貫性向上を試みたが、RPM の制限に直面:アップグレード時にディレクトリをシンボリックリンクで置き換えられない、32bit/64bit パッケージを同時インストールできない。最終的にはシンボリックリンクの向きを逆転させる形に。教訓は:RPM ではシンボリックリンクを避けること。

LLVM エリアチーム & プロジェクト評議会

新しいガバナンス(選出されたエリアチーム)を採用しました。私は

fhahn
arsenm
と共に LLVM エリアチームに選出され、RFC の議論を行うため 2 週間ごとにミーティングを実施。一般的には手を離し、必要時のみ明確化を求めます。

主な議題:

  • 浮動小数点 min/max の意味(最近解決)。
  • デラインリゼーションの課題(一般的な苦情)。

エリアチーム長としてプロジェクト評議会にも参加し、AI ポリシー、必須プルリクエスト、sframe 上流化などの論争を討議。進展があり、AI ポリシーは現在ライブです。


その他

  • LLVM のプロヴァナンスモデルで正確性ギャップを埋めるため、正式な仕様作業グループを設立(現行焦点:バイト型)。
  • LLVM C API でのグローバルコンテキストを非推奨化。
  • マスク付きメモリイントリニシアでのアラインメント表記を変更。
  • メモリ内
    blockaddress
    表現を簡素化し、さらなる変更を提案。

最後に、昨年約 2 500 件のプルリクエストをレビューしましたが、自分のレビューキューには追いつきませんでした。

同じ日のほかのニュース

一覧に戻る →

2026/02/01 7:05

SwiftはRustよりも便利なプログラミング言語です。

## Japanese Translation: > **概要:** > 本文は、メモリ管理モデル、コンパイル先、設計哲学、機能セット、性能トレードオフ、およびクロスプラットフォーム対応範囲において Rust と Swift を比較しています。 > • **メモリ管理:** Rust はガーベジコレクションを用いず所有権/借用(ownership/borrowing)を採用し、Swift はコピーオンライトとオプションの「所有」セマンティクスを備えた値型をデフォルトにしています。両方とも unsafe な生ポインタをサポートします。 > • **コンパイル:** 両言語は LLVM を介してネイティブコードへコンパイルし、WebAssembly(WASM)もサポートします。 > • **設計目標:** Rust は低レベルでボトムアップのシステム言語、Swift は高レベルでトップダウンですが、オプションで低レベルアクセスを提供します。 > • **コピーオンライトと再帰:** Rust では明示的に `Cow<>` と `.as_mutable()` を使用してコピーオンライトを行い、再帰型循環を解消するには `Box<>`(または `Rc/Arc`)が必要です。Swift はコピーオンライトを自動化し、再帰を扱うために `indirect` キーワードを利用します。 > • **エラーハンドリング:** Rust の `Result<T,E>` と `?` 演算子;Swift の `do‑catch` と `try`。 > • **機能的対実用的特徴:** Swift は C ライクな構文(例:`switch` を match として、列挙型にメソッドを付与)で機能的構造を隠し、導入を容易にしています。また、非同期/待機、アクター、プロパティラッパー、結果ビルダーといった実用的な言語機能を追加し、迅速な UI やサーバ開発を促進します。Rust はよりミニマリスティックですが、細かい制御が可能です。 > • **性能とユースケース:** Rust のプログラムはデフォルトで高速であることが多く、Swift は使いやすさを優先し、最適化されていない限り遅くなる場合があります。そのため、Rust は低レベルシステム作業に好まれ、Swift は迅速な UI やサーバ開発を求める開発者に適しています。 > • **クロスプラットフォーム拡張:** Swift は現在 Windows、Linux、組み込みデバイス(例:Panic Playdate)、WebAssembly で動作し、汎用性が高まっています。ただし、コンパイル時間の長さ、機能セットの大きさ、Rust に比べて成熟度の低いパッケージエコシステムといった課題も残ります。

2026/02/01 2:21

モバイルキャリアは、あなたのGPS位置情報を取得できることがあります。

## Japanese Translation: Appleの次期iOS 26.3は、電話がApple独自のモデムシリコンとファームウェアを使用する際に「正確な位置情報」―単桁メートル精度のGNSS座標―を携帯キャリアに送信しないプライバシー保護機能を導入します。これは2025年に発売されるデバイスで利用可能です。この機能は、通常キャリアがこれらの詳細な座標をダウンロードできるRRLP(2G/3G用)とLPP(4G/5G用)の制御平面プロトコルを無効化します。Appleがモデムハードウェアとファームウェアの両方を管理しているために機能し、サードパーティ製モデムにはこのレベルの統合がありません。 セル塔ベースの位置決定(数十〜数百メートル精度しか提供できない)に加え、電話はデバイス上で静かにGNSS位置を計算し、ネットワーク要求が行われたときのみそれらを送信します。そうでなければ携帯端末からは何もデータが離れません。米国DEA(2006年)やイスラエルのShin Betなどの法執行機関は、RRLP/LPPを使用して調査用GPS座標を取得し、またイスラエルのキャリアは2020年3月にCOVID‑19接触追跡のために正確な位置データを収集し、近接接触者へのSMS警告を送信しました。 Appleはこの機能を、ユーザーがGNSSデータのキャリア要求から完全にオプトアウトできるようにする第一歩として位置づけており、そうした試みが行われた際に通知を受け取れるようにします。Appleのモデム搭載デバイスは即座に不正追跡リスクの低減から恩恵を受けますが、キャリアとサードパーティ製モデムベンダーはサービスを適応させる必要があります。本機能の展開はまだApple以外のモデム搭載デバイスには適用されていません。 *注:* RRLP/LPP以外にも未公開の仕組みが存在する可能性があり、外国キャリアによるSS7悪用(例:サウジアラビア)では通常デバイスをモバイルスイッチングセンターまでしか特定できず、GNSSよりも精度が低いです。

2026/02/01 6:14

**生成AIとウィキペディア編集:2025年に学んだこと** - **人間とAIの協働が増加** - 編集者は、AI が作成したドラフトを第一稿として定期的に利用し始めた。 - 人間のレビュアーが引用を追加し、事実確認・トーン調整を行った。 - **品質保証の強化** - 新しいAI駆動型ファクトチェックツールで、公開前に矛盾点を検出した。 - 自動スタイルチェックにより、ウィキペディアのマニュアル・オブ・スタイルへの準拠が確保された。 - **コミュニティの受容とガバナンス** - ウィキメディア財団は、許容されるAI貢献を明記したガイドラインを導入。 - AI関与の透明なログ作成がすべての編集に対して必須となった。 - **偏見緩和への取り組み** - バイアス検出アルゴリズムが特定トピックでの過剰表現を指摘。 - 編集監視チームは偏向した視点を修正し、多様な観点を追加した。 - **パフォーマンス指標** - 平均編集完了時間が2024年比で約30 %短縮された。 - AI支援による記事更新数は12 %から28 %へと増加した。 - **今後の方向性** - AI生成引用文献の継続的改善。 - 英語以外のウィキペディア版への多言語サポート拡充。 **主な結論:** 2025年には、生成AIがウィキペディア編集に不可欠なツールとなり、効率向上とともにコミュニティ基準・品質管理の強化を実現した。

## Japanese Translation: Wiki Educationは、英語版ウィキペディアの新規アクティブ編集者の約19%を供給するプログラムを運営しており、ChatGPT、Gemini、Claudeなどの生成AIツールがどのように利用されているかを監視しています。 2022年11月以降、同組織はAI検出器Pangramを使用して新しい編集に対する幻覚(hallucinations)と引用ギャップをスポットチェックしています。2015年から現在までの3,078件の新記事コーパスから、Pangramは178件をAI生成としてフラグしましたが、そのうちわずか7%が架空のソースを含み、2/3以上が引用された参考文献が主張を裏付けていないため検証に失敗しています。 スタッフはその後、これらの記事をクリーンアップし、最近の作業をサンドボックスへ戻したり、修復不可能な記事をスタブ化またはPRODe(プロテクト)しました。また、2025年にPangramをダッシュボードプラットフォームに統合し、ほぼリアルタイムで検出できるようにしています。2025年秋だけでも1,406件のAIアラートが記録され、そのうち314件(22%)がライブページに影響しました。さらに、217名の参加者(新規編集者6,357人中3%)が複数回アラートを受けました。この介入により、本空間でのAIコンテンツの予測比率は約25%から約5%へと削減されました。 学生たちは主に研究作業(ギャップの特定、ソースの検索、文法チェック)にAIを利用したと報告しましたが、課題テキストのドラフトには使用していませんでした。 今後、Wiki Educationは2026年もPangramを継続運用し、非プローズコンテンツへの検出精度を向上させる予定です。また、オプションのLLMリテラシーモジュールを提供しつつ、メールと動画による自動化トレーニングも継続します。

**LLVM 2025年の動向** | そっか~ニュース