11185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov(* RUN: rm -rf %t.builddir
21185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov * RUN: mkdir -p %t.builddir
31185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov * RUN: cp %s %t.builddir
41185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov * RUN: %ocamlopt -warn-error A llvm.cmxa llvm_vectorize.cmxa llvm_target.cmxa %t.builddir/vectorize_opts.ml -o %t
51185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov * RUN: %t %t.bc
61185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov * XFAIL: vg_leak
71185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov *)
81185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
91185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov(* Note: It takes several seconds for ocamlopt to link an executable with
101185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov         libLLVMCore.a, so it's better to write a big test than a bunch of
111185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov         little ones. *)
121185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
131185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovopen Llvm
141185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovopen Llvm_vectorize
151185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovopen Llvm_target
161185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
171185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet context = global_context ()
181185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet void_type = Llvm.void_type context
191185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
201185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov(* Tiny unit test framework - really just to help find which line is busted *)
211185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet print_checkpoints = false
221185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
231185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet suite name f =
241185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  if print_checkpoints then
251185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov    prerr_endline (name ^ ":");
261185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  f ()
271185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
281185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
291185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov(*===-- Fixture -----------------------------------------------------------===*)
301185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
311185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet filename = Sys.argv.(1)
321185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet m = create_module context filename
331185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
341185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
351185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov(*===-- Transforms --------------------------------------------------------===*)
361185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
371185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet test_transforms () =
381185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  let (++) x f = ignore (f x); x in
391185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
401185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  let fty = function_type void_type [| |] in
411185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  let fn = define_function "fn" fty m in
421185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  ignore (build_ret_void (builder_at_end context (entry_block fn)));
431185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
441185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  ignore (PassManager.create ()
451185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov           ++ add_bb_vectorize
461185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov           ++ add_loop_vectorize
471185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov           ++ add_slp_vectorize
481185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov           ++ PassManager.run_module m
4926f3bd89660e46a76a3b0267b23b00d917a45404Peter Zotov           ++ PassManager.dispose)
501185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
511185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
521185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov(*===-- Driver ------------------------------------------------------------===*)
531185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov
541185582dfd542883194d262c5bf92b16e1e037c2Peter Zotovlet _ =
551185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  suite "transforms" test_transforms;
561185582dfd542883194d262c5bf92b16e1e037c2Peter Zotov  dispose_module m
57