タグ

LLVMに関するclavierのブックマーク (33)

  • eBPF assembly with LLVM

    From C to Object File Down to the Instructions eBPF Step by Step with LLVM Compiling from C to eBPF Assembly Assembling to an ELF Object File A Human-Friendly Output with llvm-objdump Inline Assembly Conclusion This post was left aside as a draft for a long time. Most of it was written in December 2017. I publish it with the hope it can still be helpful today, even though the Cilium guide also cov

    eBPF assembly with LLVM
  • RustのLLVMに関する問題 - 日記

    概要 dereferenceable_globally NonZeroUXXのLower 空無限ループ 終わりに 概要 この記事はRust Advent Calendar 2019の12日目の記事として書かれました。 qiita.com 遅刻してしまった...すいません(最悪)。 言わずもがなRustはLLVMをバックエンドに持つ言語です。 なのでバグがLLVMの最適化のせいだったりします。有名な例はnoaliasとか無限ループとかです。この辺りは定期的(2ヶ月一回くらい?)にTwitterとかで話題になりますね。またRustでの強い制約がLLVMにおける意味とのギャップで弱く表現せざるを得なかったりもします。そんな感じのこと少しだけ掘り下げて、RustのIssueとかLLVMのPhabricatorから幾つかまとめてみます。怪しいこと言ってたら教えて下さい。 dereferenceabl

    RustのLLVMに関する問題 - 日記
  • セルフホスティングCコンパイラを書いた - 茅の下

    セルフホスト(自分自身をビルド)できるCコンパイラnoccを書きました。 github.com はじめに 去年の夏あたりからCコンパイラを書くのが流行っていたのでやってみました。 例によって@rui314さんの8cc、9ccと低レイヤを知りたい人のためのCコンパイラ作成入門を参考にしていますが、バックエンドにはLLVMを使用しています。 工夫した点 以下、作る上で工夫した点です。 言語仕様に制限をつける C言語の全仕様を網羅しようとすると到底完成は不可能なのでサポートする言語仕様に制限をつけまくりました。 制限には例えば以下のようなものがあります。 変数宣言が初期値を取れない。 複数の変数をコンマ区切りで宣言できない。 typedef宣言や型のconst修飾などはその語順を固定している。 型解析時は型のconst修飾を無視する。 関数のプロトタイプ宣言はトップレベルでのみ行える。 関数ポイ

    セルフホスティングCコンパイラを書いた - 茅の下
  • こわくないLLVM入門! - Qiita

    対象読者 LLVMを勉強し始めたけど何からして良いのかわからない方 アセンブリがちょっとわかる 目標 LLVMの基的な文法がわかるようになる 環境 Mac Mojave 10.14.6 LLVM 8.0.0 clang 8.0.0 (trunk 348837) LLVMってなに...? LLVMは一言で言えば、プログラミング言語を作成する為の基盤です。プログラミング言語はコンパイラによってバイナリに変換され実行することができます。それを言い換えれば、自分が考えたプログラミング言語のコンパイラを作ることで自作プログラミング言語を作れます。 そして、コンパイラは通常フロントエンド、ミドルエンド、バックエンドに分けられ、各プロセスで様々な処理をしています。特にミドルエンド、バックエンドでは中間言語や各アーキテクチャに対するたくさんの最適化を施さなければなりません。この最適化を預けてフロントエン

    こわくないLLVM入門! - Qiita
  • LLVM for Grad Students

    LLVM for Grad Students August 3, 2015 This is an introduction to doing research with the LLVM compiler infrastructure. It should be enough for a grad student to go from mostly uninterested in compilers to excited to use LLVM to do great work. What is LLVM? LLVM is a compiler. It’s a really nice, hackable, ahead-of-time compiler for “native” languages like C and C++. Of course, since LLVM is so awe

    LLVM for Grad Students
    clavier
    clavier 2018/02/14
  • LLVMとは | DevelopersIO

    前回の記事「Rubyの処理系とGCについて」を書いたときに、LLVMがイマイチ理解できずもやっとしてたので調べました。このエントリーは「LLVMとは」でググった(先日の僕のような)人向けの記事です。間違ったことを書いてあったら教えてください。 疑問 この記事を書く前の疑問はおおよそ以下の様なものです。 LLVMはコンパイラ基盤って言われてるけど、コンパイラ基盤って何? LLVMはコンパイラ基盤であってVMじゃないって言うけど、LLVMに含まれるJITコンパイラはVMと違うの? LLVMでマシンコードを作ったあと、実際の実行はどうするの? 色々とググって調べたりしたのですが、LLVMの全体像がつかめるまとまった情報が見つからなかったので、一次情報(llvm.org)のドキュメントを読むことにしました。 Overview The LLVM Compiler Infrastructure Pro

    LLVMとは | DevelopersIO
  • LLVMについて調べたことまとめ - kotetuのブログ

    記事は 自作OS Advent Calendar の14日目の記事となります。 adventar.org みなさま、ご無沙汰しております。 ここ最近、なかなか自作OS活動に時間を割くことができずにいましたが、リハビリを兼ねて、ClangやRustのバックエンドでもあり、自作OS界隈でも徐々に名前を聞くようになってきた(気がする)、 LLVM について、改めて調べてみました。 目次 The LLVM compiler Infrastructure project Primary sub projects バックエンドとフロントエンド LLVM IRとbitcode 実際に動かしてみる LLVMのインストール x86_64 (Mach-O) 向けバイナリが生成されるまで bitcodeの生成、実行 RustでのLLVM IR・bitcode生成方法 (ただし実行はできず) まとめ 参考文献(

    LLVMについて調べたことまとめ - kotetuのブログ
    clavier
    clavier 2017/12/15
  • A Tourist’s Guide to the LLVM Source Code – Embedded in Academia

    In my Advanced Compilers course last fall we spent some time poking around in the LLVM source tree. A million lines of C++ is pretty daunting but I found this to be an interesting exercise and at least some of the students agreed, so I thought I’d try to write up something similar. We’ll be using LLVM 3.9, but the layout isn’t that different for previous (and probably subsequent) releases. I don’t

  • LLVM APIを使ってみよう! 〜 Brainf**kコンパイラをIRBuilderで書き直してみた 〜 - プログラムモグモグ

    先日LLVMの入門記事を書きました。 clangが吐くLLVM IR (Intermediate representation, 中間表現) を頼りに、Brainf**kのコンパイラを書いてみました。 itchyny.hatenablog.com この記事で書いたコードでは、直接printfでLLVM IRの命令を出力していました。 このステップを踏むことで、LLVM IRの命令をどう調べればいいかについて身についたと思います。 しかし、この「コンパイラ」は次のような問題がありました。 bf2llvmコマンドが出力するのがLLVM IRのために、lliやllcといったLLVM IRのランタイムやコンパイラが必要となる 最適化を行うにはさらにoptコマンドが必要になり、やはりLLVMツールチェインをインストールしている環境でしか使えない ソースコードから実行ファイルまでのパスの中で、LLVM

    LLVM APIを使ってみよう! 〜 Brainf**kコンパイラをIRBuilderで書き直してみた 〜 - プログラムモグモグ
  • Building a Compiler in Swift with LLVM, Part 3: Code Generation to LLVM IR - Harlan Haskins

    clavier
    clavier 2017/01/16
  • Swift中間言語の、ひとまず入り口手前まで - Qiita

    今年の WWDC を訪れたときに、Swift Lab で Sean Callanan さんが Swift の小さな挙動を探るのに SIL を活用している姿を見せてくれて、それ以来、何かのときに自分も真似して SIL を眺めてみる機会が増えてきました。 SIL というのは Swift Intermediate Language の略、すなわち Swift中間言語 です。 それからというもの Swift の不可思議動作に出逢うたびに SIL を眺めてみてたんですけど、なんとなく読めるだけでも想像以上に助けになってくれました。それでもやっぱり読めないところも多かったりして、もしかしてもっと読めるようになれば SIL がいろんなことを教えてくれるかもしれない。 そう思ったのが、今回の記事を書いてみようと思ったきっかけでした。 🎄 目標のところまで調べきれず そこで、右も左も分からない Swift

    Swift中間言語の、ひとまず入り口手前まで - Qiita
  • Go言語で利用するLLVM入門 | POSTD

    はじめに LLVMは、コンパイラを作成するための基盤です。2000年にChris Lattnerによって作成され、2003年にリリースされました。それ以来、LLVMリンカ lld やLLVMデバッガ lldb など幅広いツール群を持つ包括的なプロジェクトに発展してきました。 LLVMの秀でた特徴は、一般に LLVM IR と呼ばれる、その中間表現です。LLVMの考え方は、まずこのIRにコンパイルし、次にそのIRを、JITコンパイルする、インタープリタで実行する、または実行しているマシンのネイティブアセンブリにコンパイルするといういうものです。このIRの主なターゲットは、コンパイラです。実際LLVMを使用するコンパイラは、世の中に数多くあります。C言語とC++用はそれぞれclangとclang++、D言語用の ldc2 、RustSwiftなどです。 Emscripten のようなプロジェ

    Go言語で利用するLLVM入門 | POSTD
  • WebAssembly を使って自作言語をブラウザで動かしてみよう - はやくプログラムになりたい

    今日 Google の開発者ブログで WebAssembly の記事が載っていました.どうやら最新の Chrome では WebAssembly が動くようです. googledevjp.blogspot.jp 自作言語のコンパイラを LLVM フロントエンドとしてつくっているので,これは試さないわけにはいきません. github.com というわけで,さっそく試してみます. 準備 1. Chrome 直接 V8 をビルドするのは億劫なので Chrome のバイナリを落としてきて使います.Chrome 51.0.2677.0 以降であれば OK です.Canary 版をダウンロードしてきてインストールします. 次に chrome:flags にアクセスして WebAssembly を有効にします. 2. LLVM WebAssembly のためのアセンブリを吐くには LLVM の expe

    WebAssembly を使って自作言語をブラウザで動かしてみよう - はやくプログラムになりたい
  • Python を速くする取り組み - methaneのブログ

    速い Python 実装といえば PyPy が有名ですが、 Python 3 へのキャッチアップが遅い、 CPython が持っている Python/C API のサポートがまだ弱く遅い、などの欠点があります。 また、 Google の1年プロジェクトだった Unladen Swallow もありました。これは CPython をフォークして LLVM で JIT を実装するものでした。この fork 実装は終わりましたが、この時期まだ不安定だったLLVMへの貢献は大きく、(ちゃんとおってないので憶測ですが)現代LLVMを利用したJITを実装しているプロジェクトは全部間接的に Unladen Swallow の成果の上に成り立っていると言えるかもしれません。 終了した JIT プロジェクトといえば、 psyco もありました。これはベタに CPython の JIT を実装していましたが、

    Python を速くする取り組み - methaneのブログ
  • Adrian Sampson: LLVM for Grad Students

    LLVM for Grad Students August 3, 2015 This is an introduction to doing research with the LLVM compiler infrastructure. It should be enough for a grad student to go from mostly uninterested in compilers to excited to use LLVM to do great work. What is LLVM? LLVM is a compiler. It’s a really nice, hackable, ahead-of-time compiler for “native” languages like C and C++. Of course, since LLVM is so awe

    Adrian Sampson: LLVM for Grad Students
    clavier
    clavier 2015/08/05
  • 正規表現からLLVMへのコンパイラを実装する - Qiita

    正規表現技術入門というの中に、正規表現のJITコンパイルという技術が紹介されている。VM型の正規表現エンジンは以前作った1ので、これをLLVMへコンパイルすればおもしろいのではないかと考えて、実行することにした。なお、実装にはScalaを用いた。 追記: また、JVMのバイトコードへJITコンパイルする実験も書きました。 正規表現のJITコンパイラを実装する 正規表現の抽象構文木 VMの実装の時に用いたものと同じく、次のデータ構造を用いる。 sealed trait Regex case object Empty extends Regex case class Let(c: Char) extends Regex case class Con(a: Regex, b: Regex) extends Regex case class Alt(a: Regex, b: Regex) ext

    正規表現からLLVMへのコンパイラを実装する - Qiita
    clavier
    clavier 2015/05/12
    正規表現からLLVMへのコンパイラを実装する - Qiita
  • Redirecting... · objc.io

    objc.io publishes books, videos, and articles on advanced techniques for iOS and macOS development.

  • 6.2. より速く: 高速に動作するプログラムを作る

    あなたのHaskellプログラムを速くするのにあたって、鍵となる道具はGHCのプロファイル機能である。これは別途第5章. プロファイルを取るで説明されている。プログラムが時間/空間をどこで使っているのかについて実際のこと(あなたがどんな風に想像しているかではなくて)を知ることにおいて、プロファイルを取ることに代わるものは存在しない。 もう一つ銘記すべきことだが、プログラムの性能を劇的に向上させるための圧倒的に良い方法は、より良いアルゴリズムを使うことである。プロファイルによってどこが時間をっているかが分かったら、下に書いてあるもろもろの調整を試みる前に、プログラムについて再考した方が良いだろう。 プログラムを速くするためのもう一つの極めて効率的な方法は、誰か別の人によって真剣に調整されたライブラリコードを使うことである。Data.Listにあるのよりも良いクイックソートを書くことはできる

  • Search | Packt Subscription

    Search over 7,500 Programming & Development eBooks and videos to advance your IT skills, including Web Development, Application Development and Networking

    Search | Packt Subscription
    clavier
    clavier 2014/07/01
  • LLVM/Clang実践活用ハンドブック(出村成和) | 書籍 | ソシム

    Clang/LLVM(Low Level Virtual Machine)とは、CやObjective-Cなどのコンピュータ言語のコンパイラ環境です。 最近ではiOSやMac OS X、FreeBSDなどのOSでは、デファクトスタンダードであったGCC(GNUコンパイラコレクション)からLLVM/Clangへの置き換えが進みつつあります。 書では、Clang/LLVMの仕組みと使い方(カスタマイズ法など)、Clang/LLVM独自のライブラリの使い方などについて詳細な解説を行っています。 はじめに CHAPTER 1 LLVMとは 1 LLVMの概要 2 コンパイラの仕組み 3 特徴 4 対応プラットフォーム 5 LLVMプロジェクトの一覧 6 ライセンス CHAPTER 2 セットアップ 1 ビルド環境の準備 2 ソースコードを取得する 3 makeでビルドする 4 CMakeでビルド

    LLVM/Clang実践活用ハンドブック(出村成和) | 書籍 | ソシム