From 442e076ce3fb6a90264e8d7d11da427fba1f478c Mon Sep 17 00:00:00 2001 From: whitequark Date: Tue, 18 Sep 2018 13:36:03 +0000 Subject: [PATCH] [LLVM-C][OCaml] Add UnifyFunctionExitNodes pass to C and OCaml APIs Summary: Adds LLVMAddUnifyFunctionExitNodesPass to expose createUnifyFunctionExitNodesPass to the C and OCaml APIs. Reviewers: whitequark, deadalnix Reviewed By: whitequark Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D52212 llvm-svn: 342476 --- bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml | 3 +++ bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli | 5 +++++ bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c | 6 ++++++ include/llvm-c/Transforms/Scalar.h | 3 +++ lib/Transforms/Scalar/Scalar.cpp | 5 +++++ 5 files changed, 22 insertions(+) diff --git a/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml b/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml index 5d349e6d0b7..dcaf7e5e38f 100644 --- a/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml +++ b/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml @@ -121,3 +121,6 @@ external add_scoped_no_alias_alias_analysis external add_basic_alias_analysis : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit = "llvm_add_basic_alias_analysis" +external add_unify_function_exit_nodes + : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit + = "llvm_add_unify_function_exit_nodes" diff --git a/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli b/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli index f49448eeab4..6767c001ac6 100644 --- a/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli +++ b/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli @@ -201,3 +201,8 @@ external add_scoped_no_alias_alias_analysis external add_basic_alias_analysis : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit = "llvm_add_basic_alias_analysis" + +(** See the [llvm::createUnifyFunctionExitNodesPass] function. *) +external add_unify_function_exit_nodes + : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit + = "llvm_add_unify_function_exit_nodes" diff --git a/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c b/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c index 94b3da9f3ef..0b52f36c0ed 100644 --- a/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c +++ b/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c @@ -248,3 +248,9 @@ CAMLprim value llvm_add_basic_alias_analysis(LLVMPassManagerRef PM) { LLVMAddBasicAliasAnalysisPass(PM); return Val_unit; } + +/* [ unit */ +CAMLprim value llvm_add_unify_function_exit_nodes(LLVMPassManagerRef PM) { + LLVMAddUnifyFunctionExitNodesPass(PM); + return Val_unit; +} diff --git a/include/llvm-c/Transforms/Scalar.h b/include/llvm-c/Transforms/Scalar.h index d5dcfb94a6c..3c3bb4eb9b8 100644 --- a/include/llvm-c/Transforms/Scalar.h +++ b/include/llvm-c/Transforms/Scalar.h @@ -153,6 +153,9 @@ void LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM); /** See llvm::createBasicAliasAnalysisPass function */ void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM); +/** See llvm::createUnifyFunctionExitNodesPass function */ +void LLVMAddUnifyFunctionExitNodesPass(LLVMPassManagerRef PM); + /** * @} */ diff --git a/lib/Transforms/Scalar/Scalar.cpp b/lib/Transforms/Scalar/Scalar.cpp index c8feedfacbf..1b140acbaee 100644 --- a/lib/Transforms/Scalar/Scalar.cpp +++ b/lib/Transforms/Scalar/Scalar.cpp @@ -26,6 +26,7 @@ #include "llvm/InitializePasses.h" #include "llvm/Transforms/Scalar/GVN.h" #include "llvm/Transforms/Scalar/SimpleLoopUnswitch.h" +#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h" using namespace llvm; @@ -278,3 +279,7 @@ void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) { unwrap(PM)->add(createLowerExpectIntrinsicPass()); } + +void LLVMAddUnifyFunctionExitNodesPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createUnifyFunctionExitNodesPass()); +}