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