Skip to content

Commit a6d9d31

Browse files
committedSep 29, 2019
[LLVM-C][Ocaml] Add MergeFunctions and DCE pass
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 llvm-svn: 373170
1 parent eb78dea commit a6d9d31

File tree

10 files changed

+41
-0
lines changed

10 files changed

+41
-0
lines changed
 

‎llvm/bindings/ocaml/transforms/ipo/ipo_ocaml.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ CAMLprim value llvm_add_constant_merge(LLVMPassManagerRef PM) {
3131
return Val_unit;
3232
}
3333

34+
/* [`Module] Llvm.PassManager.t -> unit */
35+
CAMLprim value llvm_add_merge_functions(LLVMPassManagerRef PM) {
36+
LLVMAddMergeFunctionsPass(PM);
37+
return Val_unit;
38+
}
39+
3440
/* [`Module] Llvm.PassManager.t -> unit */
3541
CAMLprim value llvm_add_dead_arg_elimination(LLVMPassManagerRef PM) {
3642
LLVMAddDeadArgEliminationPass(PM);

‎llvm/bindings/ocaml/transforms/ipo/llvm_ipo.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ external add_argument_promotion
1212
external add_constant_merge
1313
: [ `Module ] Llvm.PassManager.t -> unit
1414
= "llvm_add_constant_merge"
15+
external add_merge_functions
16+
: [ `Module ] Llvm.PassManager.t -> unit
17+
= "llvm_add_merge_functions"
1518
external add_dead_arg_elimination
1619
: [ `Module ] Llvm.PassManager.t -> unit
1720
= "llvm_add_dead_arg_elimination"

‎llvm/bindings/ocaml/transforms/ipo/llvm_ipo.mli

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ external add_constant_merge
2121
: [ `Module ] Llvm.PassManager.t -> unit
2222
= "llvm_add_constant_merge"
2323

24+
(** See the [llvm::createMergeFunctionsPass] function. *)
25+
external add_merge_functions
26+
: [ `Module ] Llvm.PassManager.t -> unit
27+
= "llvm_add_merge_functions"
28+
2429
(** See the [llvm::createDeadArgEliminationPass] function. *)
2530
external add_dead_arg_elimination
2631
: [ `Module ] Llvm.PassManager.t -> unit

‎llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
external add_aggressive_dce
1010
: [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
1111
= "llvm_add_aggressive_dce"
12+
external add_dce
13+
: [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
14+
= "llvm_add_dce"
1215
external add_alignment_from_assumptions
1316
: [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
1417
= "llvm_add_alignment_from_assumptions"

‎llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ external add_aggressive_dce
1616
: [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
1717
= "llvm_add_aggressive_dce"
1818

19+
(** See the [llvm::createDCEPass] function. *)
20+
external add_dce
21+
: [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
22+
= "llvm_add_dce"
23+
1924
(** See the [llvm::createAlignmentFromAssumptionsPass] function. *)
2025
external add_alignment_from_assumptions
2126
: [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit

‎llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ CAMLprim value llvm_add_aggressive_dce(LLVMPassManagerRef PM) {
2626
return Val_unit;
2727
}
2828

29+
CAMLprim value llvm_add_dce(LLVMPassManagerRef PM) {
30+
LLVMAddDCEPass(PM);
31+
return Val_unit;
32+
}
33+
2934
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */
3035
CAMLprim value llvm_add_alignment_from_assumptions(LLVMPassManagerRef PM) {
3136
LLVMAddAlignmentFromAssumptionsPass(PM);

‎llvm/include/llvm-c/Transforms/IPO.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
3434
/** See llvm::createConstantMergePass function. */
3535
void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
3636

37+
/** See llvm::createMergeFunctionsPass function. */
38+
void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM);
39+
3740
/** See llvm::createCalledValuePropagationPass function. */
3841
void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
3942

‎llvm/include/llvm-c/Transforms/Scalar.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ extern "C" {
3535
/** See llvm::createAggressiveDCEPass function. */
3636
void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
3737

38+
/** See llvm::createDeadCodeEliminationPass function. */
39+
void LLVMAddDCEPass(LLVMPassManagerRef PM);
40+
3841
/** See llvm::createBitTrackingDCEPass function. */
3942
void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
4043

‎llvm/lib/Transforms/IPO/IPO.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
114114
unwrap(PM)->add(createIPSCCPPass());
115115
}
116116

117+
void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM) {
118+
unwrap(PM)->add(createMergeFunctionsPass());
119+
}
120+
117121
void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
118122
auto PreserveMain = [=](const GlobalValue &GV) {
119123
return AllButMain && GV.getName() == "main";

‎llvm/lib/Transforms/Scalar/Scalar.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
123123
unwrap(PM)->add(createAggressiveDCEPass());
124124
}
125125

126+
void LLVMAddDCEPass(LLVMPassManagerRef PM) {
127+
unwrap(PM)->add(createDeadCodeEliminationPass());
128+
}
129+
126130
void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM) {
127131
unwrap(PM)->add(createBitTrackingDCEPass());
128132
}

0 commit comments

Comments
 (0)
Please sign in to comment.