Mercurial > hg > Papers > 2012 > nobu-thesis
annotate paper/chapter2.tex @ 39:a6540714dda9 draft
modify presen
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 28 Feb 2012 20:01:28 +0900 |
parents | be5b510b6d44 |
children |
rev | line source |
---|---|
4
be5b510b6d44
add some files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
1 \chapter{GCC, The Gnu Compiler Collection} |
0 | 2 \section{GCC とは} |
3 | |
4
be5b510b6d44
add some files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
4 |
0 | 5 \subsection{cc1} |
39 | 6 GCC はコンパイルだけではなく, アセンブルとリンクも行う. |
4
be5b510b6d44
add some files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
7 |
be5b510b6d44
add some files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
8 |
0 | 9 \section{GCC の内部表現} |
2 | 10 GCC-4.6 への実装の前に, GCC で扱われる内部表現について触れておく. |
11 | |
12 GCC は内部で Generic Tree, GIMPLE Tree, Tree SSA, RTL という4つの内部表現を扱う(GIMPLE と SSA は一緒に考えられることもある). | |
13 それぞれが | |
14 読み込んだソースコードは Generic Tree, GIMPLE Tree, Tree SSA, RTL の順に変換されていき, | |
15 最後にアセンブラ言語へと出力される. | |
16 図\ref{fig:ir}は GCC がソースコードを読み込みアセンブラ言語出力までの流れを表した図である. | |
17 | |
18 | |
19 \begin{figure}[htpb] | |
20 \begin{center} | |
21 \includegraphics[width=100mm]{figure/ir.pdf} | |
22 \end{center} | |
23 \caption{GCC によるコンパイルの一連の流れ} | |
24 \label{fig:ir} | |
25 \end{figure} | |
26 | |
27 | |
0 | 28 \subsection{Generic Tree} |
2 | 29 ソースコードより読み込んだ関数の情報を木構造で表したものが Generic Tree となる. |
30 関数の戻値,引数,変数の型,条件式とプログラムの処理全てが木構造で表される. | |
31 | |
32 CbC の実装ではパースの部分からこの Generic Tree 生成の部分に手が加わっている. | |
33 | |
0 | 34 \subsection{GIMPLE Tree} |
2 | 35 Generic Tree で表現されたデータは GIMPLE Tree に変換される. |
36 GIMPLE Tree は Generic Tree より制約がかかった状態で作成された構文木となる. | |
37 制約は「1つの枝につく子が3つ以下になるように分解」等といったもので, | |
38 GIMPLE Tree へと変換されたデータは Generic Tree より簡単な命令で表されることになる. | |
39 CbC の実装では特に修正は加えていない. | |
40 | |
41 | |
42 | |
0 | 43 \subsection{SSA} |
2 | 44 Tree SSA (Static Single Assignment) は, プログラムの中で |
45 変数が一度しか代入されないように変換させた構文木になる. | |
46 SSA に変換することで, 様々な最適化が行いやすくなる. | |
47 こちらも GIMPLE 同様 CbC の実装では特に修正は加えていない. | |
48 | |
49 | |
50 | |
0 | 51 \subsection{RTL} |
2 | 52 Tree SSA は解析が行われた後 RTL へと変換される. |
53 RTL はレジスタの割り当てといった低レベルの表現であり, アセンブラとほぼ同じ命令の表現を行うことができる. | |
54 プログラム内部では RTL も木構造で表される. | |
55 | |
56 CbC における継続は,この RTL への変換で行われる最適化の1つ Tail Call Elimination が重要となってくる. |