137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(* RUN: cp %s %T/scalar_opts.ml 237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %ocamlc -g -warn-error A -package llvm.scalar_opts -linkpkg %T/scalar_opts.ml -o %t 337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %t %t.bc 437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %ocamlopt -g -warn-error A -package llvm.scalar_opts -linkpkg %T/scalar_opts.ml -o %t 58a78ff63c017796d699d297d5ab67064e8914542Erick Tryzelaar * RUN: %t %t.bc 6874f021bc16aaf4619fd818da150f1b63e408c80Daniel Dunbar * XFAIL: vg_leak 741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen *) 841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 9b405bbe6648d24b0cb5b03dc43c3997ac4f50a9bErick Tryzelaar(* Note: It takes several seconds for ocamlopt to link an executable with 1041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen libLLVMCore.a, so it's better to write a big test than a bunch of 1141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen little ones. *) 1241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 1341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenopen Llvm 1441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenopen Llvm_scalar_opts 153e0c83559397c87e06ef29c41385e7adc34573c2Gordon Henriksenopen Llvm_target 1641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 17b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarlet context = global_context () 18b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarlet void_type = Llvm.void_type context 1941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 2041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen(* Tiny unit test framework - really just to help find which line is busted *) 218a78ff63c017796d699d297d5ab67064e8914542Erick Tryzelaarlet print_checkpoints = false 228a78ff63c017796d699d297d5ab67064e8914542Erick Tryzelaar 2341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenlet suite name f = 248a78ff63c017796d699d297d5ab67064e8914542Erick Tryzelaar if print_checkpoints then 258a78ff63c017796d699d297d5ab67064e8914542Erick Tryzelaar prerr_endline (name ^ ":"); 2641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen f () 2741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 2841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 2941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen(*===-- Fixture -----------------------------------------------------------===*) 3041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 3141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenlet filename = Sys.argv.(1) 32b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarlet m = create_module context filename 3341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 3441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 3541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen(*===-- Transforms --------------------------------------------------------===*) 3641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 3741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenlet test_transforms () = 3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines let (++) x f = f x; x in 3941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 4041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen let fty = function_type void_type [| |] in 4141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen let fn = define_function "fn" fty m in 42b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar ignore (build_ret_void (builder_at_end context (entry_block fn))); 4337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4416609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar ignore (PassManager.create_function m 457eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_aggressive_dce 4637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_alignment_from_assumptions 4737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_cfg_simplification 4837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_dead_store_elimination 4937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_scalarizer 5037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_merged_load_store_motion 5137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_gvn 527eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_ind_var_simplification 537eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_instruction_combination 5437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_jump_threading 557eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_licm 5637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_loop_deletion 5737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_loop_idiom 587eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_loop_rotation 5937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_loop_reroll 6037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_loop_unroll 6137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_loop_unswitch 6237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_memcpy_opt 6337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_partially_inline_lib_calls 6437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_lower_switch 657eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_memory_to_register_promotion 6641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen ++ add_reassociation 6737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_sccp 6837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_scalar_repl_aggregation 6937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_scalar_repl_aggregation_ssa 7037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_scalar_repl_aggregation_with_threshold 4 717eb4beb4cd545c78e911add2c4497c0d1b4cf1eeErick Tryzelaar ++ add_lib_call_simplification 7237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_tail_call_elimination 7337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_constant_propagation 7437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_memory_to_register_demotion 7537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_verifier 76ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin ++ add_correlated_value_propagation 77ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin ++ add_early_cse 78ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin ++ add_lower_expect_intrinsic 79ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin ++ add_type_based_alias_analysis 8037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ++ add_scoped_no_alias_alias_analysis 81ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin ++ add_basic_alias_analysis 8241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen ++ PassManager.initialize 8341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen ++ PassManager.run_function fn 8441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen ++ PassManager.finalize 8526f3bd89660e46a76a3b0267b23b00d917a45404Peter Zotov ++ PassManager.dispose) 8641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 8741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 8841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen(*===-- Driver ------------------------------------------------------------===*) 8941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 9041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenlet _ = 9141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen suite "transforms" test_transforms; 9216609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar dispose_module m 93