On this page:
4.1 Builder Setup
llvm-builder-create
llvm-append-basic-block
llvm-builder-position-at-end
llvm-get-param
llvm-get-insert-block
4.2 Return Instructions
llvm-build-ret
llvm-build-ret-void
4.3 Arithmetic Instructions
llvm-build-add
llvm-build-sub
llvm-build-mul
llvm-build-s-div
llvm-build-u-div
llvm-build-s-rem
llvm-build-u-rem
llvm-build-neg
llvm-build-f-add
llvm-build-f-sub
llvm-build-f-mul
llvm-build-f-div
llvm-build-f-rem
llvm-build-f-neg
4.4 Bitwise Instructions
llvm-build-and
llvm-build-or
llvm-build-xor
llvm-build-not
llvm-build-shl
llvm-build-l-shr
llvm-build-a-shr
4.5 Comparison Instructions
llvm-build-i-cmp
llvm-build-f-cmp
llvm-build-is-null
llvm-build-is-not-null
4.6 Control Flow
llvm-build-br
llvm-build-cond-br
llvm-build-switch
llvm-add-case
llvm-build-unreachable
llvm-build-select
4.7 Memory Instructions
llvm-build-alloca
llvm-build-malloc
llvm-build-load2
llvm-build-store
llvm-build-ge2
llvm-build-struct-ge2
llvm-build-free
4.8 Function Calls
llvm-build-call2
4.9 Type Cast Instructions
llvm-build-trunc
llvm-build-z-ext
llvm-build-s-ext
llvm-build-fp-to-si
llvm-build-fp-to-ui
llvm-build-si-to-fp
llvm-build-ui-to-fp
llvm-build-fp-trunc
llvm-build-fp-ext
llvm-build-bit-cast
llvm-build-ptr-to-int
llvm-build-int-to-ptr
4.10 PHI Nodes
llvm-build-phi
llvm-add-incoming
4.11 Other Instructions
llvm-build-freeze
llvm-build-global-string
llvm-build-global-string-ptr
9.1.0.3

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🔗ℹ

Creates a new instruction builder.

procedure

(llvm-append-basic-block function)  LLVMBasicBlockRef?

  function : LLVMValueRef?
Creates and appends a new basic block to the given function.

procedure

(llvm-builder-position-at-end builder    
  basic-block)  void?
  builder : LLVMBuilderRef?
  basic-block : LLVMBasicBlockRef?
Sets builder insert position to the end of basic-block.

procedure

(llvm-get-param function index)  LLVMValueRef?

  function : LLVMValueRef?
  index : integer?
Gets parameter from function by index.

procedure

(llvm-get-insert-block builder)  LLVMBasicBlockRef?

  builder : LLVMBuilderRef?
Returns the basic block the builder is currently positioned at.

4.2 Return Instructions🔗ℹ

procedure

(llvm-build-ret builder value)  LLVMValueRef?

  builder : LLVMBuilderRef?
  value : LLVMValueRef?
Builds a return instruction returning value.

procedure

(llvm-build-ret-void builder)  LLVMValueRef?

  builder : LLVMBuilderRef?
Builds a void return instruction.

4.3 Arithmetic Instructions🔗ℹ

All arithmetic instructions take a builder, operands, and a name string for the result register.

procedure

(llvm-build-add builder lhs rhs [name])  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string? = ""
Integer addition.

procedure

