diff --git a/llvm/bindings/ocaml/llvm/llvm.ml b/llvm/bindings/ocaml/llvm/llvm.ml index f3ff600bde4f3b..fdef6eb176d6b8 100644 --- a/llvm/bindings/ocaml/llvm/llvm.ml +++ b/llvm/bindings/ocaml/llvm/llvm.ml @@ -1355,6 +1355,8 @@ external build_is_not_null : llvalue -> string -> llbuilder -> llvalue = "llvm_build_is_not_null" external build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue = "llvm_build_ptrdiff" +external build_freeze : llvalue -> string -> llbuilder -> llvalue + = "llvm_build_freeze" (*===-- Memory buffers ----------------------------------------------------===*) diff --git a/llvm/bindings/ocaml/llvm/llvm.mli b/llvm/bindings/ocaml/llvm/llvm.mli index 6e145fa44f0458..48e099faf10051 100644 --- a/llvm/bindings/ocaml/llvm/llvm.mli +++ b/llvm/bindings/ocaml/llvm/llvm.mli @@ -2591,6 +2591,12 @@ val build_is_not_null : llvalue -> string -> llbuilder -> llvalue See the method [llvm::LLVMBuilder::CreatePtrDiff]. *) val build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue +(** [build_freeze x name b] creates a + [%name = freeze %x] + instruction at the position specified by the instruction builder [b]. + See the method [llvm::LLVMBuilder::CreateFreeze]. *) +val build_freeze : llvalue -> string -> llbuilder -> llvalue + (** {6 Memory buffers} *) diff --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c index 6af34bd9c17209..1552abf29c039b 100644 --- a/llvm/bindings/ocaml/llvm/llvm_ocaml.c +++ b/llvm/bindings/ocaml/llvm/llvm_ocaml.c @@ -2451,6 +2451,12 @@ CAMLprim LLVMValueRef llvm_build_ptrdiff(LLVMValueRef LHS, LLVMValueRef RHS, return LLVMBuildPtrDiff(Builder_val(B), LHS, RHS, String_val(Name)); } +/* llvalue -> string -> llbuilder -> llvalue */ +CAMLprim LLVMValueRef llvm_build_freeze(LLVMValueRef X, + value Name, value B) { + return LLVMBuildFreeze(Builder_val(B), X, String_val(Name)); +} + /*===-- Memory buffers ----------------------------------------------------===*/ /* string -> llmemorybuffer diff --git a/llvm/test/Bindings/OCaml/core.ml b/llvm/test/Bindings/OCaml/core.ml index 95d485ae76d2d8..86f865267cfa08 100644 --- a/llvm/test/Bindings/OCaml/core.ml +++ b/llvm/test/Bindings/OCaml/core.ml @@ -1370,6 +1370,7 @@ let test_builder () = * CHECK: %build_nuw_neg = sub nuw i32 0, %P1 * CHECK: %build_fneg = fneg float %F1 * CHECK: %build_not = xor i32 %P1, -1 + * CHECK: %build_freeze = freeze i32 %P1 *) ignore (build_add p1 p2 "build_add" b); ignore (build_nsw_add p1 p2 "build_nsw_add" b);