+(** The opcodes for LLVM instructions and constant expressions. *)
+module Opcode : sig
+ type t =
+ | Invalid (* not an instruction *)
+ (* Terminator Instructions *)
+ | Ret
+ | Br
+ | Switch
+ | IndirectBr
+ | Invoke
+ | Invalid2
+ | Unreachable
+ (* Standard Binary Operators *)
+ | Add
+ | FAdd
+ | Sub
+ | FSub
+ | Mul
+ | FMul
+ | UDiv
+ | SDiv
+ | FDiv
+ | URem
+ | SRem
+ | FRem
+ (* Logical Operators *)
+ | Shl
+ | LShr
+ | AShr
+ | And
+ | Or
+ | Xor
+ (* Memory Operators *)
+ | Alloca
+ | Load
+ | Store
+ | GetElementPtr
+ (* Cast Operators *)
+ | Trunc
+ | ZExt
+ | SExt
+ | FPToUI
+ | FPToSI
+ | UIToFP
+ | SIToFP
+ | FPTrunc
+ | FPExt
+ | PtrToInt
+ | IntToPtr
+ | BitCast
+ (* Other Operators *)
+ | ICmp
+ | FCmp
+ | PHI
+ | Call
+ | Select
+ | UserOp1
+ | UserOp2
+ | VAArg
+ | ExtractElement
+ | InsertElement
+ | ShuffleVector
+ | ExtractValue
+ | InsertValue
+ | Fence
+ | AtomicCmpXchg
+ | AtomicRMW
+ | Resume
+ | LandingPad
+end
+
+(** The type of a clause of a [landingpad] instruction.
+ See [llvm::LandingPadInst::ClauseType]. *)
+module LandingPadClauseTy : sig
+ type t =
+ | Catch
+ | Filter
+end
+
+(** The thread local mode of a global value, accessed with {!thread_local_mode}
+ and {!set_thread_local_mode}.
+ See [llvm::GlobalVariable::ThreadLocalMode]. *)
+module ThreadLocalMode : sig
+ type t =
+ | None
+ | GeneralDynamic
+ | LocalDynamic
+ | InitialExec
+ | LocalExec
+end
+
+(** The ordering of an atomic [load], [store], [cmpxchg], [atomicrmw] or
+ [fence] instruction. See [llvm::AtomicOrdering]. *)
+module AtomicOrdering : sig
+ type t =
+ | NotAtomic
+ | Unordered
+ | Monotonic
+ | Invalid (* removed due to API changes *)
+ | Acquire
+ | Release
+ | AcqiureRelease
+ | SequentiallyConsistent
+end
+
+(** The opcode of an [atomicrmw] instruction.
+ See [llvm::AtomicRMWInst::BinOp]. *)
+module AtomicRMWBinOp : sig
+ type t =
+ | Xchg
+ | Add
+ | Sub
+ | And
+ | Nand
+ | Or
+ | Xor
+ | Max
+ | Min
+ | UMax
+ | UMin
+end
+
+(** The kind of an [llvalue], the result of [classify_value v].
+ See the various [LLVMIsA*] functions. *)
+module ValueKind : sig
+ type t =
+ | NullValue
+ | Argument
+ | BasicBlock
+ | InlineAsm
+ | MDNode
+ | MDString
+ | BlockAddress
+ | ConstantAggregateZero
+ | ConstantArray
+ | ConstantExpr
+ | ConstantFP
+ | ConstantInt
+ | ConstantPointerNull
+ | ConstantStruct
+ | ConstantVector
+ | Function
+ | GlobalAlias
+ | GlobalVariable
+ | UndefValue
+ | Instruction of Opcode.t
+end
+