[LLVM-C][Ocaml] Add MergeFunctions and DCE pass
authorAditya Kumar <hiraditya@msn.com>
Sun, 29 Sep 2019 16:06:22 +0000 (16:06 +0000)
committerAditya Kumar <hiraditya@msn.com>
Sun, 29 Sep 2019 16:06:22 +0000 (16:06 +0000)
MergeFunctions and DCE pass are missing from OCaml/C-api. This patch
adds them.

Differential Revision: https://reviews.llvm.org/D65071

Reviewers: whitequark, hiraditya, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits

Tags: #llvm

Authored by: kren1

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373170 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/ocaml/transforms/ipo/ipo_ocaml.c
bindings/ocaml/transforms/ipo/llvm_ipo.ml
bindings/ocaml/transforms/ipo/llvm_ipo.mli
bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml
bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli
bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c
include/llvm-c/Transforms/IPO.h
include/llvm-c/Transforms/Scalar.h
lib/Transforms/IPO/IPO.cpp
lib/Transforms/Scalar/Scalar.cpp

index e4226d8b370c3392f58c5c1e6343cf5f64ca9fb0..9fcaa10534f6b6003be96e0b21acd51c32bdcdeb 100644 (file)
@@ -31,6 +31,12 @@ CAMLprim value llvm_add_constant_merge(LLVMPassManagerRef PM) {
   return Val_unit;
 }
 
+/* [`Module] Llvm.PassManager.t -> unit */
+CAMLprim value llvm_add_merge_functions(LLVMPassManagerRef PM) {
+  LLVMAddMergeFunctionsPass(PM);
+  return Val_unit;
+}
+
 /* [`Module] Llvm.PassManager.t -> unit */
 CAMLprim value llvm_add_dead_arg_elimination(LLVMPassManagerRef PM) {
   LLVMAddDeadArgEliminationPass(PM);
index cc6b0507968f8dd639d6e99b775f8f4079717373..1fb5594fcc7d675a84f9293cf9f31079d73ce860 100644 (file)
@@ -12,6 +12,9 @@ external add_argument_promotion
 external add_constant_merge
   : [ `Module ] Llvm.PassManager.t -> unit
   = "llvm_add_constant_merge"
+external add_merge_functions
+  : [ `Module ] Llvm.PassManager.t -> unit
+  = "llvm_add_merge_functions"
 external add_dead_arg_elimination
   : [ `Module ] Llvm.PassManager.t -> unit
   = "llvm_add_dead_arg_elimination"
index 4ae988d8e579b1bba84658ad18edfd9985bb2d4c..6507c5d92c2b18c13d48f86234ff28edb55f17c6 100644 (file)
@@ -21,6 +21,11 @@ external add_constant_merge
   : [ `Module ] Llvm.PassManager.t -> unit
   = "llvm_add_constant_merge"
 
+(** See the [llvm::createMergeFunctionsPass] function. *)
+external add_merge_functions
+  : [ `Module ] Llvm.PassManager.t -> unit
+  = "llvm_add_merge_functions"
+
 (** See the [llvm::createDeadArgEliminationPass] function. *)
 external add_dead_arg_elimination
   : [ `Module ] Llvm.PassManager.t -> unit
index 0c99b0f34f76818fb68ec805240bc0748239f764..6864076053b67a173c095595efc10aa00255a585 100644 (file)
@@ -9,6 +9,9 @@
 external add_aggressive_dce
   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
   = "llvm_add_aggressive_dce"
+external add_dce
+  : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
+  = "llvm_add_dce"
 external add_alignment_from_assumptions
   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
   = "llvm_add_alignment_from_assumptions"
index 76d86ddf00147d95dd635d2fd21cd1999c6e48bc..8970431aeab27a1bbbc9ad76d7f53b89791072ea 100644 (file)
@@ -16,6 +16,11 @@ external add_aggressive_dce
   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
   = "llvm_add_aggressive_dce"
 
+(** See the [llvm::createDCEPass] function. *)
+external add_dce
+  : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
+  = "llvm_add_dce"
+
 (** See the [llvm::createAlignmentFromAssumptionsPass] function. *)
 external add_alignment_from_assumptions
   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
index cb3d50d31fb7c8d9e82c8ff16ab000aee21bfcda..56ebbf3c43c76c2944a1132ce071edcdf3ea5125 100644 (file)
@@ -26,6 +26,11 @@ CAMLprim value llvm_add_aggressive_dce(LLVMPassManagerRef PM) {
   return Val_unit;
 }
 
+CAMLprim value llvm_add_dce(LLVMPassManagerRef PM) {
+  LLVMAddDCEPass(PM);
+  return Val_unit;
+}
+
 /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */
 CAMLprim value llvm_add_alignment_from_assumptions(LLVMPassManagerRef PM) {
   LLVMAddAlignmentFromAssumptionsPass(PM);
index 748b6db05e3c04998a70afbe7e43f2f437deac91..51d007581283dfed5168366adab217428a248d3a 100644 (file)
@@ -34,6 +34,9 @@ void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
 /** See llvm::createConstantMergePass function. */
 void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
 
+/** See llvm::createMergeFunctionsPass function. */
+void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM);
+
 /** See llvm::createCalledValuePropagationPass function. */
 void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
 
index 031cf98b2df26d7c8db950a21b5f6ebded1953e4..484ac90ab5d594818cd965920285f046e4d7ee3f 100644 (file)
@@ -35,6 +35,9 @@ extern "C" {
 /** See llvm::createAggressiveDCEPass function. */
 void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
 
+/** See llvm::createDeadCodeEliminationPass function. */
+void LLVMAddDCEPass(LLVMPassManagerRef PM);
+
 /** See llvm::createBitTrackingDCEPass function. */
 void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
 
index 465ffbd905525f35cbce365641cc93e07c62eb5f..bddf75211599933b3fcd1cf26e8c17d1deb0e100 100644 (file)
@@ -114,6 +114,10 @@ void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
   unwrap(PM)->add(createIPSCCPPass());
 }
 
+void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM) {
+  unwrap(PM)->add(createMergeFunctionsPass());
+}
+
 void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
   auto PreserveMain = [=](const GlobalValue &GV) {
     return AllButMain && GV.getName() == "main";
index 869cf00e0a89cfdcd2947661a2a2c89c6f451fb2..688b8b9079e05a73d343dc9cc95d4e5cc7220e56 100644 (file)
@@ -123,6 +123,10 @@ void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
   unwrap(PM)->add(createAggressiveDCEPass());
 }
 
+void LLVMAddDCEPass(LLVMPassManagerRef PM) {
+  unwrap(PM)->add(createDeadCodeEliminationPass());
+}
+
 void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM) {
   unwrap(PM)->add(createBitTrackingDCEPass());
 }