LLVM 语言参考手册

    • 摘要
    • 简介
      • 良好的形式
    • 标识符
    • 高层结构
      • 模块结构
      • 连接类型
      • 调用转换(Calling Convertions)
      • Visibility Styles
      • DLL Storage Classes
      • 线程本地存储模型(Thread Local Storage Models)
      • 结构类型
      • 全局变量
      • 函数
      • 别名
      • Comdats
      • Named Metadata
      • 参数属性
      • 垃圾回收器名
      • Prefix Data
      • Prologue Data
      • 属性组
      • 函数属性
      • 模块级别内联汇编
      • 数据布局(Data Layout)
      • Target Triple
      • Pointer Aliasing Rules
      • Volatile Memory Access
      • 并行操作的内存模型
      • Atomic Memory Ordering Constraints
      • Fast-Math Flags
      • Use-list Order Directives
    • 类型系统
      • Void 类型
      • Function 类型
      • First Class Type
        • 单值类型(Single Value Types)
          • 整数类型
          • 浮点数类型
          • X86_mmx 类型
          • 指针类型
          • 向量(Vector)类型
        • 标签(Label)类型
        • Metadata 类型
        • 集合(Aggregate)类型
          • 数组类型
          • 结构(Structure)类型
          • Opaque Structure Types
    • 常量(Constants)
      • 简单常量
      • Complex 常量
      • 全局变量和函数地址
      • Undefined Values
      • Poison Values
      • 基本块地址(Address of Basic Blocks)
      • 常量表达式(Constant Expressions)
    • 其他值(Other Values)
      • 内联汇编表达式
        • Inline Asm Metadata
      • Metadata Nodes and Metadata Strings
        • tbaa
        • tbaa.struct
        • noalias and alias.scope
        • fpmath
        • range
        • llvm.loop
        • llvm.loop.vectorize and llvm.loop.interleave
        • llvm.loop.interleave.count
        • llvm.loop.vectorize.enable
        • llvm.loop.vectorize.width
        • llvm.loop.unroll
        • llvm.loop.unroll.count
        • llvm.loop.unroll.full
        • llvm.mem
        • llvm.mem.parallel_loop_access
    • Module Flags Metadata
      • Objective-C Garbage Collection Module Flags Metadata
      • Automatic Linker Flags Module Flags Metadata
      • C type width Module Flags Metadata
    • Intrinsic Global Variables
      • llvm.used
      • llvm.compiler.used
      • llvm.global_ctors
      • llvm.global_dtors
    • 指令参考(Instruction Reference)
      • 终结符指令
      • 二元操作
        • add
        • fadd
        • sub
        • fsub
        • mul
        • fmul
        • udiv
        • sdiv
        • fdiv
        • urem
        • srem
        • frem
      • 位二元操作
        • shl
        • lshr
        • ashr
        • and
        • or
        • xor
      • 向量操作
        • extractelement
        • insertelement
        • shufflevector
      • 集合操作(Aggregate Operations)
        • extractvalue
        • insertvalue
      • 内存操作和地址操作
        • alloca
        • load
        • store
        • fence
        • cmpxchg
        • atomicrmw
        • getelementptr
      • 转换操作(Convertion Operations)
        • trunc … to
        • zext … to
        • sext … to
        • fptrunc … to
        • fpext … to
        • fptosi … to
        • uitofp … to
        • sitofp … to
        • ptrtoint … to
        • inttoptr … to
        • bitcase … to
        • addrspacecast … to
      • 其他操作
        • icmp
        • fcmp
        • phi
        • select
        • call
        • va_arg
        • landingpad
    • Intrinsic Functions
      • Variable Argument Handling Intrinsics
        • llvm.va_start
        • llvm.va_end
        • llvm.va_copy
      • Code Generator Intrinsics
        • llvm.returnaddress
        • llvm.frameaddress
        • llvm.read_register and llvm.write_register
        • llvm.stackrestore
        • llvm.prefetch
        • llvm.pcmarker
        • llvm.readcyclecounter
        • llvm.clear_cache
      • Standard C Library Intrinsics
        • llvm.memcpy
        • llvm.memmove
        • llvm.memset
        • llvm.sqrt.*
        • llvm.powi.*
        • llvm.sin.*
        • llvm.cos.*
        • llvm.pow.*
        • llvm.exp.*
        • llvm.exp2.*
        • llvm.log.*
        • llvm.log10.*
        • llvm.log2.*
        • llvm.fma.*
        • llvm.fabs.*
        • llvm.minnum.*
        • llvm.maxnum.*
        • llvm.copysign.*
        • llvm.floor.*
        • llvm.ceil.*
        • llvm.trunc.*
        • llvm.rint.*
        • llvm.nearbyint.*
        • llvm.round.*
      • Bit Manipulation Intrinsics
        • llvm.bswap.*
        • llvm.ctpop.*
        • llvm.ctlz.*
        • llvm.cttz.*
      • Arithmetic with Overflow Intrinsics
        • llvm.sadd.with.overflow.*
        • llvm.uadd.with.overflow.*
        • llvm.ssub.with.overflow.*
        • llvm.usub.with.overflow.*
        • llvm.smul.with.overflow.*
        • llvm.umul.with.overflow.*
      • Specialised Arithmetic Intrinsics
        • llvm.fmuladd
      • Half Precision Floating Point Intrinsics
        • llvm.convert.to.fp16
        • llvm.convert.from.fp16
      • Debugger Intrinsics
      • Exception Handling Intrinsics
      • Trampoline Intrinsics
        • llvm.init.trampoline
        • llvm.adjust.trampoline
      • 内存使用标识(Memory Use Marker)
        • llvm.lifetime.start
        • llvm.lifetime.end
        • llvm.invariant.start
        • llvm.invariant.end
      • General Intrinsics
        • llvm.var.annotation
        • llvm.ptr.annotation.*
        • llvm.annotation.*
        • llvm.trap
        • llvm.debugtrap
        • llvm.stackprotector
        • llvm.stackprotectorcheck
        • llvm.objectsize
        • llvm.expect
        • llvm.assume
      • Stack Map Intrinsics

    这份文档是LLVM汇编语言的一个参考手册。LLVM是一个基于静态单赋值(Static Single Assignment SSA)表示提供了类型安全、低级别操作、弹性和简洁的表示所有高级语言的能力。是在LLVM编译策略中一直使用的通用代码表示。

    介绍(Introduction)

    LLVM表示旨在表达,输入和扩展同时做到轻量级和低级别。既旨在作为一个通用IR,又足够低级使得高级主意可以很简洁的映射到它(类似微处理器是通用IR,允许很多源语言映射到它们)。通过提供类型信息,LLVM可以被用作优化的目标,举例来说,可以通过指针分析,可以证明一个C自动变量永远不会在当前函数之外被访问,允许它作为一个简单的SSA值而不是一个内存位置。

    因为%x的定义并没有覆盖它所有的使用。