📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 155行目: | 155行目: | ||
*: <br> | *: <br> | ||
*: 大規模なソフトウェアシステムの性能向上を目指す場合は、特に有用なツールである。 | *: 大規模なソフトウェアシステムの性能向上を目指す場合は、特に有用なツールである。 | ||
<br><br> | |||
== LLVMツールチェーン と GNUツールチェーンの比較 == | |||
<center> | |||
{| class="wikitable" | |||
! 項目 !! LLVM !! GNU | |||
|- | |||
! コンパイラ<br>フロントエンド | |||
| Clang (C言語)<br>Clang++ (C++言語) | |||
| gcc (C言語)<br>g++ (C++言語) | |||
|- | |||
! コンパイラ<br>バックエンド | |||
| LLVM<br>(中間表現処理・最適化・コード生成) | |||
| GCCバックエンド<br>(GCC内部に組み込まれている) | |||
|- | |||
! アセンブラ | |||
| llvm-as | |||
| as (GNU Assembler) | |||
|- | |||
! リンカ | |||
| lld (LLVM Linker) | |||
| ld (GNU Linker) | |||
|- | |||
! その他ツール | |||
| llvm-objdump, llvm-ar, llvm-nm など | |||
| objdump, ar, nm など<br>(binutilsに含まれる) | |||
|- | |||
! 設計思想 | |||
| モジュール化・ライブラリ指向<br>再利用可能 | |||
| 統合的・密結合 | |||
|- | |||
! 他言語での利用 | |||
| Rust, Swift, Julia など<br>多数の言語で採用 | |||
| 主にC/C++/Fortran系 | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" style="width:70%; text-align:center;" | |||
|+ コンパイルからリンクまでの流れ | |||
! style="width:15%; background-color:#e8e8e8;"| ステップ | |||
! style="width:42.5%; background-color:#dae8fc;"| LLVMツールチェーン | |||
! style="width:42.5%; background-color:#f8cecc;"| GNUツールチェーン | |||
|- | |||
! style="background-color:#fff2cc;"| 入力 | |||
| colspan="2" style="background-color:#fff2cc;"| ソースコード (.c, .cpp) | |||
|- | |||
! style="background-color:#e3f2fd;"| ① 解析 | |||
| style="background-color:#e3f2fd;"| Clang / Clang++<br><small>字句・構文・意味解析</small> | |||
| style="background-color:#ffebee;"| gcc / g++<br><small>字句・構文・意味解析</small> | |||
|- | |||
! style="background-color:#f3e5f5;"| ② 中間表現 | |||
| style="background-color:#e3f2fd;"| LLVM IR<br><small>中間表現形式</small> | |||
| style="background-color:#ffebee;"| gcc内部形式<br><small>RTL/GIMPLE</small> | |||
|- | |||
! style="background-color:#fff3e0;"| ③ 最適化 | |||
| style="background-color:#e3f2fd;"| LLVM Optimizer<br><small>各種最適化パス</small> | |||
| style="background-color:#ffebee;"| gcc最適化<br><small>内部で最適化処理</small> | |||
|- | |||
! style="background-color:#e0f2f1;"| ④ コード生成 | |||
| style="background-color:#e3f2fd;"| LLVM Backend<br><small>機械語生成</small> | |||
| style="background-color:#ffebee;"| gcc Backend<br><small>機械語生成</small> | |||
|- | |||
! style="background-color:#fce4ec;"| ⑤ アセンブル | |||
| style="background-color:#e3f2fd;"| llvm-as<br><small>LLVM Assembler</small> | |||
| style="background-color:#ffebee;"| as<br><small>GNU Assembler</small> | |||
|- | |||
! style="background-color:#f0f0f0;"| 中間生成物 | |||
| colspan="2" style="background-color:#f0f0f0;"| オブジェクトファイル (.o) | |||
|- | |||
! style="background-color:#e8f5e9;"| ⑥ リンク | |||
| style="background-color:#e3f2fd;"| lld<br><small>LLVM Linker</small> | |||
| style="background-color:#ffebee;"| ld<br><small>GNU Linker</small> | |||
|- | |||
! style="background-color:#c8e6c9;"| 出力 | |||
| colspan="2" style="background-color:#c8e6c9;"| 実行ファイル (a.out, .exe等) | |||
|} | |||
</center> | |||
<br> | |||
* LLVM | |||
*: 各段階が独立したモジュールとして動作し、LLVM IRという共通の中間表現を使用 | |||
* GNU | |||
*: フロントエンドからバックエンドまでgccの中で統合的に処理される | |||
<br><br> | <br><br> | ||