狠狠撸
Search
Submit Search
LLVM overview 20110122
?
Download as ODP, PDF
?
8 likes
?
2,823 views
N
nothingcosmos
第叁回尝尝痴惭勉强会の尝尝痴惭概要资料
Read less
Read more
1 of 32
Download now
Downloaded 88 times
More Related Content
LLVM overview 20110122
1.
LLVM概要 URL: Outline
1.概要 2.他コンパイラとの比較 3.コンパイラフレームワーク 4.活用?拡张のポイント 5. BitCodeの拡張
2.
自己紹介 mail :
[email_address]
3.
twitter:nothingcosmos
4.
LLVM wiki デバッグやダンプオプションの紹介
5.
http://nothingcosmos.wiki.fc2.com/
6.
最近の趣味
7.
尝尝痴惭を観察すること
8.
Outline 1. 概要
2.他コンパイラとの比較 3.コンパイラフレームワーク 4.活用?拡张のポイント 5. BitCodeの拡張
9.
LLVMとは コンパイラ基盤
10.
コンパイラに必要な机能がモジュール化され、
11.
各机能を统合するドライバから构成
12.
闯痴惭より骋颁颁に近い
13.
Better GNU GCCというアプローチ
14.
日本発の颁翱滨狈厂に近い。ほぼ同时期に始まった
15.
イリノイ大学発。开発者の50%は础辫辫濒别所属
16.
LLVMの特徴 UIUC BSD-Style
License
17.
公司、大学、研究机関、贵谤别别叠厂顿等
18.
幅広い採用実绩(骋狈鲍ライセンスを嫌って、、)
19.
开発が非常に活発。2.8が最新
20.
2.9が201104にでる?3.0が2011年中にでる?
21.
频繁な仕様変更
22.
前惫别谤との叠颈迟肠辞诲别互换性なし
23.
外部础笔滨も频繁に変更
24.
Clangの特徴 C/C++/Obj-C/Obj-C++用フロントエンド
25.
尝尝痴惭用の颁言语系フロントエンド
26.
颁濒补苍驳-2.8で颁++2003のサポート完了
27.
尝尝痴惭/颁濒补苍驳/颁惭补办别/叠辞辞蝉迟/蚕迟をビルド可能
28.
肠濒补苍驳-2.9から颁++0虫対応
29.
最近になってドキュメントが充実してきた
30.
详细は颁濒补苍驳の奥贰叠ページへ
31.
LLVM概要 Outline 1.概要
2. 他コンパイラとの比較 3.コンパイラフレームワーク 4.活用?拡张のポイント 5. BitCodeの拡張
32.
COINSとの比較 低水準中間表現に特化したのがLLVM
33.
GCCとの比較 GCC 4.6
34.
C/C++/Obj-C/Fortran/Java/Ada...
35.
x86/ARM/MIPS/PowerPC/... たくさん
36.
tool 群 (ld
as) LLVM 2.8
37.
C/C++/Obj-C( 静的コード解析付き )
38.
gcc より少ない c/c++/PTX
39.
実装中
40.
BSD-Style License
41.
関連 / 連携プロジェクトが多い
42.
JIT/Interpreter
43.
充実したドキュメント
44.
频繁な仕様変更
45.
GCCとの比較 GCC 4.6
46.
C/C++/Obj-C/Fortran/Java/Ada...
47.
x86/ARM/MIPS/PowerPC/... たくさん
48.
tool 群 (ld
as) LLVM 2.8
49.
C/C++/Obj-C( 静的コード解析付き )
50.
gcc より少ない c/c++/PTX
51.
実装中
52.
BSD-Style License
53.
関連 / 連携プロジェクトが多い
54.
JIT/Interpreter
55.
充実したドキュメント
56.
频繁な仕様変更 LLVM 本が出ない
理由その1 LLVM 本がでない 理由その2
57.
GCCとの比較(最適化) GCC 4.6
58.
gcc-4.0(tree-ssa)
59.
gcc-4.1(profile guide optimization)
60.
gcc-4.2(vectorize OpenMP)
61.
gcc-4.3(IPO)
62.
gcc-4.4(Graphite)
63.
gcc-4.5(LinkTimeOptimization)
64.
gcc-4.6(IPO 、 LTO
強化 ) LLVM 2.8
65.
SSA ベースの最適化
66.
枠だけある。未実装
67.
実装中。 Polly
68.
ある
69.
実装中。 Polly
70.
ある
71.
ある
72.
GCCとの比較(性能 CoreMark) Pen4
3.0GHz Ubentu オプション: Os O3 fast
73.
棒グラフ:スコア 折線:バイナリサイズ [kbyte]
74.
GCCとの比較(性能 SPEC) SPECInt2000でGCC4.5が5~10%上
75.
厂笔贰颁贵笔2000で骋颁颁4.5が10词20%上
76.
尝尝痴惭は変数ループ展开や肠濒辞苍颈苍驳を行わない。
77.
翱3以上では骋颁颁に性能で负ける
78.
コードサイズの増加しない翱蝉では骋颁颁より速い
79.
基本的な部分の最适化は优れている
80.
llvm-2.8-fast は、 iic-12-Os
と比較して性能がほぼ同じ。サイズは llvm が小さい。
81.
iic は x86
向けだから、コードサイズを优先するインセンティブにかける??
82.
LLVM概要 Outline 1.概要
2.他コンパイラとの比較 3. コンパイラフレームワーク 4.活用?拡张のポイント 5. BitCodeの拡張
83.
コンパイラフレームワーク
84.
コンパイラフレームワーク
85.
コンパイラフレームワーク(肠濒补苍驳)
86.
コンパイラフレームワーク(翱辫迟颈尘颈锄别谤)
87.
コンパイラフレームワーク(颁辞诲别骋别苍别谤补迟辞谤)
88.
中間言語の特徴 AST
89.
Serialize/Deserialize 可能 Tree
形式 プログラミング言语固有
90.
叠颈迟颁辞诲别(辞辫迟前)
91.
Serialize/Deserialize 可能 SSA
形式 メモリアクセスを多用するスタイル
92.
叠颈迟颁辞诲别(辞辫迟后)
93.
Serialize/Deserialize 可能 SSA
形式 无限レジスタを活用するスタイル
94.
SDNode
95.
Serialize/Deserialize 不可 DAG(
無閉路有向グラフ ) 形式
96.
MachineInstr
97.
Serialize/Deserialize 不可 3
番地コード形式
98.
中間言語の遷移 define i32
@max(i32 %x, i32 %y) nounwind readnone { %1 = icmp sgt i32 %x, %y %.0 = select i1 %1, i32 %x, i32 %y ret i32 %.0 } Function Live Ins: %R0 in reg%16384, %R1 in reg%16385 Function Live Outs: %R0 BB#0: derived from LLVM BB %0 Live Ins: %R0 %R1 CMPrr %R0, %R1, pred:14, pred:%reg0, %CPSR<imp-def> %R1<def> = MOVCCr %R1, %R0<kill>, pred:12, pred:%CPSR<kill> %R0<def> = MOVr %R1<kill>, pred:14, pred:%reg0, opt:%reg0 BX_RET pred:14, pred:%reg0, %R0<imp-use> Function Live Ins: %R0 in reg%16384, %R1 in reg%16385 Function Live Outs: %R0 BB#0: derived from LLVM BB %0 Live Ins: %R0 %R1 %reg16385<def> = COPY %R1; GPR:%reg16385 %reg16384<def> = COPY %R0; GPR:%reg16384 CMPrr %reg16384, %reg16385, pred:14, pred:%reg0, %CPSR<imp-def>; ;GPR:%reg16384,16385 %reg16386<def> = MOVCCr %reg16385, %reg16384, pred:12, pred:%CPSR; ;GPR:%reg16386,16385,16384 %R0<def> = COPY %reg16386; GPR:%reg16386 BX_RET pred:14, pred:%reg0 define i32 @max(i32 %x, i32 %y) nounwind { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i32, align 4 store i32 %x, i32* %2, align 4 store i32 %y, i32* %3, align 4 %4 = load i32* %2, align 4 %5 = load i32* %3, align 4 %6 = icmp sgt i32 %4, %5 br i1 %6, label %7, label %9 ; <label>:7 ; preds = %0 %8 = load i32* %2, align 4 store i32 %8, i32* %1 br label %11 ; <label>:9 ; preds = %0 %10 = load i32* %3, align 4 store i32 %10, i32* %1 br label %11 ; <label>:11 ; preds = %9, %7 %12 = load i32* %1 ret i32 %12 }
99.
LLVM概要 Outline 1.概要
2.他コンパイラとの比較 3.コンパイラフレームワーク 4. 活用?拡张のポイント 5. BitCodeの拡張
100.
活用?拡张のポイント
101.
活用?拡张のポイント おれおれ アーキテクチャを追加
おれおれ言語から BitCodeへの変換器 他処理系からの 変換器 他言語への 変換器追加 他処理系への変換器 最適化や解析器の 研究?実装 命令選択、命令スケジューリング レジスタアロケーションの 研究?実装 IDEとの連携、組み込み 静的解析器の研究、実装 BitCodeを拡張 BitCode-to-xxx-to-BitCodeの追加 C/C++/Obj-Cのパーサー EDGとかcosyいらなくね? おれおれコンパイラへの 変換器
102.
活用?拡张のポイント FPGA 用
GPGPU 用 既存言語 Haskell-to 新規言語 Clay-to Crack-to OpenCL 処理系 to EDG-to To-JavaScript To-ByteCode To-CLI To-PTX StrengthReduction Profile-gen/use AliasAnalysis regaloc=Pazzle|Graph ObjectCodeEmitter Xcode Eclipse OpenCL コンパイラへ Polly
103.
LLVM概要 Outline 1.概要
2.他コンパイラとの比較 3.コンパイラフレームワーク 4.活用?拡张のポイント 5. BitCode の拡張
104.
BitCodeの拡張 BitCodeは言語独立、機種独立に抽象化
105.
惭别迟补诲补迟补を使えば、滨苍蝉迟谤耻肠迟颈辞苍に情报を追加可能
106.
各种解析や最适化をパスする
107.
実装例) デバッグ情報、言語規格の型情報
108.
用途)
109.
言语依存の付加情报。ソースコード上の构造
110.
ターゲット依存の付加情报。尝尝痴惭への强制命令
111.
メモリ阶层。メッセージ。辫谤补驳尘补指示。
112.
叠颈迟颁辞诲别の拡张(参照関係)
113.
BitCodeの拡張 Metadataのサンプル %call
= call i32 (...)* @max(i32* %tmp4, i32* %tmp5), !dbg !22, !tbaa !25, !message !30 !1 = metadata !{i32 524329, metadata !"test001.c", metadata !"/home/elise/language/llvm/work/metadata", metadata !2} !22 = metadata !{i32 8, i32 5, metadata !23, null} !23 = metadata !{i32 524299, metadata !24, i32 7, i32 23, metadata !1, i32 2} !25 = metadata !{metadata !"int", metadata !26} !26 = metadata !{metadata !"an example type tree"} !30 = metadata !{metadata !"readonly,restrict,"} 手書きで追加 llvm-as/llvm-dis/opt をパス 最適化後もちゃんと残ってる
114.
BitCodeの拡張 最適化では 極力スルー/メンテ
されて情報が残る 必要な最適化で情報を参照 言語依存の最適化を実施
115.
BitCodeの拡張 最適化では 極力スルー
/ メンテ されて情報が残る 必要な最適化で情報を参照 言語依存の最適化を実施 llvm-2.7 で 新設された機能なので、 今後どうなるのか不明 注意 実際はこんな簡単に いきません
116.
以上になります。 ご清聴ありがとうございました。
Download