Mercurial > hg > Papers > 2017 > mitsuki-thesis
diff final_main/chapter4.tex @ 6:5b368e14bb64
update
author | mir3636 |
---|---|
date | Tue, 14 Feb 2017 18:48:26 +0900 |
parents | 6d00f6c9bb8a |
children |
line wrap: on
line diff
--- a/final_main/chapter4.tex Mon Feb 13 20:29:46 2017 +0900 +++ b/final_main/chapter4.tex Tue Feb 14 18:48:26 2017 +0900 @@ -16,7 +16,7 @@ \begin{description} \item[libast]\mbox{}\\ - Abstract Syntax Tree (AST) や C の型等をクラスとして利用できるようにしたライブラリ、AST の説明は後述する。% AST は ``-Xclang -ast-dump'' オプションを付加することで表示できる. + Abstract Syntax Tree (AST) や C の型等をクラスとして利用できるようにしたライブラリ。%、AST の説明は後述する。% AST は ``-Xclang -ast-dump'' オプションを付加することで表示できる. \item[liblex]\mbox{}\\ 字句解析ライブラリ、マクロの展開等の前処理系も担当する。 \item[libparse]\mbox{}\\ @@ -29,6 +29,23 @@ ドライバ、各ライブラリを用いて求められた処理を行う。 \end{description} +これを踏まえて clang が C のコードを LLVM IR に変換する処理について説明する。 +clang が C のコードを LLVM IR に変換する処理の過程を簡潔に図示したものである。 +以下の図 \ref{fig:clangProcess} は clang が C のコードを LLVM IR に変換する処理の過程を簡潔に図示したものである。 +clang は C のソースコードを受け取るとまずその解析を libparser による parser を用いて行い、libsema を用いて 解析結果から AST を構築する。 +そしてその AST を libcodegen を用いて LLVM IR に変換する。 + +%AST はソースコードの解析結果を保持したツリーである。 +%AST は “-Xclang -ast-dump” というオプションを付加することで表示することもできる。 + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.35}{\includegraphics{fig/clangProcess.pdf}} + \end{center} + \caption{clang の 処理過程} + \label{fig:clangProcess} +\end{figure} + \section{LLVM の基本構造} LLVM は LLVM IR をターゲットのアセンブリ言語に直接的に変換を行うわけではない。 LLVM では、最適化や中間表現の変換を何段階か行う。