(llvm-build-sub builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Integer subtraction.

procedure

(llvm-build-mul builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Integer multiplication.

procedure

(llvm-build-s-div builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Signed integer division.

procedure

(llvm-build-u-div builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Unsigned integer division.

procedure

(llvm-build-s-rem builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Signed integer remainder.

procedure

(llvm-build-u-rem builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Unsigned integer remainder.

procedure

(llvm-build-neg builder val name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  name : string?
Integer negation.

procedure

(llvm-build-f-add builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Floating-point addition.

procedure

(llvm-build-f-sub builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Floating-point subtraction.

procedure

(llvm-build-f-mul builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Floating-point multiplication.

procedure

(llvm-build-f-div builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Floating-point division.

procedure

(llvm-build-f-rem builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Floating-point remainder.

procedure

(llvm-build-f-neg builder val name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  name : string?
Floating-point negation.

4.4 Bitwise Instructions🔗ℹ

procedure

(llvm-build-and builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Bitwise AND.

procedure

(llvm-build-or builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Bitwise OR.

procedure

(llvm-build-xor builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Bitwise XOR.

procedure

(llvm-build-not builder val name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  name : string?
Bitwise NOT.

procedure

(llvm-build-shl builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Shift left.

procedure

(llvm-build-l-shr builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Logical shift right.

procedure

(llvm-build-a-shr builder lhs rhs name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string?
Arithmetic shift right.

4.5 Comparison Instructions🔗ℹ

procedure

(llvm-build-i-cmp builder    
  predicate    
  lhs    
  rhs    
  [name])  LLVMValueRef?
  builder : LLVMBuilderRef?
  predicate : symbol?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string? = ""
Integer comparison. predicate is one of: 'int-eq, 'int-ne, 'int-ugt, 'int-uge, 'int-ult, 'int-ule (unsigned), 'int-sgt, 'int-sge, 'int-slt, 'int-sle (signed).

procedure

(llvm-build-f-cmp builder    
  predicate    
  lhs    
  rhs    
  [name])  LLVMValueRef?
  builder : LLVMBuilderRef?
  predicate : symbol?
  lhs : LLVMValueRef?
  rhs : LLVMValueRef?
  name : string? = ""
Floating-point comparison. predicate is one of: 'real-oeq, 'real-ogt, 'real-oge, 'real-olt, 'real-ole, 'real-one, 'real-ord (ordered), 'real-ueq, 'real-ugt, 'real-uge, 'real-ult, 'real-ule, 'real-uno (unordered), 'real-predicate-false, 'real-predicate-true.

procedure

(llvm-build-is-null builder val name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  name : string?
Checks if value is null.

procedure

(llvm-build-is-not-null builder val name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  name : string?
Checks if value is not null.

4.6 Control Flow🔗ℹ

procedure

(llvm-build-br builder dest)  LLVMValueRef?

  builder : LLVMBuilderRef?
  dest : LLVMBasicBlockRef?
Unconditional branch to dest.

procedure

(llvm-build-cond-br builder    
  cond    
  then-block    
  else-block)  LLVMValueRef?
  builder : LLVMBuilderRef?
  cond : LLVMValueRef?
  then-block : LLVMBasicBlockRef?
  else-block : LLVMBasicBlockRef?
Conditional branch. Jumps to then-block if cond is true, otherwise else-block.

procedure

(llvm-build-switch builder    
  val    
  default-block    
  num-cases)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  default-block : LLVMBasicBlockRef?
  num-cases : exact-nonnegative-integer?
Creates a switch instruction. Use llvm-add-case to add cases.

procedure

(llvm-add-case switch on-val dest)  void?

  switch : LLVMValueRef?
  on-val : LLVMValueRef?
  dest : LLVMBasicBlockRef?
Adds a case to a switch instruction.

procedure

(llvm-build-unreachable builder)  LLVMValueRef?

  builder : LLVMBuilderRef?
Marks a point in code as unreachable.

procedure

(llvm-build-select builder    
  cond    
  then-val    
  else-val    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  cond : LLVMValueRef?
  then-val : LLVMValueRef?
  else-val : LLVMValueRef?
  name : string?
Selects between two values based on a condition (like a ternary operator).

4.7 Memory Instructions🔗ℹ

procedure

(llvm-build-alloca builder type name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  type : LLVMTypeRef?
  name : string?
Allocates memory on the stack for the given type.

procedure

(llvm-build-malloc builder type name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  type : LLVMTypeRef?
  name : string?
Allocates memory on the heap for the given type.

procedure

(llvm-build-load2 builder type ptr name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  type : LLVMTypeRef?
  ptr : LLVMValueRef?
  name : string?
Loads a value of type from the pointer ptr.

procedure

(llvm-build-store builder val ptr)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  ptr : LLVMValueRef?
Stores val to the pointer ptr.

procedure

(llvm-build-ge2 builder    
  type    
  ptr    
  indices    
  num-indices    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  type : LLVMTypeRef?
  ptr : LLVMValueRef?
  indices : cpointer?
  num-indices : exact-nonnegative-integer?
  name : string?
Computes a pointer to a sub-element of an aggregate type (GEP — Get Element Pointer).

procedure

(llvm-build-struct-ge2 builder    
  type    
  ptr    
  index    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  type : LLVMTypeRef?
  ptr : LLVMValueRef?
  index : exact-nonnegative-integer?
  name : string?
Computes a pointer to a field of a struct type.

procedure

(llvm-build-free builder ptr)  LLVMValueRef?

  builder : LLVMBuilderRef?
  ptr : LLVMValueRef?
Frees heap-allocated memory.

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? = ""
Calls fn with the given args. fn-type is the function’s type. name names the return value (use "" for void calls).

4.9 Type Cast Instructions🔗ℹ

procedure

(llvm-build-trunc builder val dest-type name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Truncates an integer to a narrower type.

procedure

(llvm-build-z-ext builder val dest-type name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Zero-extends an integer to a wider type.

procedure

(llvm-build-s-ext builder val dest-type name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Sign-extends an integer to a wider type.

procedure

(llvm-build-fp-to-si builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Converts a floating-point value to a signed integer.

procedure

(llvm-build-fp-to-ui builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Converts a floating-point value to an unsigned integer.

procedure

(llvm-build-si-to-fp builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Converts a signed integer to a floating-point value.

procedure

(llvm-build-ui-to-fp builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Converts an unsigned integer to a floating-point value.

procedure

(llvm-build-fp-trunc builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Truncates a float to a narrower float type.

procedure

(llvm-build-fp-ext builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Extends a float to a wider float type.

procedure

(llvm-build-bit-cast builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Reinterprets the bits of a value as a different type of the same size.

procedure

(llvm-build-ptr-to-int builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Converts a pointer to an integer.

procedure

(llvm-build-int-to-ptr builder    
  val    
  dest-type    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  dest-type : LLVMTypeRef?
  name : string?
Converts an integer to a pointer.

4.10 PHI Nodes🔗ℹ

procedure

(llvm-build-phi builder type name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  type : LLVMTypeRef?
  name : string?
Creates a PHI node of the given type. Use llvm-add-incoming to add incoming values from predecessor blocks.

procedure

(llvm-add-incoming phi values blocks count)  void?

  phi : LLVMValueRef?
  values : cpointer?
  blocks : cpointer?
  count : exact-nonnegative-integer?
Adds incoming values to a PHI node. Each value comes from a corresponding predecessor basic block.

4.11 Other Instructions🔗ℹ

procedure

(llvm-build-freeze builder val name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  val : LLVMValueRef?
  name : string?
Freezes a potentially undefined or poison value to a fixed value.

procedure

(llvm-build-global-string builder str name)  LLVMValueRef?

  builder : LLVMBuilderRef?
  str : string?
  name : string?
Creates a global string constant.

procedure

(llvm-build-global-string-ptr builder    
  str    
  name)  LLVMValueRef?
  builder : LLVMBuilderRef?
  str : string?
  name : string?
Creates a pointer to a global string constant.