Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LLVMのコード自動生成機構におけるコード記述を支援するツールの作成
Search
Arata
January 16, 2024
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LLVMのコード自動生成機構におけるコード記述を支援するツールの作成
Arata
January 16, 2024
More Decks by Arata
See All by Arata
Black Hat USA 2026の面白かった発表を紹介
arata_nvm
1
19
Operating Systems: Three Easy Pieces, Chapter 49 / Sun's Network File System (NFS)
arata_nvm
0
21
デコンパイラ研究調査
arata_nvm
1
39
コンパイラ基盤を支える言語たち
arata_nvm
1
120
LLVMのDSL”TableGen”向け言語サーバーの開発
arata_nvm
0
43
5分でわかるPage-Fault Weird Machine
arata_nvm
2
440
eBPFを用いたAndroid向けデバッガ「eDBG」のx86_64 Linuxへの移植
arata_nvm
0
28
Pythonのcopy-and-patch JITの実装を読む
arata_nvm
0
170
eBPFを使った動的解析手法
arata_nvm
1
830
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Done Done
chrislema
186
16k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
How to train your dragon (web standard)
notwaldorf
97
6.8k
Odyssey Design
rkendrick25
PRO
2
800
WENDY [Excerpt]
tessaabrams
12
39k
Designing for Performance
lara
611
70k
Optimizing for Happiness
mojombo
378
71k
Practical Orchestrator
shlominoach
191
12k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Transcript
LLVMのコード自動生成機構における コード記述を支援するツールの作成 アドバイザ教員: 前田 敦司 情報学群情報科学類1年 安藤 慎
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 背景 / コンパイラの基本構成 2
フロントエンド ソースコードを パース・解析 バックエンド CPUが実行可能な 機械語を出力 コンパイラ ソースコード 機械語
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 背景 / LLVM: コンパイラを作るためのライブラリ
• コンパイラを作るたびにバックエンドを作るのは難しい ◦ 世界では数多の種類のCPUが使われているため ◦ そこでバックエンドの実装として使えるLLVMが誕生した • C(Clang), C++(Clang), Rust, Swift, Juliaなどで使われ ている 3
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • LLVMはCPUの情報を記述するためにTableGenを使う ◦ CPUの{レジスタ,
機能, 命令}など ◦ CPUに合わせて機械語を出力するために必要となる 背景 / TableGen: LLVMのコード自動生成機構(DSL) 4 例: TableGenでx86-64のレジスタを記述
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • TableGenを書く際にエディタの支援を受けられない ◦ エラーの表示、入力補完、シンタックスハイライトなど
• 現在、約57万行のTableGenコードがLLVM内に存在する ◦ 57万行のプログラムをメモ帳で書くのと同じような状況 目指すこと: エディタの支援を受けながらTableGenのコードを 快適に書きたい 課題 / TableGenの開発環境が快適ではない 5
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • エディタ支援を実装する方法として言語サーバがある ◦ Microsoftが発表したLanguage
Server Protocol(LSP)を 実装するサーバ • LSPに対応したエディタならば言語サーバの機能を使うこ とができる ◦ Vim, Emacs, VSCodeなどが対応している 方針 / TableGenの言語サーバを作る 6
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • RustでTableGenの言語サーバを実装し、GitHubと Marketplaceで成果物を公開した ◦
https://github.com/arata-nvm/tablegen-lsp • 工夫した点(詳細は省略) ◦ Red-Green Treeを使用しているため、不完全なソースコードを 扱うことができる ◦ ソースコードのパース結果や解析結果をキャッシュしているた め、余分な処理をスキップできる ◦ パーサを言語サーバと分離しているため、別のプロジェクトで再 利用できる 実装 7
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • デモのためにVSCode向けの拡張機能を作成した • 実装した以下の機能について、おおまかな使用例を紹介
する ◦ エラーの表示 ◦ シンタックスハイライト ◦ 定義へ移動 / 参照へ移動 ◦ ホバー時のドキュメント表示 ◦ 入力補完 ◦ インレイヒント 使用例 8
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 使用例 / エラーの表示 9
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 使用例 / シンタックスハイライト 10
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 使用例 / 定義へ移動/参照へ移動 11
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 使用例 / ホバー時のドキュメント表示 12
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 使用例 / 入力補完 13
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 使用例 / インレイヒント 14
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • TableGenのすべての構文を処理できるようにする ◦ 現在は対応していない一部の構文を無視している
• 使い勝手を改善する ◦ 補完候補が表示される順番の最適化、型チェックなど • 言語サーバーのWASM化 ◦ 現在はプラットフォームごとのバイナリをバンドルしている 今後の展望 15
2024/01/16 | LLVMのコード自動生成機構におけるコード記述を支援するツールの作成 | 安藤 慎 • LLVMではマシンの情報を記述するためにTableGen言語 が使われている •
TableGenをエディターで書きやすくするために言語サー バをRustで実装した • メモ帳でプログラミングをする必要がなくなった まとめ 16