タグ

LLVMに関するAkinekoのブックマーク (18)

  • 【寄稿】独自言語のコンパイラをLLVM backendを用いて作る「ミニキャン言語を作ってみよう!」講義録 - Flatt Security Blog

    はじめに 弊社Flatt Securityでは学生の学びを支援したいという想いから今回少額ではありますが高橋さんの留学を支援させていただき、そのご縁で弊社のYONEUCHI, Takashi (@lmt_swallow) | Twitterもスタッフを務めるセキュリティミニキャンプにおける素晴らしい講義の内容をテックブログに書いていただけることになりました。以下文になります。 @00_ です。今年の夏のUC Berkeleyへの留学費用をFlatt Securityさんに支援して頂いた経緯で、セキュリティミニキャンプの講義内容についてテックブログで書くことになりました。 2019/09/28-2019/09/29 のセキュリティミニキャンプ山梨で「ミニキャン言語を作ってみよう!」の講座を行いました。この講座では、「ミニキャン言語(MC言語)」という独自言語のコンパイラを、自分がコミッタで

    【寄稿】独自言語のコンパイラをLLVM backendを用いて作る「ミニキャン言語を作ってみよう!」講義録 - Flatt Security Blog
    Akineko
    Akineko 2019/10/28
  • リンクが倍速くなるらしい「lld」を試す - グレインの備忘録

    最近、ビルトインのldによるリンクの遅さが気になってきた。 そこで、もっと高速なリンク方法がないか探してみたところ、いくつかの新しいリンカに辿り着いた。 GNU goldよりも2倍早いlld 高速なリンカとしてはGNU goldが割と有名らしいが、それよりも更に高速なlldというものを見つけた。 https://lld.llvm.org/ このページ曰く「GNU goldの2倍高速で」動作するらしい。 lldのインストール Ubuntu 16.04 (Xenial Xerus) にはパッケージがあるようなので入れてみる sudo apt -y install lld-4.0 これでld.lldが利用可能になる。 ついでに、ldのシンボリックリンク切り替えの設定もしておく。 参考: qiita.com sudo update-alternatives --install "/usr/bin/

    リンクが倍速くなるらしい「lld」を試す - グレインの備忘録
    Akineko
    Akineko 2019/05/06
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

    Akineko
    Akineko 2019/03/15
  • LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ

    コンパイラを作ってみたいと思っていても、アセンブリ言語はよくわからない。 パーサーみたいなコードは書いたことがあるけれど、コード生成の処理はさっぱりだ。 実行ファイルをバイナリエディターで見るとかなにそれ怖い。 そんな私なのですが、LLVMに興味を持ち始めています。 SwiftRust、あるいはEmscriptenなど、近年注目されている言語やコンパイラ技術の中枢にはLLVMがあります。 アセンブリはよく分からなくてもLLVMを使いこなせるようになれば、マルチプラットフォームで実行ファイルを生成できる言語処理系を作るのではないか。 コンパイラ作ってみたいな、LLVMを使ってみようかなと思っている今日このごろです。 ところが、いざLLVMを勉強しようと思ってもどこから始めればいいかよく分かりませんでした。 マニュアルは巨大で読む気が起きないし、リファレンスを見てもさっぱりです。 雰囲気はわ

    LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ
    Akineko
    Akineko 2017/02/27
  • きつねさんでもわかるLLVM - 達人出版会

    内容紹介書は趣味でLLVMを触っている著者二人のLLVMをもっと普及させていきたいと思いから生まれたLLVM解説です。 LLVMは今非常に注目されていますが、度重なるAPI仕様の変更や公式ドキュメントの充実さなどが理由で、まとまった解説がなされたものはありませんでした。書によりまとまった情報が日語で手に入るようになり、多くの方にLLVMを知って頂けると幸いです。 書ではLLVMを使用したコンパイラの作り方を順を追って説明しLLVMへの理解を深めてもらおうというのがコンセプトになっています。フロントエンド(中間表現出力まで)、ミドルエンド(最適化)、バックエンド(オブジェクト生成)と幅広く解説していますので多くの方に有用な内容を含んでいるのではないでしょうか。 LLVMの用途は多岐にわたり,書では解説できていない部分もありますが,初心者向けの情報としてLLVMを利用するための基礎

    きつねさんでもわかるLLVM - 達人出版会
    Akineko
    Akineko 2013/02/09
  • Charming Python: Functional programming in Python, Part 3

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    Charming Python: Functional programming in Python, Part 3
    Akineko
    Akineko 2012/09/22
  • LLVM解説本をC82で出します - Boost Your Programming!

    LLVMの解説をC82の2日目(8/11)西し39aで出します。 タイトルは「3日で出来るLLVM」です. LLVMを使ってコンパイラを作るという内容になっています。 フロントエンドとミドルエンドはid:motipizza(@sui_moti)が担当し、自分はバックエンドの担当です。 表紙は矢上さん(blog)に書いていただきました。かわいい表紙でよくできているのでこれだけでも売れそうです。 目次は以下のようになっています。 はしがき 第一章:はじめに 第二章:コンパイラとLLVM 第三章:環境構築 第四章:LLVM IR 第五章:フロントエンドを作る 第六章:Pass について 第七章:バックエンドを作る あとがき LLVM解説を作ると決まってからLLVMについていろいろと調べ始めましたが、 ほとんど資料が無く特にバックエンドに関しては皆無のような状態で苦労しました。 自分が理解でき

    Akineko
    Akineko 2012/07/29
  • llvm で Hello wolrd!! 〜llvm入門 その2〜 - tokuhirom's blog

    http://www.ibm.com/developerworks/jp/opensource/library/os-createcompilerllvm1/ 最初なのでとりあえず↑の記事を基なぞってますが、わかりやすく解説をいれています。 llvm であそぶには、まあいろいろな方法がありますが、わかりやすく大きくわけると以下の4ステップです。 llvm IR の動的生成llvm IRの最適化llvm IRの JIT コンパイルllvm IRのネイティブコードへの変換それぞれのフェーズごとに分離して動作させることができるので、創りたいところだけつくればいいのです。 とりあえず基となる llvm IR の動的生成をおこなってみます。 とりあえずなにもしない main 関数をつくりましょう。 #include "llvm/LLVMContext.h" #include "llvm/Modu

    Akineko
    Akineko 2012/07/18
  • nothingcosmos wiki

    2016/05/04 LLVMのビルド方法 2014/04/08 OpenJDKのビルド方法 2014/02/23 作成したスライド 2014/02/22 JVM(HotSpot) VS. Dart VM 2014/02/16 RevisionLog32000台 DartVMのリビジョンログ 2014/01/11 RevisionLog31000台 2013/12/23 RevisionLog30000台 LLVMとの連携方法 2013/12/09 LLVMに関して LLVMのデバッグ方法 SSA形式 2013/11/10 RevisionLog29000台 2013/10/21 JITコンパイラ メニュー 自動並列化 ベクトル化 GCCに関して 2013/10/20 RevisionLog28000台 2013/09/28 RevisionLog27000台

    Akineko
    Akineko 2011/09/20
  • LLVM Download Page

    If you'd like access to the "latest and greatest" in LLVM development, please see the instructions for accessing the LLVM Git Repository. The major changes and improvements that the development version contains relative to the previous release are listed in the Release Notes for the next release.

    Akineko
    Akineko 2011/09/20
  • Clang C Language Family Frontend for LLVM

    Clang: a C language family frontend for LLVM The Clang project provides a language front-end and tooling infrastructure for languages in the C language family (C, C++, Objective C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project. Both a GCC-compatible compiler driver (clang) and an MSVC-compatible compiler driver (clang-cl.exe) are provided. You can get and build the source today. Feature

    Akineko
    Akineko 2011/09/20
  • clangでObjective-Cプログラムを静的解析

    はじめに 今回は、clangの静的解析機能を紹介します。 LeopardのOpenGLに採用されたことでも知られる、LLVMというコンパイラプラットフォームがあります。clangはLLVM内のプロジェクトのひとつで、gccに変わるC/C++/Objective-C用のLLVMフロントエンドを開発しています。 複数のAppleエンジニアが開発に参加しており、Objective-Cを積極的にサポートしているのも特徴です。 clangでは、通常のコンパイラとして以外にもコードの内部構造にアクセスするいくつかの機能があり、そのひとつが静的解析機能です。 プログラムの静的解析 プログラムを実行せずにプログラムの問題点・バグなどを分析することを「静的解析」といいます。 最近では、JavaのFindBugsが有名ですね。 人力で行うコードレビューも、静的解析と言われることもあります(そりゃそうでしょう

  • LLVM Pythonフロントエンドコンパイラ - name-3333’s memo (個人用メモなんで間違いがあるかも知れません)

    TEC, Python | 12:44オラオラさんがLLVMのPythonフロントエンドを自作してしまったらしい。http://code.google.com/p/py2llvm/解説はここhttp://groups.google.co.jp/group/llvm_study/web/%E7%AC%AC%E4%B8%80%E5%9B%9E+llvm+%E5%8B%89%E5%BC%B7%E4%BC%9A(オラオラさんの書いたllvm紹介pdfもすばらしい) pythonに型推論を追加してllvm IRに変換、後はllvmが最適化&ネイティブ化、simdの恩恵を受けられるようにする。Python codeをAST木に変換する標準モジュールとllvm APIpython wrapperを使用。関数引数の型は推論できないのでデフォルト引数に型オブジェクトを与えてヒントにする。1000倍の高速化

  • LLVM - Wikipedia

    LLVM(エルエルヴィーエム、 またはエルエルブイエム)とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。当初は、LLVMの名称の由来は、Low Level Virtual Machine (低水準仮想機械) の略であるとしていたが[3]、現在は、何の頭文字でもないとしている[4]。 LLVMは、プラットフォームに依存しない中間表現であるLLVM-IRを生成し、LLVM-IRを特定のマシンの機械語などに変換する。LLVM-IRの段階で、言語やプラットフォームとは独立した最適化を行う。この方法によってLLVMは言語からもアーキテクチャからも独立しており、それぞれに特化した、プログラミング言語固有のモジュールと、マシン向けコード生成部を用意することにより様々な言語アーキテクチャーに対応する。LL

    Akineko
    Akineko 2011/04/21
  • The LLVM Compiler Infrastructure Project

    Useful Links Forums LLVM Discourse Mailing Lists: Commits List Discord (Real-time Chat): Discord IRC Channel: irc.oftc.net #llvm Calendar: LLVM Community Calendar Dev. Resources: doxygen Sources (GitHub) Code Review Blog Bug tracker Buildbot Green Dragon LNT Scan-build llvm-cov Compile-time tracker Release Emails 18.1.1: Mar 2024 18.1.0: Mar 2024 17.0.6: Nov 2023 17.0.5: Nov 2023 17.0.4: Oct 2023

    Akineko
    Akineko 2011/04/21
  • LLVM 言語マニュアル(Language Reference Manual)

    この文書は、LLVMアセンブリ言語の参照マニュアルです。 LLVMは、型安全で、低水準な操作ができる、柔軟な、 そして 全ての 高級言語を簡潔に表現できる能力を提供する静的単一代入(Static Single Assignment:SSA)ベースの表現です。 これはLLVMのコンパイル戦略のすべてのフェイズにわたって使用される共通コード表現です。 LLVMコード表現は、3つの異なる形式で使用できるように設計されています。 インメモリコンパイラ(IR)、 ディスク上でのビットコード表現(JITコンパイラの高速ロード対応)、 そして、可読アセンブリ言語表現です。 これは、変形にデバッグや視覚化の自然さを残しながら、 LLVMが効率的なコンパイラ変形および分析に強力な中間表現を提供することを可能にします。 LLVMの3つの異なる形式はすべて等価です。 このドキュメントは人間の判読可能な表現および

    Akineko
    Akineko 2011/04/21
  • 仮想マシンによるコンパイラ基盤「LLVM 2.7」リリース

    コンパイラ基盤「LLVM 2.7」が4月27日、リリースされた。ソースコードの他、ClangあるいはGCCを利用するFreeBSDやLinuxMac OS X、Windows(MinGW)向けのバイナリファイルが「LLVM Download Page」からダウンロードできる。 LLVM(Low Level Virtual Machine)は、UIUC(イリノイ大学アーバナ・シャンペーン校)を中心に開発されている仮想マシンによるコンパイラ基盤で、アップルコンピュータが出資している。従来はGCC(GNUコンパイラ)がフロントエンドに利用されてきたが、現在ではClangでも自身をコンパイルできるほどになっている。 バージョン2.7は、マシン語のアセンブル/逆アセンブルが可能になった最初のリリースで、またソフトプロセッサ MicroBlazeがターゲットに追加された。LLVM IRには拡張可能メ

    仮想マシンによるコンパイラ基盤「LLVM 2.7」リリース
    Akineko
    Akineko 2010/05/12
  • The LLVM Project Blog

    LLVM Project News and Details from the Trenches Tools for Learning LLVM TableGen TableGen is a language used within the LLVM project for generating a variety of files, when manual maintenance would be very difficult. For example, it is used to define all of the instructions that can be used on a particular architecture. Read more… Tutorial Development with Clang-Repl Introduction I’m Krishna Naray

    Akineko
    Akineko 2010/05/12
  • 1