diff options
author | Erick Tryzelaar <idadesub@users.sourceforge.net> | 2010-03-08 19:32:27 +0000 |
---|---|---|
committer | Erick Tryzelaar <idadesub@users.sourceforge.net> | 2010-03-08 19:32:27 +0000 |
commit | 49457b81589c6a3ef384caa8fdf1463ad2ada7c7 (patch) | |
tree | 8500bcc1ba0067ff7816b083d8b5a535be6ee50d /examples/OCaml-Kaleidoscope/Chapter6/toy.ml | |
parent | 9ef76b9985a0c408e126affa049698c413ad8664 (diff) | |
download | external_llvm-49457b81589c6a3ef384caa8fdf1463ad2ada7c7.zip external_llvm-49457b81589c6a3ef384caa8fdf1463ad2ada7c7.tar.gz external_llvm-49457b81589c6a3ef384caa8fdf1463ad2ada7c7.tar.bz2 |
Add OCaml tutorial to the examples.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97966 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'examples/OCaml-Kaleidoscope/Chapter6/toy.ml')
-rw-r--r-- | examples/OCaml-Kaleidoscope/Chapter6/toy.ml | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/OCaml-Kaleidoscope/Chapter6/toy.ml b/examples/OCaml-Kaleidoscope/Chapter6/toy.ml new file mode 100644 index 0000000..5f9d912 --- /dev/null +++ b/examples/OCaml-Kaleidoscope/Chapter6/toy.ml @@ -0,0 +1,53 @@ +(*===----------------------------------------------------------------------=== + * Main driver code. + *===----------------------------------------------------------------------===*) + +open Llvm +open Llvm_executionengine +open Llvm_target +open Llvm_scalar_opts + +let main () = + ignore (initialize_native_target ()); + + (* Install standard binary operators. + * 1 is the lowest precedence. *) + Hashtbl.add Parser.binop_precedence '<' 10; + Hashtbl.add Parser.binop_precedence '+' 20; + Hashtbl.add Parser.binop_precedence '-' 20; + Hashtbl.add Parser.binop_precedence '*' 40; (* highest. *) + + (* Prime the first token. *) + print_string "ready> "; flush stdout; + let stream = Lexer.lex (Stream.of_channel stdin) in + + (* Create the JIT. *) + let the_execution_engine = ExecutionEngine.create Codegen.the_module in + let the_fpm = PassManager.create_function Codegen.the_module in + + (* Set up the optimizer pipeline. Start with registering info about how the + * target lays out data structures. *) + TargetData.add (ExecutionEngine.target_data the_execution_engine) the_fpm; + + (* Do simple "peephole" optimizations and bit-twiddling optzn. *) + add_instruction_combination the_fpm; + + (* reassociate expressions. *) + add_reassociation the_fpm; + + (* Eliminate Common SubExpressions. *) + add_gvn the_fpm; + + (* Simplify the control flow graph (deleting unreachable blocks, etc). *) + add_cfg_simplification the_fpm; + + ignore (PassManager.initialize the_fpm); + + (* Run the main "interpreter loop" now. *) + Toplevel.main_loop the_fpm the_execution_engine stream; + + (* Print out all the generated code. *) + dump_module Codegen.the_module +;; + +main () |