In this post we’ll exercise the symbolic execution engine KLEE over a funny ASCII Maze (yet another toy example)! VS. Maze dimensions: 11x7 Player pos: 1x1 Iteration no. 0 Program the player moves with a sequence of 'w', 's', 'a' or 'd' Try to reach the prize(#)! +-+---+---+ |X| |#| | | --+ | | | | | | | | +-- | | | | | | +-----+---+ The match is between a tiny maze-like game coded in C versus the
(#JuliaLang) Julia Advent Calendar 2014 12月7日担当 kimrin(twitter:kimrin) やっぴー♡ みんなのアイドル(哀ドルともいうw)きむりんだよー。 小六女子のおっさん(40)だよー。いえーい、見てる見てるー? www さて、12月5日のAdventでJuliaたん使って、LLVM IRとnative codeを簡単にみる ことができること、勉強したねo(^_^)o なんと、今日はJuliaたんで、 古典コンパイラの理論に迫ってみましょー おー(ぱちぱち!) 古典コンパイラ(昔のコンパイラ)なのです。だからJuliaの実装ではないこと、ここでお断りしておくですー。 真面目に言うと、この記事はみなさんに古典コンパイラのbackendの基礎知識を与えるものです。概念として、CFG(Control Flow Graph), PDG(Pro
The goal is to provide Debian and Ubuntu nightly packages ready to be installed with minimal impact on the distribution. Packages are available for amd64, i386 (Debian only), s390x and arm64 (aka aarch64). This for both the stable, qualification and development branches (currently 17, 18 and 19). Packages are built using stage2 and extremely similar to the one shipping in Debian & Ubuntu. The pack
この文書は、LLVMアセンブリ言語の参照マニュアルです。 LLVMは、型安全で、低水準な操作ができる、柔軟な、 そして 全ての 高級言語を簡潔に表現できる能力を提供する静的単一代入(Static Single Assignment:SSA)ベースの表現です。 これはLLVMのコンパイル戦略のすべてのフェイズにわたって使用される共通コード表現です。 LLVMコード表現は、3つの異なる形式で使用できるように設計されています。 インメモリコンパイラ(IR)、 ディスク上でのビットコード表現(JITコンパイラの高速ロード対応)、 そして、可読アセンブリ言語表現です。 これは、変形にデバッグや視覚化の自然さを残しながら、 LLVMが効率的なコンパイラ変形および分析に強力な中間表現を提供することを可能にします。 LLVMの3つの異なる形式はすべて等価です。 このドキュメントは人間の判読可能な表現および
llcを実行したときにどんなPassが実行されるか(PassManagerに追加されるか)が気になったのでざざっとしらべた。 ほぼ自分用のメモです。 createXXX はPassを生成する関数. XXXIDはIDからPassを生成?. どちらもその後PassManagerに追加. 最適化オプションによっては実行されないものや増えたりするものもあるので参考程度に。 PassManager::add()でPass名表示するようにしたみたけどだいたいあってそう。 最後に紹介する-debug-passの表示とはあってるのかよくわからない。 llc main (tools/llc/llc.cpp) LLVMTargetMachine::addPassesToEmitFile() (LLVMTargetMachine.cpp) addPassesToGenerateCode TargetPassCo
(注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部本当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな
前回の記事で、正規表現(の抽象構文木)からLLVMの中間表現(LLVM IR)1へコンパイルするという試みを行ったところ、Twitterで次のような投稿をいただいた2。 @_yyu_ https://t.co/UPV535fqbB とかを使うと、Mokkosuから動的コード生成ができてきっと楽しいです。 — ラムダ太郎 (@lambdataro) 2015, 5月 11 つまり、プログラムの実行時に正規表現に対応するバイトコードを生成して、それを実行すれば速度が早くなったりするかもしれないということである。これは一般的にJust in Time(JIT)コンパイルと呼ばれているもので、正規表現技術入門という本でも紹介されている。Mokkosuで実装してもよかったが、たぶんMokkosuのプログラマはそれほど多くないだろうということで、今回もScalaを使って実装することにする。 正規表現の
The Architecture of Open Source Applications (Volume 1) LLVM Chris Lattner This chapter discusses some of the design decisions that shaped LLVM1, an umbrella project that hosts and develops a set of close-knit low-level toolchain components (e.g., assemblers, compilers, debuggers, etc.), which are designed to be compatible with existing tools typically used on Unix systems. The name "LLVM" was onc
はじめに LLVMは、コンパイラを作成するための基盤です。2000年にChris Lattnerによって作成され、2003年にリリースされました。それ以来、LLVMリンカ lld やLLVMデバッガ lldb など幅広いツール群を持つ包括的なプロジェクトに発展してきました。 LLVMの秀でた特徴は、一般に LLVM IR と呼ばれる、その中間表現です。LLVMの考え方は、まずこのIRにコンパイルし、次にそのIRを、JITコンパイルする、インタープリタで実行する、または実行しているマシンのネイティブアセンブリにコンパイルするといういうものです。このIRの主なターゲットは、コンパイラです。実際LLVMを使用するコンパイラは、世の中に数多くあります。C言語とC++用はそれぞれclangとclang++、D言語用の ldc2 、Rust、Swiftなどです。 Emscripten のようなプロジェ
Building LLVM with CMake¶ Introduction¶ CMake is a cross-platform build-generator tool. CMake does not build the project, it generates the files needed by your build tool (GNU make, Visual Studio, etc.) for building LLVM. If you are a new contributor, please start with the Getting Started with the LLVM System page. This page is geared for existing contributors moving from the legacy configure/make
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く