diff options
author | Erick Tryzelaar <idadesub@users.sourceforge.net> | 2010-03-08 19:32:18 +0000 |
---|---|---|
committer | Erick Tryzelaar <idadesub@users.sourceforge.net> | 2010-03-08 19:32:18 +0000 |
commit | 9ef76b9985a0c408e126affa049698c413ad8664 (patch) | |
tree | 79fb162db230c0fa8cb3a67bd6df1db7c25d755a /docs | |
parent | 0ef3fa6aabc80995c8a0bd829c85c89ef2d4c32d (diff) | |
download | external_llvm-9ef76b9985a0c408e126affa049698c413ad8664.zip external_llvm-9ef76b9985a0c408e126affa049698c413ad8664.tar.gz external_llvm-9ef76b9985a0c408e126affa049698c413ad8664.tar.bz2 |
Update the OCaml Kaleidoscope tutorial.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97965 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r-- | docs/tutorial/OCamlLangImpl3.html | 6 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl4.html | 37 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl5.html | 32 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl6.html | 24 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl7.html | 24 |
5 files changed, 58 insertions, 65 deletions
diff --git a/docs/tutorial/OCamlLangImpl3.html b/docs/tutorial/OCamlLangImpl3.html index 0d69207..febd7f5 100644 --- a/docs/tutorial/OCamlLangImpl3.html +++ b/docs/tutorial/OCamlLangImpl3.html @@ -98,6 +98,7 @@ exception Error of string let the_module = create_module (global_context ()) "my cool jit" let builder = builder (global_context ()) let named_values:(string, llvalue) Hashtbl.t = Hashtbl.create 10 +let double_type = double_type context </pre> </div> @@ -389,7 +390,7 @@ that there is an LLVM Function object that is ready to go for us.</p> <div class="doc_code"> <pre> (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; try @@ -903,6 +904,7 @@ let context = global_context () let the_module = create_module context "my cool jit" let builder = builder context let named_values:(string, llvalue) Hashtbl.t = Hashtbl.create 10 +let double_type = double_type context let rec codegen_expr = function | Ast.Number n -> const_float double_type n @@ -974,7 +976,7 @@ let codegen_func = function let the_function = codegen_proto proto in (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; try diff --git a/docs/tutorial/OCamlLangImpl4.html b/docs/tutorial/OCamlLangImpl4.html index 1619920..116c618 100644 --- a/docs/tutorial/OCamlLangImpl4.html +++ b/docs/tutorial/OCamlLangImpl4.html @@ -186,9 +186,8 @@ add a set of optimizations to run. The code looks like this:</p> <div class="doc_code"> <pre> (* Create the JIT. *) - let the_module_provider = ModuleProvider.create Codegen.the_module in - let the_execution_engine = ExecutionEngine.create the_module_provider in - let the_fpm = PassManager.create_function the_module_provider in + 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. *) @@ -213,18 +212,11 @@ add a set of optimizations to run. The code looks like this:</p> </pre> </div> -<p>This code defines two values, an <tt>Llvm.llmoduleprovider</tt> and a -<tt>Llvm.PassManager.t</tt>. The former is basically a wrapper around our -<tt>Llvm.llmodule</tt> that the <tt>Llvm.PassManager.t</tt> requires. It -provides certain flexibility that we're not going to take advantage of here, -so I won't dive into any details about it.</p> - <p>The meat of the matter here, is the definition of "<tt>the_fpm</tt>". It -requires a pointer to the <tt>the_module</tt> (through the -<tt>the_module_provider</tt>) to construct itself. Once it is set up, we use a -series of "add" calls to add a bunch of LLVM passes. The first pass is -basically boilerplate, it adds a pass so that later optimizations know how the -data structures in the program are laid out. The +requires a pointer to the <tt>the_module</tt> to construct itself. Once it is +set up, we use a series of "add" calls to add a bunch of LLVM passes. The +first pass is basically boilerplate, it adds a pass so that later optimizations +know how the data structures in the program are laid out. The "<tt>the_execution_engine</tt>" variable is related to the JIT, which we will get to in the next section.</p> @@ -320,8 +312,7 @@ by adding a global variable and a call in <tt>main</tt>:</p> let main () = ... <b>(* Create the JIT. *) - let the_module_provider = ModuleProvider.create Codegen.the_module in - let the_execution_engine = ExecutionEngine.create the_module_provider in</b> + let the_execution_engine = ExecutionEngine.create Codegen.the_module in</b> ... </pre> </div> @@ -351,7 +342,7 @@ can change the code that parses a top-level expression to look like this:</p> the_execution_engine in print_string "Evaluated to "; - print_float (GenericValue.as_float double_type result); + print_float (GenericValue.as_float Codegen.double_type result); print_newline (); </pre> </div> @@ -796,6 +787,7 @@ let context = global_context () let the_module = create_module context "my cool jit" let builder = builder context let named_values:(string, llvalue) Hashtbl.t = Hashtbl.create 10 +let double_type = double_type context let rec codegen_expr = function | Ast.Number n -> const_float double_type n @@ -867,7 +859,7 @@ let codegen_func the_fpm = function let the_function = codegen_proto proto in (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; try @@ -932,7 +924,7 @@ let rec main_loop the_fpm the_execution_engine stream = the_execution_engine in print_string "Evaluated to "; - print_float (GenericValue.as_float double_type result); + print_float (GenericValue.as_float Codegen.double_type result); print_newline (); with Stream.Error s | Codegen.Error s -> (* Skip token for error recovery. *) @@ -971,16 +963,15 @@ let main () = let stream = Lexer.lex (Stream.of_channel stdin) in (* Create the JIT. *) - let the_module_provider = ModuleProvider.create Codegen.the_module in - let the_execution_engine = ExecutionEngine.create the_module_provider in - let the_fpm = PassManager.create_function the_module_provider in + 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_combining the_fpm; + add_instruction_combination the_fpm; (* reassociate expressions. *) add_reassociation the_fpm; diff --git a/docs/tutorial/OCamlLangImpl5.html b/docs/tutorial/OCamlLangImpl5.html index 3a8b7d2..131d5b2 100644 --- a/docs/tutorial/OCamlLangImpl5.html +++ b/docs/tutorial/OCamlLangImpl5.html @@ -364,7 +364,7 @@ value as a 1-bit (bool) value.</p> let start_bb = insertion_block builder in let the_function = block_parent start_bb in - let then_bb = append_block "then" the_function in + let then_bb = append_block context "then" the_function in position_at_end then_bb builder; </pre> </div> @@ -417,7 +417,7 @@ up-to-date value for code that will set up the Phi node.</p> <div class="doc_code"> <pre> (* Emit 'else' value. *) - let else_bb = append_block "else" the_function in + let else_bb = append_block context "else" the_function in position_at_end else_bb builder; let else_val = codegen_expr else_ in @@ -433,7 +433,7 @@ the 'then' block.</p> <div class="doc_code"> <pre> (* Emit merge block. *) - let merge_bb = append_block "ifcont" the_function in + let merge_bb = append_block context "ifcont" the_function in position_at_end merge_bb builder; let incoming = [(then_val, new_then_bb); (else_val, new_else_bb)] in let phi = build_phi incoming "iftmp" builder in @@ -704,7 +704,7 @@ block, but remember that the body code itself could consist of multiple blocks * block. *) let preheader_bb = insertion_block builder in let the_function = block_parent preheader_bb in - let loop_bb = append_block "loop" the_function in + let loop_bb = append_block context "loop" the_function in (* Insert an explicit fall through from the current block to the * loop_bb. *) @@ -804,7 +804,7 @@ statement.</p> <pre> (* Create the "after loop" block and insert it. *) let loop_end_bb = insertion_block builder in - let after_bb = append_block "afterloop" the_function in + let after_bb = append_block context "afterloop" the_function in (* Insert the conditional branch into the end of loop_end_bb. *) ignore (build_cond_br end_cond loop_bb after_bb builder); @@ -1204,6 +1204,7 @@ let context = global_context () let the_module = create_module context "my cool jit" let builder = builder context let named_values:(string, llvalue) Hashtbl.t = Hashtbl.create 10 +let double_type = double_type context let rec codegen_expr = function | Ast.Number n -> const_float double_type n @@ -1250,7 +1251,7 @@ let rec codegen_expr = function let start_bb = insertion_block builder in let the_function = block_parent start_bb in - let then_bb = append_block "then" the_function in + let then_bb = append_block context "then" the_function in (* Emit 'then' value. *) position_at_end then_bb builder; @@ -1262,7 +1263,7 @@ let rec codegen_expr = function let new_then_bb = insertion_block builder in (* Emit 'else' value. *) - let else_bb = append_block "else" the_function in + let else_bb = append_block context "else" the_function in position_at_end else_bb builder; let else_val = codegen_expr else_ in @@ -1271,7 +1272,7 @@ let rec codegen_expr = function let new_else_bb = insertion_block builder in (* Emit merge block. *) - let merge_bb = append_block "ifcont" the_function in + let merge_bb = append_block context "ifcont" the_function in position_at_end merge_bb builder; let incoming = [(then_val, new_then_bb); (else_val, new_else_bb)] in let phi = build_phi incoming "iftmp" builder in @@ -1297,7 +1298,7 @@ let rec codegen_expr = function * block. *) let preheader_bb = insertion_block builder in let the_function = block_parent preheader_bb in - let loop_bb = append_block "loop" the_function in + let loop_bb = append_block context "loop" the_function in (* Insert an explicit fall through from the current block to the * loop_bb. *) @@ -1341,7 +1342,7 @@ let rec codegen_expr = function (* Create the "after loop" block and insert it. *) let loop_end_bb = insertion_block builder in - let after_bb = append_block "afterloop" the_function in + let after_bb = append_block context "afterloop" the_function in (* Insert the conditional branch into the end of loop_end_bb. *) ignore (build_cond_br end_cond loop_bb after_bb builder); @@ -1397,7 +1398,7 @@ let codegen_func the_fpm = function let the_function = codegen_proto proto in (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; try @@ -1462,7 +1463,7 @@ let rec main_loop the_fpm the_execution_engine stream = the_execution_engine in print_string "Evaluated to "; - print_float (GenericValue.as_float double_type result); + print_float (GenericValue.as_float Codegen.double_type result); print_newline (); with Stream.Error s | Codegen.Error s -> (* Skip token for error recovery. *) @@ -1501,16 +1502,15 @@ let main () = let stream = Lexer.lex (Stream.of_channel stdin) in (* Create the JIT. *) - let the_module_provider = ModuleProvider.create Codegen.the_module in - let the_execution_engine = ExecutionEngine.create the_module_provider in - let the_fpm = PassManager.create_function the_module_provider in + 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_combining the_fpm; + add_instruction_combination the_fpm; (* reassociate expressions. *) add_reassociation the_fpm; diff --git a/docs/tutorial/OCamlLangImpl6.html b/docs/tutorial/OCamlLangImpl6.html index b5606e7..df15e0d 100644 --- a/docs/tutorial/OCamlLangImpl6.html +++ b/docs/tutorial/OCamlLangImpl6.html @@ -300,7 +300,7 @@ let codegen_func the_fpm = function end;</b> (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; ... </pre> @@ -1177,6 +1177,7 @@ let context = global_context () let the_module = create_module context "my cool jit" let builder = builder context let named_values:(string, llvalue) Hashtbl.t = Hashtbl.create 10 +let double_type = double_type context let rec codegen_expr = function | Ast.Number n -> const_float double_type n @@ -1241,7 +1242,7 @@ let rec codegen_expr = function let start_bb = insertion_block builder in let the_function = block_parent start_bb in - let then_bb = append_block "then" the_function in + let then_bb = append_block context "then" the_function in (* Emit 'then' value. *) position_at_end then_bb builder; @@ -1253,7 +1254,7 @@ let rec codegen_expr = function let new_then_bb = insertion_block builder in (* Emit 'else' value. *) - let else_bb = append_block "else" the_function in + let else_bb = append_block context "else" the_function in position_at_end else_bb builder; let else_val = codegen_expr else_ in @@ -1262,7 +1263,7 @@ let rec codegen_expr = function let new_else_bb = insertion_block builder in (* Emit merge block. *) - let merge_bb = append_block "ifcont" the_function in + let merge_bb = append_block context "ifcont" the_function in position_at_end merge_bb builder; let incoming = [(then_val, new_then_bb); (else_val, new_else_bb)] in let phi = build_phi incoming "iftmp" builder in @@ -1288,7 +1289,7 @@ let rec codegen_expr = function * block. *) let preheader_bb = insertion_block builder in let the_function = block_parent preheader_bb in - let loop_bb = append_block "loop" the_function in + let loop_bb = append_block context "loop" the_function in (* Insert an explicit fall through from the current block to the * loop_bb. *) @@ -1332,7 +1333,7 @@ let rec codegen_expr = function (* Create the "after loop" block and insert it. *) let loop_end_bb = insertion_block builder in - let after_bb = append_block "afterloop" the_function in + let after_bb = append_block context "afterloop" the_function in (* Insert the conditional branch into the end of loop_end_bb. *) ignore (build_cond_br end_cond loop_bb after_bb builder); @@ -1396,7 +1397,7 @@ let codegen_func the_fpm = function end; (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; try @@ -1461,7 +1462,7 @@ let rec main_loop the_fpm the_execution_engine stream = the_execution_engine in print_string "Evaluated to "; - print_float (GenericValue.as_float double_type result); + print_float (GenericValue.as_float Codegen.double_type result); print_newline (); with Stream.Error s | Codegen.Error s -> (* Skip token for error recovery. *) @@ -1500,16 +1501,15 @@ let main () = let stream = Lexer.lex (Stream.of_channel stdin) in (* Create the JIT. *) - let the_module_provider = ModuleProvider.create Codegen.the_module in - let the_execution_engine = ExecutionEngine.create the_module_provider in - let the_fpm = PassManager.create_function the_module_provider in + 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_combining the_fpm; + add_instruction_combination the_fpm; (* reassociate expressions. *) add_reassociation the_fpm; diff --git a/docs/tutorial/OCamlLangImpl7.html b/docs/tutorial/OCamlLangImpl7.html index 6047ad3..a6f90e9 100644 --- a/docs/tutorial/OCamlLangImpl7.html +++ b/docs/tutorial/OCamlLangImpl7.html @@ -543,7 +543,7 @@ good codegen once again:</p> <pre> let main () = ... - let the_fpm = PassManager.create_function the_module_provider 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. *) @@ -1388,6 +1388,7 @@ let context = global_context () let the_module = create_module context "my cool jit" let builder = builder context let named_values:(string, llvalue) Hashtbl.t = Hashtbl.create 10 +let double_type = double_type context (* Create an alloca instruction in the entry block of the function. This * is used for mutable variables etc. *) @@ -1482,7 +1483,7 @@ let rec codegen_expr = function let start_bb = insertion_block builder in let the_function = block_parent start_bb in - let then_bb = append_block "then" the_function in + let then_bb = append_block context "then" the_function in (* Emit 'then' value. *) position_at_end then_bb builder; @@ -1494,7 +1495,7 @@ let rec codegen_expr = function let new_then_bb = insertion_block builder in (* Emit 'else' value. *) - let else_bb = append_block "else" the_function in + let else_bb = append_block context "else" the_function in position_at_end else_bb builder; let else_val = codegen_expr else_ in @@ -1503,7 +1504,7 @@ let rec codegen_expr = function let new_else_bb = insertion_block builder in (* Emit merge block. *) - let merge_bb = append_block "ifcont" the_function in + let merge_bb = append_block context "ifcont" the_function in position_at_end merge_bb builder; let incoming = [(then_val, new_then_bb); (else_val, new_else_bb)] in let phi = build_phi incoming "iftmp" builder in @@ -1555,7 +1556,7 @@ let rec codegen_expr = function (* Make the new basic block for the loop header, inserting after current * block. *) - let loop_bb = append_block "loop" the_function in + let loop_bb = append_block context "loop" the_function in (* Insert an explicit fall through from the current block to the * loop_bb. *) @@ -1599,7 +1600,7 @@ let rec codegen_expr = function let end_cond = build_fcmp Fcmp.One end_cond zero "loopcond" builder in (* Create the "after loop" block and insert it. *) - let after_bb = append_block "afterloop" the_function in + let after_bb = append_block context "afterloop" the_function in (* Insert the conditional branch into the end of loop_end_bb. *) ignore (build_cond_br end_cond loop_bb after_bb builder); @@ -1723,7 +1724,7 @@ let codegen_func the_fpm = function end; (* Create a new basic block to start insertion into. *) - let bb = append_block "entry" the_function in + let bb = append_block context "entry" the_function in position_at_end bb builder; try @@ -1791,7 +1792,7 @@ let rec main_loop the_fpm the_execution_engine stream = the_execution_engine in print_string "Evaluated to "; - print_float (GenericValue.as_float double_type result); + print_float (GenericValue.as_float Codegen.double_type result); print_newline (); with Stream.Error s | Codegen.Error s -> (* Skip token for error recovery. *) @@ -1831,9 +1832,8 @@ let main () = let stream = Lexer.lex (Stream.of_channel stdin) in (* Create the JIT. *) - let the_module_provider = ModuleProvider.create Codegen.the_module in - let the_execution_engine = ExecutionEngine.create the_module_provider in - let the_fpm = PassManager.create_function the_module_provider in + 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. *) @@ -1843,7 +1843,7 @@ let main () = add_memory_to_register_promotion the_fpm; (* Do simple "peephole" optimizations and bit-twiddling optzn. *) - add_instruction_combining the_fpm; + add_instruction_combination the_fpm; (* reassociate expressions. *) add_reassociation the_fpm; |