diff --git a/llvm/bindings/ocaml/target/llvm_target.ml b/llvm/bindings/ocaml/target/llvm_target.ml index f968587576fa6dd1505a23eadf969f69c0be40ad..9e6b706b29ea8c2a8891302bc7f86c83a49d6892 100644 --- a/llvm/bindings/ocaml/target/llvm_target.ml +++ b/llvm/bindings/ocaml/target/llvm_target.ml @@ -121,6 +121,8 @@ module TargetMachine = struct = "llvm_targetmachine_cpu" external features : t -> string = "llvm_targetmachine_features" + external data_layout : t -> DataLayout.t + = "llvm_targetmachine_data_layout" external add_analysis_passes : [< Llvm.PassManager.any ] Llvm.PassManager.t -> t -> unit = "llvm_targetmachine_add_analysis_passes" external set_verbose_asm : bool -> t -> unit diff --git a/llvm/bindings/ocaml/target/llvm_target.mli b/llvm/bindings/ocaml/target/llvm_target.mli index c1e52317c49bfd0a9fdcba05aa7d12486c544997..c59308c34e5434078c466562c18aa68bda239d5c 100644 --- a/llvm/bindings/ocaml/target/llvm_target.mli +++ b/llvm/bindings/ocaml/target/llvm_target.mli @@ -194,6 +194,9 @@ module TargetMachine : sig [llvm::TargetMachine::getCPU]. *) val cpu : t -> string + (** Returns the data layout of this target machine. *) + val data_layout : t -> DataLayout.t + (** Returns the feature string used while creating this target machine. See [llvm::TargetMachine::getFeatureString]. *) val features : t -> string diff --git a/llvm/bindings/ocaml/target/target_ocaml.c b/llvm/bindings/ocaml/target/target_ocaml.c index 4cd64dce3aea20c7eec7b2672074cf5c8ef6d977..b63bef6d3d5b1d56161fbfc211eb4607fc1e49f6 100644 --- a/llvm/bindings/ocaml/target/target_ocaml.c +++ b/llvm/bindings/ocaml/target/target_ocaml.c @@ -296,6 +296,12 @@ CAMLprim value llvm_targetmachine_features(value Machine) { TargetMachine_val(Machine))); } +/* TargetMachine.t -> DataLayout.t */ +CAMLprim value llvm_targetmachine_data_layout(value Machine) { + return llvm_alloc_data_layout(LLVMCreateTargetDataLayout( + TargetMachine_val(Machine))); +} + /* bool -> TargetMachine.t -> unit */ CAMLprim value llvm_targetmachine_set_verbose_asm(value Verb, value Machine) { LLVMSetTargetMachineAsmVerbosity(TargetMachine_val(Machine), Bool_val(Verb)); diff --git a/llvm/test/Bindings/OCaml/target.ml b/llvm/test/Bindings/OCaml/target.ml index 26deb46a8d80f3c24848ae555525a0a91d695135..b9642eb68889d6eeddf64311994312a6e75703ab 100644 --- a/llvm/test/Bindings/OCaml/target.ml +++ b/llvm/test/Bindings/OCaml/target.ml @@ -81,6 +81,7 @@ let test_target_machine () = assert_equal (TM.triple machine) (Target.default_triple ()); assert_equal (TM.cpu machine) ""; assert_equal (TM.features machine) ""; + ignore (TM.data_layout machine); TM.set_verbose_asm true machine; let pm = PassManager.create () in TM.add_analysis_passes pm machine