Skip to content

Tag Archives: LLVM

LLVM笔记(3):LLVM的语言(下)

(本文是 http://llvm.org/releases/2.9/docs/LangRef.html 的阅读笔记,前作为《LLVM笔记(2):LLVM的语言(中)》。) Instruction Reference terminator instruction indicates which block should be executed after the current block is finished yields ‘void’ value, ret (return) ret <type> <value> ret void branch br i1 <cond>, label <iftrue>, label <iffalse> br label <dest> ; Unconditional branch switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ] indirectbr <somety>* […]

LLVM笔记(2):LLVM的语言(中)

(本文是 http://llvm.org/releases/2.9/docs/LangRef.html 的阅读笔记,前作为《LLVM笔记(1):LLVM的语言(上)》。) Type System Type Classifications integer: i1, i2, i3, … i8, … i16, … i32, … i64 floating point: float, double, x86_fp80, fp128, ppc_fp128 first class: integer, floating point, pointer, vector, structure, array, label, metadata. primitive: label, void, integer, floating point, x86mmx, metadata. derived: array, function, pointer, structure, packed structure, vector, opaque. Array type [<# elements> x <elementtype>] Function […]

LLVM笔记(1):LLVM的语言(上)

(本文是 http://llvm.org/releases/2.9/docs/LangRef.html 的阅读笔记,前作为《LLVM笔记(0):在一切开始之前》。) 一句话总结: LLVM is a Static Single Assignment (SSA) based representation that provides type safety, low-level operations, flexibility, and the capability of representing ‘all’ high-level languages cleanly. It is the common code representation used throughout all phases of the LLVM compilation strategy. LLVM语言有三种形式:in-memory compiler IR, on-disk bitcode representation, human readable assembly language representation。三种表现形式是等价的。 LLVM语言的目标是:一方面 light-weight and […]

LLVM笔记(0):在一切开始之前

(本文是 http://llvm.org/releases/2.9/docs/GettingStarted.html 的阅读笔记。) LLVM的安装包分为三部分,LLVM工具包,LLVM-GCC,测试集。 自己编译LLVM三者都需要,但在主流平台上都有编译好的binary。 讲了LLVM的安装,没发现什么特别需要注意的。 LLVM的目录结构 llvm/examples: 很多有用的代码示例 llvm/include llvm/include/llvm LLVM头文件 llvm/include/llvm/Support 支持LLVM工具的头文件,但不和LLVM的功能密切相关 llvm/include/llvm/Config configure脚本生成的头文件,主要是Unix/C中标准头文件的包装。 llvm/lib 大部分的源代码都在这里,LLVM中几乎所有的代码都以库的形式存在 llvm/lib/VMCore/ llvm/lib/AsmParser/ llvm/lib/BitCode/ llvm/lib/Analysis/ llvm/lib/Transforms/ llvm/lib/Target/ llvm/lib/CodeGen/ llvm/lib/Debugger/ llvm/lib/ExecutionEngine/ llvm/lib/Support/ llvm/lib/System/ llvm/projects 并非LLVM一部分,但与LLVM共同发布的项目 llvm/runtime 需要LLVM-GCC编译 llvm/test llvm/tools 各种使用LLVM命令行工具 llvm/utils 帮助开发LLVM的命令行工具