You can't fool the optimizer

2025/12/03 21:14

You can't fool the optimizer

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

要約

要約(300文字以内)

ARM用にコンパイルされた疑わしい符号なし加算関数群は、実際にはすべて単一の

add w0, w1, w0
命令へ最適化される。

  1. コンパイラは中間表現(IR)でコードを標準化し、数学的等価性を認識できる。
  2. 難読化や再帰呼び出しでも同一の最適化対象として扱われ、意図した計算結果を保持する。
  3. こうしたパターン認識は「超能力」のように頑健で、不要な複雑さを自動的に削除する。

重要ポイント

  • IRによる正規化が鍵
  • 単一命令への最適化例
  • コンパイラの頑健なパターン認識能力

本文

私自身が執筆し、LLM が校正した記事です。
詳細は最後に記載しています。

デバッガでコードをステップ実行しているとき、複雑に見えるループが実際には 1 つの命令として実行されることがあります。コンパイラは難読化を透過的に 解釈し、結局は「明らかな」コードを生成します。

以下は ARM 用にコンパイルされた、極めて疑わしい符号なし加算ルーチンの集まりです(昨日の加算例とは異なります)。

いずれも

x + y
を返すという点では大きく異なる実装ですが、 コンパイラはそれらをすべて見抜き、最終的には単一の
add w0, w1, w0
命令に置き換えます。
再帰呼び出しを行う
add_v4
でさえも同じ命令へと最適化されます。

パターンを認識して効率的な代替案に差し替えるこの能力は、 コードが非常に難読化されていても、コンパイラが正しく動作するという 「超能力」です。プログラマは意図を明示した形でコードを書き、 生成はコンパイラに任せることで、多くの場合適切な最適化が行われます。

では、コンパイラはどのようにしてこれらのパターンを検出するのでしょうか? 「数値を加算するおふざけ的手段」のデータベースを保持しているわけではありません。
内部では、あなたのコードを中間表現(IR)へ変換します。これは解析しやすい 抽象化された簡略化版です。たとえば

add_v3
while
ループは、 「y を x だけ増やしてから y を返せ」という形に変換され、これを 「x + y を返せ」と数学的に同等であることが認識されます。このように さまざまなコードパターンを標準化・正規化した形式へ変換するプロセスこそ、 コンパイラがそれらを同一視できる理由です。
コード生成時には、4 つの関数すべてが同じ最適化対象として扱われます。

このパターン認識は驚くほど頑健であり、実際に書きたくないような コードも快く最適化してしまいます。シリーズを通して、この正規化がどこまで 有効かを探ります。
この記事に付随する動画もご覧ください。

この投稿は Advent of Compiler Optimisations 2025 の第3日目で、25 日間にわたる コンパイラがコードを変換していく過程を追うシリーズです。 執筆者は Matt Godbolt(人間)で、LLM と人間によってレビュー・校正されています。

Compiler Explorer を Patreon や GitHub でサポートするか、CE 製品を Compiler Explorer Shop から購入してください。

2025 年 12 月 3 日 CST 午前 6 時に投稿しました。

同じ日のほかのニュース

一覧に戻る →

2025/12/04 3:40

Ghostty is now non-profit

Ghostty は501(c)(3)非営利団体 Hack Club の財務スポンサーシップを受け、税優遇とコンプライアンスを確保しつつ無料・オープンソースで提供されます。 重要ポイント 1. **持続可能性**:個人依存から脱却し、寄付で運営を安定化。 2. **信頼性**:非営利体制により資金の乱用や商業転売が防止。 3. **公共利益**:ターミナル技術を公益優先で発展させ、広範な採用促進。

2025/12/03 5:33

Valve reveals it’s the architect behind a push to bring Windows games to Arm

SteamがArmチップ向けPCゲームの移植を支援し、Steam Frameは実質的にAndroidデバイスやノートPCでSteamを遊べるトロイの木馬。FexとProtonがx86コードをARMへJIT変換し、開発者は移植作業を減らせる。重要ポイント 1. ValveはArm向けオープンソース技術に資金提供している。 2. Fex+ProtonでWindowsゲームをスマホやノートPC上で実行可能。 3. Steam Frameは「VRヘッドセット」ではなく、ArmデバイスでSteam体験を拡張するためのハードウェア。

2025/12/04 2:44

Reverse engineering a $1B Legal AI tool exposed 100k+ confidential files

**要約(300字以内)** FilevineのAI法務プラットフォームで、サブドメイン `margolis.filevine.com` にアクセスすると、Box API管理者トークンが返る脆弱性を発見。1) **発見と報告**:2025年10月27日から責任ある報告を行い、Filevineは迅速に修正。2) **技術的詳細**:エンドポイント `/prod/recommend` に `{"projectName":"Very sensitive Project"}` を送るだけで、全Boxファイルシステムへの完全アクセス権が得られた。3) **リスクと教訓**:機密文書やHIPAA保護資料を数百万件抽出可能となり、法律事務所・クライアントに深刻被害。AI法務テック企業はデータ保護体制を徹底すべきである。