4 Builder
The builder is used to construct LLVM IR instructions. Create a builder, position it at the end of a basic block, then use the llvm-build-* functions to emit instructions.
4.1 Builder Setup
procedure
procedure
(llvm-append-basic-block function [name]) → LLVMBasicBlockRef?
function : LLVMValueRef? name : string? = ""
procedure
(llvm-builder-position-at-end builder basic-block) → void? builder : LLVMBuilderRef? basic-block : LLVMBasicBlockRef?
procedure
(llvm-get-param function index) → LLVMValueRef?
function : LLVMValueRef? index : integer?
procedure
(llvm-get-insert-block builder) → LLVMBasicBlockRef?
builder : LLVMBuilderRef?
4.2 Return Instructions
procedure
(llvm-build-ret builder value) → LLVMValueRef?
builder : LLVMBuilderRef? value : LLVMValueRef?
procedure
(llvm-build-ret-void builder) → LLVMValueRef?
builder : LLVMBuilderRef?
procedure
(llvm-build-aggregate-ret builder ret-vals) → LLVMValueRef?
builder : LLVMBuilderRef? ret-vals : (listof LLVMValueRef?)
4.3 Arithmetic Instructions
All arithmetic instructions take a builder, operands, and an optional name string (defaulting to "") for the result register.
procedure
(llvm-build-add builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-sub builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-mul builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-sdiv builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-udiv builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-srem builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-urem builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-neg builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nswadd builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nswsub builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nswmul builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nswneg builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nuwadd builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nuwsub builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nuwmul builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-nuwneg builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
procedure
(llvm-build-fadd builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-fsub builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-fmul builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-fdiv builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-frem builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-fneg builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
4.4 Bitwise Instructions
procedure
(llvm-build-and builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-or builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-xor builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-not builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
procedure
(llvm-build-shl builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-lshr builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
procedure
(llvm-build-ashr builder lhs rhs [name]) → LLVMValueRef?
builder : LLVMBuilderRef? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
4.5 Comparison Instructions
procedure
(llvm-build-icmp builder predicate lhs rhs [ name]) → LLVMValueRef? builder : LLVMBuilderRef? predicate : symbol? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
The alias llvm-build-int-cmp is also available.
procedure
(llvm-build-fcmp builder predicate lhs rhs [ name]) → LLVMValueRef? builder : LLVMBuilderRef? predicate : symbol? lhs : LLVMValueRef? rhs : LLVMValueRef? name : string? = ""
The alias llvm-build-float-cmp is also available.
procedure
(llvm-build-is-null builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
procedure
(llvm-build-is-not-null builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
4.6 Control Flow
procedure
(llvm-build-br builder dest) → LLVMValueRef?
builder : LLVMBuilderRef? dest : LLVMBasicBlockRef?
procedure
(llvm-build-cond-br builder cond then-block else-block) → LLVMValueRef? builder : LLVMBuilderRef? cond : LLVMValueRef? then-block : LLVMBasicBlockRef? else-block : LLVMBasicBlockRef?
procedure
(llvm-build-switch builder val default-block num-cases) → LLVMValueRef? builder : LLVMBuilderRef? val : LLVMValueRef? default-block : LLVMBasicBlockRef? num-cases : exact-nonnegative-integer?
procedure
(llvm-add-case switch on-val dest) → void?
switch : LLVMValueRef? on-val : LLVMValueRef? dest : LLVMBasicBlockRef?
procedure
(llvm-build-unreachable builder) → LLVMValueRef?
builder : LLVMBuilderRef?
procedure
(llvm-build-select builder if then else [name]) → LLVMValueRef?
builder : LLVMBuilderRef? if : LLVMValueRef? then : LLVMValueRef? else : LLVMValueRef? name : string? = ""
4.7 Memory Instructions
procedure
(llvm-build-alloca builder ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-malloc builder ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-array-alloca builder ty val [name]) → LLVMValueRef?
builder : LLVMBuilderRef? ty : LLVMTypeRef? val : LLVMValueRef? name : string? = ""
procedure
(llvm-build-array-malloc builder ty val [name]) → LLVMValueRef?
builder : LLVMBuilderRef? ty : LLVMTypeRef? val : LLVMValueRef? name : string? = ""
procedure
(llvm-build-load2 builder ty pointer-val [ name]) → LLVMValueRef? builder : LLVMBuilderRef? ty : LLVMTypeRef? pointer-val : LLVMValueRef? name : string? = ""
procedure
(llvm-build-store builder val ptr) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? ptr : LLVMValueRef?
procedure
(llvm-build-gep2 builder ty pointer indices [ name]) → LLVMValueRef? builder : LLVMBuilderRef? ty : LLVMTypeRef? pointer : LLVMValueRef? indices : (listof LLVMValueRef?) name : string? = ""
procedure
(llvm-build-in-bounds-gep2 builder ty pointer indices [ name]) → LLVMValueRef? builder : LLVMBuilderRef? ty : LLVMTypeRef? pointer : LLVMValueRef? indices : (listof LLVMValueRef?) name : string? = ""
procedure
(llvm-build-struct-gep2 builder ty pointer idx [ name]) → LLVMValueRef? builder : LLVMBuilderRef? ty : LLVMTypeRef? pointer : LLVMValueRef? idx : exact-nonnegative-integer? name : string? = ""
procedure
(llvm-build-free builder ptr) → LLVMValueRef?
builder : LLVMBuilderRef? ptr : LLVMValueRef?
4.8 Function Calls
procedure
(llvm-build-call2 builder fn-type fn args [ name]) → LLVMValueRef? builder : LLVMBuilderRef? fn-type : LLVMTypeRef? fn : LLVMValueRef? args : (listof LLVMValueRef?) name : string? = ""
procedure
(llvm-build-invoke2 builder fn-ty fn args then catch [ name]) → LLVMValueRef? builder : LLVMBuilderRef? fn-ty : LLVMTypeRef? fn : LLVMValueRef? args : (listof LLVMValueRef?) then : LLVMBasicBlockRef? catch : LLVMBasicBlockRef? name : string? = ""
4.9 Type Cast Instructions
procedure
(llvm-build-trunc builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-zext builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-sext builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-fp->si builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-fp->ui builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-si->fp builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-ui->fp builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-fp-trunc builder val dest-ty [ name]) → LLVMValueRef? builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-fp-ext builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-bitcast builder val dest-ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-ptr->int builder val dest-ty [ name]) → LLVMValueRef? builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-int->ptr builder val dest-ty [ name]) → LLVMValueRef? builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-build-addrspace-cast builder val dest-ty [ name]) → LLVMValueRef? builder : LLVMBuilderRef? val : LLVMValueRef? dest-ty : LLVMTypeRef? name : string? = ""
4.10 PHI Nodes
procedure
(llvm-build-phi builder ty [name]) → LLVMValueRef?
builder : LLVMBuilderRef? ty : LLVMTypeRef? name : string? = ""
procedure
(llvm-add-incoming phi incoming-values incoming-blocks) → void? phi : LLVMValueRef? incoming-values : (listof LLVMValueRef?) incoming-blocks : (listof LLVMBasicBlockRef?)
4.11 Vector Instructions
procedure
(llvm-build-extract-element builder vec-val index [ name]) → LLVMValueRef? builder : LLVMBuilderRef? vec-val : LLVMValueRef? index : LLVMValueRef? name : string? = ""
procedure
(llvm-build-insert-element builder vec-val elt-val index [ name]) → LLVMValueRef? builder : LLVMBuilderRef? vec-val : LLVMValueRef? elt-val : LLVMValueRef? index : LLVMValueRef? name : string? = ""
procedure
(llvm-build-shuffle-vector builder v1 v2 mask [ name]) → LLVMValueRef? builder : LLVMBuilderRef? v1 : LLVMValueRef? v2 : LLVMValueRef? mask : LLVMValueRef? name : string? = ""
4.12 Aggregate Instructions
procedure
(llvm-build-extract-value builder agg-val index [ name]) → LLVMValueRef? builder : LLVMBuilderRef? agg-val : LLVMValueRef? index : exact-nonnegative-integer? name : string? = ""
procedure
(llvm-build-insert-value builder agg-val elt-val index [ name]) → LLVMValueRef? builder : LLVMBuilderRef? agg-val : LLVMValueRef? elt-val : LLVMValueRef? index : exact-nonnegative-integer? name : string? = ""
4.13 Other Instructions
procedure
(llvm-build-freeze builder v [name]) → LLVMValueRef?
builder : LLVMBuilderRef? v : LLVMValueRef? name : string? = ""
procedure
(llvm-build-global-string builder str [name]) → LLVMValueRef?
builder : LLVMBuilderRef? str : string? name : string? = ""
procedure
(llvm-build-global-string-ptr builder str [ name]) → LLVMValueRef? builder : LLVMBuilderRef? str : string? name : string? = ""
procedure
(llvm-build-string-ptr builder str [name]) → LLVMValueRef?
builder : LLVMBuilderRef? str : string? name : string? = ""
4.14 Value Queries
procedure
(llvm-typeof val) → LLVMTypeRef?
val : LLVMValueRef?
procedure
(llvm-constant? val) → boolean?
val : LLVMValueRef?
procedure
(llvm-undef? val) → boolean?
val : LLVMValueRef?
procedure
(llvm-poison? val) → boolean?
val : LLVMValueRef?