a7112231562f9a1bac673d4e72da139e3f122d97
[oota-llvm.git] / test / Bindings / Ocaml / passmgr_builder.ml
1 (* RUN: cp %s %T/passmgr_builder.ml
2  * RUN: %ocamlcomp -warn-error A -package llvm.passmgr_builder -linkpkg %T/passmgr_builder.ml -o %t
3  * RUN: %t %t.bc
4  * XFAIL: vg_leak
5  *)
6
7 (* Note: It takes several seconds for ocamlopt to link an executable with
8          libLLVMCore.a, so it's better to write a big test than a bunch of
9          little ones. *)
10
11 open Llvm
12 open Llvm_passmgr_builder
13
14 let context = global_context ()
15 let void_type = Llvm.void_type context
16
17 (* Tiny unit test framework - really just to help find which line is busted *)
18 let print_checkpoints = false
19
20 let suite name f =
21   if print_checkpoints then
22     prerr_endline (name ^ ":");
23   f ()
24
25
26 (*===-- Fixture -----------------------------------------------------------===*)
27
28 let filename = Sys.argv.(1)
29 let m = create_module context filename
30
31
32 (*===-- Pass Manager Builder ----------------------------------------------===*)
33
34 let test_pmbuilder () =
35   let (++) x f = ignore (f x); x in
36
37   let module_passmgr = PassManager.create () in
38   let func_passmgr   = PassManager.create_function m in
39   let lto_passmgr    = PassManager.create () in
40
41   ignore (Llvm_passmgr_builder.create ()
42            ++ set_opt_level 3
43            ++ set_size_level 1
44            ++ set_disable_unit_at_a_time false
45            ++ set_disable_unroll_loops false
46            ++ use_inliner_with_threshold 10
47            ++ populate_function_pass_manager func_passmgr
48            ++ populate_module_pass_manager module_passmgr
49            ++ populate_lto_pass_manager lto_passmgr
50                   ~internalize:false ~run_inliner:false);
51   Gc.compact ();
52
53   PassManager.dispose module_passmgr;
54   PassManager.dispose func_passmgr;
55   PassManager.dispose lto_passmgr
56
57
58 (*===-- Driver ------------------------------------------------------------===*)
59
60 let _ =
61   suite "pass manager builder" test_pmbuilder;
62   dispose_module m