第 2 部 新時代コンパイラLLVMを定番ボードBeagleBone Blackで試す 第 6章 試しながらステップ・バイ・ステップ! Cortex-A 時代の新コンパイラ LLVM/Clang のしくみと使い方 村井 和夫 最適化に関する処理 言語に関する処理 LLVM プロセッサに関する処理 書き込みファイル バックエンド x86 Clang フロントエンド (プリプロセッサ含む) 最適化 (Optimizer) ARM アセンブラ リンカ 実行可能ファイル PowerPC 中間言語に 対する最適化 … Cプログラム opt lld llvm-mc Clang -emit-llvm -S -c llc 中間言語 LLVM IR 中間言語 LLVM IR gld/gold gas アセンブリ・ コード オブジェクト・ コード 次の3種類の表現形式がある ・compiler-IR形式(メモリ展開用) ・ビット・コード表現形式(バイナリ) ・アセンブリ言語表現形式(テキスト) 図 1 LLVM/Clang コンパイル環境の全体構成 第 2 部では 2000 年より静的・動的プログラミング言 語の動的コンパイル技術を調査する研究基盤として開 発された LLVM について紹介します.実際に LLVM を使いながら内部の構造を見ていきます.また,GCC と LLVM の ARM クロス開発環境を構築し,生成され た実行可能ファイルを Cortex-A(BeagleBone Black) や Cortex-M(本誌 2012 年 6 月号付属 FM3 マイコン基 板)などで実際に動かしてみます. 全体構成 LLVM(広義のコンパイラ)の全体構成を図 1 に示 します.全体の処理内容は第 1 章でも紹介した従来の GCC とほぼ同じですが,コンパイラ本体部周辺の構 造が異なります. LLVM では GCC と同様,各段階ごとに個別にコン パイルすることができます.各段階で行う処理や個別 にコンパイルする際に使用する実行コマンドなどを 2015 年 3 月号 表 1 に示します. LLVM は GCC と異なり,コンパイラ本体部の三つ の機能であるフロントエンド,最適化,バックエンド がそれぞれ独立した構造となっています. ● フロントエンド:言語ごとに用意するプログ ラミング言語 - コンパイラ用言語変換ソフト プログラミング言語に関する処理を行うフロントエ ン ド 部 は,LLVM か ら 完 全 に 独 立 し て い ま す.C/ C++ と Objective-C/C++ のフロントエンド部として Clang というコンパイラ・フロントエンドが LLVM と 共 に 提 供 さ れ て い ま す.Clang は ソ ー ス コ ー ド を LLVM IR という LLVM で用いられる中間言語に変換 します. ● 最適化:優れた中間言語による独立構造な処 理部 LLVM は,Clang などのフロントエンドで生成され 43
© Copyright 2024 ExpyDoc