diff options
author | dim <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 |
commit | 2b066988909948dc3d53d01760bc2d71d32f3feb (patch) | |
tree | fc5f365fb9035b2d0c622bbf06c9bbe8627d7279 /docs/tutorial | |
parent | c80ac9d286b8fcc6d1ee5d76048134cf80aa9edc (diff) | |
download | FreeBSD-src-2b066988909948dc3d53d01760bc2d71d32f3feb.zip FreeBSD-src-2b066988909948dc3d53d01760bc2d71d32f3feb.tar.gz |
Vendor import of llvm trunk r130700:
http://llvm.org/svn/llvm-project/llvm/trunk@130700
Diffstat (limited to 'docs/tutorial')
-rw-r--r-- | docs/tutorial/LangImpl1.html | 18 | ||||
-rw-r--r-- | docs/tutorial/LangImpl2.html | 44 | ||||
-rw-r--r-- | docs/tutorial/LangImpl3.html | 31 | ||||
-rw-r--r-- | docs/tutorial/LangImpl4.html | 30 | ||||
-rw-r--r-- | docs/tutorial/LangImpl5.html | 91 | ||||
-rw-r--r-- | docs/tutorial/LangImpl6.html | 36 | ||||
-rw-r--r-- | docs/tutorial/LangImpl7.html | 43 | ||||
-rw-r--r-- | docs/tutorial/LangImpl8.html | 52 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl1.html | 18 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl2.html | 44 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl3.html | 31 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl4.html | 28 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl5.html | 79 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl6.html | 30 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl7.html | 43 | ||||
-rw-r--r-- | docs/tutorial/OCamlLangImpl8.html | 50 | ||||
-rw-r--r-- | docs/tutorial/index.html | 2 |
17 files changed, 312 insertions, 358 deletions
diff --git a/docs/tutorial/LangImpl1.html b/docs/tutorial/LangImpl1.html index c256af4..22a2b12 100644 --- a/docs/tutorial/LangImpl1.html +++ b/docs/tutorial/LangImpl1.html @@ -11,7 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Tutorial Introduction and the Lexer</div> +<h1>Kaleidoscope: Tutorial Introduction and the Lexer</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -30,10 +30,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Tutorial Introduction</a></div> +<h2><a name="intro">Tutorial Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to the "Implementing a language with LLVM" tutorial. This tutorial runs through the implementation of a simple language, showing how fun and @@ -123,10 +123,10 @@ languages!</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="language">The Basic Language</a></div> +<h2><a name="language">The Basic Language</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>This tutorial will be illustrated with a toy language that we'll call "<a href="http://en.wikipedia.org/wiki/Kaleidoscope">Kaleidoscope</a>" (derived @@ -181,10 +181,10 @@ a Mandelbrot Set</a> at various levels of magnification.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="lexer">The Lexer</a></div> +<h2><a name="lexer">The Lexer</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>When it comes to implementing a language, the first thing needed is the ability to process a text file and recognize what it says. The traditional @@ -341,8 +341,8 @@ so that you can use the lexer and parser together. src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl2.html b/docs/tutorial/LangImpl2.html index f39ed6c..c6a9bb1 100644 --- a/docs/tutorial/LangImpl2.html +++ b/docs/tutorial/LangImpl2.html @@ -11,7 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Implementing a Parser and AST</div> +<h1>Kaleidoscope: Implementing a Parser and AST</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -36,10 +36,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 2 Introduction</a></div> +<h2><a name="intro">Chapter 2 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 2 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. This chapter shows you how to use the lexer, built in @@ -61,10 +61,10 @@ Tree.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="ast">The Abstract Syntax Tree (AST)</a></div> +<h2><a name="ast">The Abstract Syntax Tree (AST)</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>The AST for a program captures its behavior in such a way that it is easy for later stages of the compiler (e.g. code generation) to interpret. We basically @@ -178,10 +178,10 @@ bodies in Kaleidoscope.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parserbasics">Parser Basics</a></div> +<h2><a name="parserbasics">Parser Basics</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Now that we have an AST to build, we need to define the parser code to build it. The idea here is that we want to parse something like "x+y" (which is @@ -239,11 +239,10 @@ piece of our grammar: numeric literals.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parserprimexprs">Basic Expression - Parsing</a></div> +<h2><a name="parserprimexprs">Basic Expression Parsing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>We start with numeric literals, because they are the simplest to process. For each production in our grammar, we'll define a function which parses that @@ -394,11 +393,10 @@ They are a bit more complex.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parserbinops">Binary Expression - Parsing</a></div> +<h2><a name="parserbinops">Binary Expression Parsing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Binary expressions are significantly harder to parse because they are often ambiguous. For example, when given the string "x+y*z", the parser can choose @@ -617,10 +615,10 @@ handle function definitions, etc.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parsertop">Parsing the Rest</a></div> +<h2><a name="parsertop">Parsing the Rest</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> The next thing missing is handling of function prototypes. In Kaleidoscope, @@ -714,10 +712,10 @@ actually <em>execute</em> this code we've built!</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="driver">The Driver</a></div> +<h2><a name="driver">The Driver</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>The driver for this simply invokes all of the parsing pieces with a top-level dispatch loop. There isn't much interesting here, so I'll just include the @@ -753,10 +751,10 @@ type "4+5;", and the parser will know you are done.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="conclusions">Conclusions</a></div> +<h2><a name="conclusions">Conclusions</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>With just under 400 lines of commented code (240 lines of non-comment, non-blank code), we fully defined our minimal language, including a lexer, @@ -790,10 +788,10 @@ Representation (IR) from the AST.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for this and the previous chapter. @@ -1226,8 +1224,8 @@ int main() { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl3.html b/docs/tutorial/LangImpl3.html index a320ff7..47406ca 100644 --- a/docs/tutorial/LangImpl3.html +++ b/docs/tutorial/LangImpl3.html @@ -11,7 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Code generation to LLVM IR</div> +<h1>Kaleidoscope: Code generation to LLVM IR</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -34,10 +34,10 @@ Support</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 3 Introduction</a></div> +<h2><a name="intro">Chapter 3 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 3 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. This chapter shows you how to transform the <a @@ -57,10 +57,10 @@ releases page</a>.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="basics">Code Generation Setup</a></div> +<h2><a name="basics">Code Generation Setup</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> In order to generate LLVM IR, we want some simple setup to get started. First @@ -147,10 +147,10 @@ has already been done, and we'll just use it to emit code. </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="exprs">Expression Code Generation</a></div> +<h2><a name="exprs">Expression Code Generation</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Generating LLVM code for expression nodes is very straightforward: less than 45 lines of commented code for all four of our expression nodes. First @@ -293,10 +293,10 @@ basic framework.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="funcs">Function Code Generation</a></div> +<h2><a name="funcs">Function Code Generation</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Code generation for prototypes and functions must handle a number of details, which make their code less beautiful than expression code @@ -515,11 +515,10 @@ def bar() foo(1, 2); # error, unknown function "foo" </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="driver">Driver Changes and -Closing Thoughts</a></div> +<h2><a name="driver">Driver Changes and Closing Thoughts</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> For now, code generation to LLVM doesn't really get us much, except that we can @@ -657,10 +656,10 @@ support</a> to this so we can actually start running code!</p> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1262,8 +1261,8 @@ int main() { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2011-02-15 01:24:32 +0100 (Tue, 15 Feb 2011) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl4.html b/docs/tutorial/LangImpl4.html index a2511d9..5b8990e4 100644 --- a/docs/tutorial/LangImpl4.html +++ b/docs/tutorial/LangImpl4.html @@ -11,7 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Adding JIT and Optimizer Support</div> +<h1>Kaleidoscope: Adding JIT and Optimizer Support</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -33,10 +33,10 @@ Flow</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 4 Introduction</a></div> +<h2><a name="intro">Chapter 4 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 4 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. Chapters 1-3 described the implementation of a simple @@ -48,11 +48,10 @@ for the Kaleidoscope language.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="trivialconstfold">Trivial Constant -Folding</a></div> +<h2><a name="trivialconstfold">Trivial Constant Folding</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Our demonstration for Chapter 3 is elegant and easy to extend. Unfortunately, @@ -134,11 +133,10 @@ range of optimizations that you can use, in the form of "passes".</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="optimizerpasses">LLVM Optimization - Passes</a></div> +<h2><a name="optimizerpasses">LLVM Optimization Passes</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>LLVM provides many optimization passes, which do many different sorts of things and have different tradeoffs. Unlike other systems, LLVM doesn't hold @@ -266,10 +264,10 @@ executing it!</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="jit">Adding a JIT Compiler</a></div> +<h2><a name="jit">Adding a JIT Compiler</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Code that is available in LLVM IR can have a wide variety of tools applied to it. For example, you can run optimizations on it (as we did above), @@ -474,10 +472,10 @@ tackling some interesting LLVM IR issues along the way.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1078,7 +1076,7 @@ int main() { // Create the JIT. This takes ownership of the module. std::string ErrStr; - TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create(); +TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create(); if (!TheExecutionEngine) { fprintf(stderr, "Could not create ExecutionEngine: %s\n", ErrStr.c_str()); exit(1); @@ -1130,8 +1128,8 @@ int main() { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-11-16 18:28:22 +0100 (Tue, 16 Nov 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl5.html b/docs/tutorial/LangImpl5.html index d2c3bd0..4fc23a1 100644 --- a/docs/tutorial/LangImpl5.html +++ b/docs/tutorial/LangImpl5.html @@ -11,7 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Extending the Language: Control Flow</div> +<h1>Kaleidoscope: Extending the Language: Control Flow</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -48,10 +48,10 @@ User-defined Operators</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 5 Introduction</a></div> +<h2><a name="intro">Chapter 5 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 5 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. Parts 1-4 described the implementation of the simple @@ -65,14 +65,14 @@ have an if/then/else expression plus a simple 'for' loop.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="ifthen">If/Then/Else</a></div> +<h2><a name="ifthen">If/Then/Else</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Extending Kaleidoscope to support if/then/else is quite straightforward. It -basically requires adding lexer support for this "new" concept to the lexer, +basically requires adding support for this "new" concept to the lexer, parser, AST, and LLVM code emitter. This example is nice, because it shows how easy it is to "grow" a language over time, incrementally extending it as new ideas are discovered.</p> @@ -108,15 +108,12 @@ Since Kaleidoscope allows side-effects, this behavior is important to nail down. <p>Now that we know what we "want", lets break this down into its constituent pieces.</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="iflexer">Lexer Extensions for -If/Then/Else</a></div> +<h4><a name="iflexer">Lexer Extensions for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The lexer extensions are straightforward. First we add new enum values for the relevant tokens:</p> @@ -146,11 +143,10 @@ stuff:</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifast">AST Extensions for - If/Then/Else</a></div> +<h4><a name="ifast">AST Extensions for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>To represent the new expression we add a new AST node for it:</p> @@ -172,11 +168,10 @@ public: </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifparser">Parser Extensions for -If/Then/Else</a></div> +<h4><a name="ifparser">Parser Extensions for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Now that we have the relevant tokens coming from the lexer and we have the AST node to build, our parsing logic is relatively straightforward. First we @@ -231,10 +226,10 @@ static ExprAST *ParsePrimary() { </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifir">LLVM IR for If/Then/Else</a></div> +<h4><a name="ifir">LLVM IR for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Now that we have it parsing and building the AST, the final piece is adding LLVM code generation support. This is the most interesting part of the @@ -347,11 +342,10 @@ directly.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifcodegen">Code Generation for -If/Then/Else</a></div> +<h4><a name="ifcodegen">Code Generation for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>In order to generate code for this, we implement the <tt>Codegen</tt> method for <tt>IfExprAST</tt>:</p> @@ -472,7 +466,7 @@ are emitted, we can finish up with the merge code:</p> // Emit merge block. TheFunction->getBasicBlockList().push_back(MergeBB); Builder.SetInsertPoint(MergeBB); - PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), + PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, "iftmp"); PN->addIncoming(ThenV, ThenBB); @@ -500,11 +494,13 @@ another useful expression that is familiar from non-functional languages...</p> </div> +</div> + <!-- *********************************************************************** --> -<div class="doc_section"><a name="for">'for' Loop Expression</a></div> +<h2><a name="for">'for' Loop Expression</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Now that we know how to add basic control flow constructs to the language, we have the tools to add more powerful things. Lets add something more @@ -533,14 +529,11 @@ variables, it will get more useful.</p> <p>As before, lets talk about the changes that we need to Kaleidoscope to support this.</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forlexer">Lexer Extensions for -the 'for' Loop</a></div> +<h4><a name="forlexer">Lexer Extensions for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The lexer extensions are the same sort of thing as for if/then/else:</p> @@ -566,11 +559,10 @@ the 'for' Loop</a></div> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forast">AST Extensions for -the 'for' Loop</a></div> +<h4><a name="forast">AST Extensions for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The AST node is just as simple. It basically boils down to capturing the variable name and the constituent expressions in the node.</p> @@ -593,11 +585,10 @@ public: </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forparser">Parser Extensions for -the 'for' Loop</a></div> +<h4><a name="forparser">Parser Extensions for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The parser code is also fairly standard. The only interesting thing here is handling of the optional step value. The parser code handles it by checking to @@ -653,11 +644,10 @@ static ExprAST *ParseForExpr() { </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forir">LLVM IR for -the 'for' Loop</a></div> +<h4><a name="forir">LLVM IR for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Now we get to the good part: the LLVM IR we want to generate for this thing. With the simple example above, we get this LLVM IR (note that this dump is @@ -699,11 +689,10 @@ expressions, and some basic blocks. Lets see how this fits together.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forcodegen">Code Generation for -the 'for' Loop</a></div> +<h4><a name="forcodegen">Code Generation for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The first part of Codegen is very simple: we just output the start expression for the loop value:</p> @@ -746,7 +735,7 @@ create an unconditional branch for the fall-through between the two blocks.</p> Builder.SetInsertPoint(LoopBB); // Start the PHI node with an entry for Start. - PHINode *Variable = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), VarName.c_str()); + PHINode *Variable = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, VarName.c_str()); Variable->addIncoming(StartVal, PreheaderBB); </pre> </div> @@ -876,11 +865,13 @@ language.</p> </div> +</div> + <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1452,7 +1443,7 @@ Value *IfExprAST::Codegen() { // Emit merge block. TheFunction->getBasicBlockList().push_back(MergeBB); Builder.SetInsertPoint(MergeBB); - PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), + PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, "iftmp"); PN->addIncoming(ThenV, ThenBB); @@ -1494,7 +1485,7 @@ Value *ForExprAST::Codegen() { Builder.SetInsertPoint(LoopBB); // Start the PHI node with an entry for Start. - PHINode *Variable = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), VarName.c_str()); + PHINode *Variable = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, VarName.c_str()); Variable->addIncoming(StartVal, PreheaderBB); // Within the loop, the variable is defined equal to the PHI node. If it @@ -1721,7 +1712,7 @@ int main() { // Create the JIT. This takes ownership of the module. std::string ErrStr; - TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create(); + TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create(); if (!TheExecutionEngine) { fprintf(stderr, "Could not create ExecutionEngine: %s\n", ErrStr.c_str()); exit(1); @@ -1773,8 +1764,8 @@ int main() { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-11-16 18:28:22 +0100 (Tue, 16 Nov 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl6.html b/docs/tutorial/LangImpl6.html index 7ddf3a0..31d7ff4 100644 --- a/docs/tutorial/LangImpl6.html +++ b/docs/tutorial/LangImpl6.html @@ -11,7 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Extending the Language: User-defined Operators</div> +<h1>Kaleidoscope: Extending the Language: User-defined Operators</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -34,10 +34,10 @@ Variables / SSA Construction</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 6 Introduction</a></div> +<h2><a name="intro">Chapter 6 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 6 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. At this point in our tutorial, we now have a fully @@ -60,10 +60,10 @@ an example of what you can build with Kaleidoscope and its feature set.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="idea">User-defined Operators: the Idea</a></div> +<h2><a name="idea">User-defined Operators: the Idea</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> The "operator overloading" that we will add to Kaleidoscope is more general than @@ -125,10 +125,10 @@ operators.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="binary">User-defined Binary Operators</a></div> +<h2><a name="binary">User-defined Binary Operators</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Adding support for user-defined binary operators is pretty simple with our current framework. We'll first add support for the unary/binary keywords:</p> @@ -342,10 +342,10 @@ see what it takes.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="unary">User-defined Unary Operators</a></div> +<h2><a name="unary">User-defined Unary Operators</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Since we don't currently support unary operators in the Kaleidoscope language, we'll need to add everything to support them. Above, we added simple @@ -491,10 +491,10 @@ is simpler primarily because it doesn't need to handle any predefined operators. </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="example">Kicking the Tires</a></div> +<h2><a name="example">Kicking the Tires</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>It is somewhat hard to believe, but with a few simple extensions we've covered in the last chapters, we have grown a real-ish language. With this, we @@ -796,10 +796,10 @@ add variable mutation without building SSA in your front-end.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1475,7 +1475,7 @@ Value *IfExprAST::Codegen() { // Emit merge block. TheFunction->getBasicBlockList().push_back(MergeBB); Builder.SetInsertPoint(MergeBB); - PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), + PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, "iftmp"); PN->addIncoming(ThenV, ThenBB); @@ -1517,7 +1517,7 @@ Value *ForExprAST::Codegen() { Builder.SetInsertPoint(LoopBB); // Start the PHI node with an entry for Start. - PHINode *Variable = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), VarName.c_str()); + PHINode *Variable = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, VarName.c_str()); Variable->addIncoming(StartVal, PreheaderBB); // Within the loop, the variable is defined equal to the PHI node. If it @@ -1758,7 +1758,7 @@ int main() { // Create the JIT. This takes ownership of the module. std::string ErrStr; - TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create(); + TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create(); if (!TheExecutionEngine) { fprintf(stderr, "Could not create ExecutionEngine: %s\n", ErrStr.c_str()); exit(1); @@ -1810,8 +1810,8 @@ int main() { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-11-16 18:28:22 +0100 (Tue, 16 Nov 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl7.html b/docs/tutorial/LangImpl7.html index 3b36129..a4a21f1 100644 --- a/docs/tutorial/LangImpl7.html +++ b/docs/tutorial/LangImpl7.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Extending the Language: Mutable Variables</div> +<h1>Kaleidoscope: Extending the Language: Mutable Variables</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -38,10 +38,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 7 Introduction</a></div> +<h2><a name="intro">Chapter 7 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 7 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. In chapters 1 through 6, we've built a very @@ -66,10 +66,10 @@ support for this, though the way it works is a bit unexpected for some.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="why">Why is this a hard problem?</a></div> +<h2><a name="why">Why is this a hard problem?</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> To understand why mutable variables cause complexities in SSA construction, @@ -140,10 +140,10 @@ logic.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="memory">Memory in LLVM</a></div> +<h2><a name="memory">Memory in LLVM</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>The 'trick' here is that while LLVM does require all register values to be in SSA form, it does not require (or permit) memory objects to be in SSA form. @@ -321,11 +321,10 @@ variables now! </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="kalvars">Mutable Variables in -Kaleidoscope</a></div> +<h2><a name="kalvars">Mutable Variables in Kaleidoscope</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Now that we know the sort of problem we want to tackle, lets see what this looks like in the context of our little Kaleidoscope language. We're going to @@ -378,11 +377,10 @@ Kaleidoscope to support new variable definitions. </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="adjustments">Adjusting Existing Variables for -Mutation</a></div> +<h2><a name="adjustments">Adjusting Existing Variables for Mutation</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> The symbol table in Kaleidoscope is managed at code generation time by the @@ -648,10 +646,10 @@ we'll add the assignment operator.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="assignment">New Assignment Operator</a></div> +<h2><a name="assignment">New Assignment Operator</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>With our current framework, adding a new assignment operator is really simple. We will parse it just like any other binary operator, but handle it @@ -745,11 +743,10 @@ add this next! </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="localvars">User-defined Local -Variables</a></div> +<h2><a name="localvars">User-defined Local Variables</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Adding var/in is just like any other other extensions we made to Kaleidoscope: we extend the lexer, the parser, the AST and the code generator. @@ -979,10 +976,10 @@ anywhere in sight.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with mutable @@ -1755,7 +1752,7 @@ Value *IfExprAST::Codegen() { // Emit merge block. TheFunction->getBasicBlockList().push_back(MergeBB); Builder.SetInsertPoint(MergeBB); - PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), + PHINode *PN = Builder.CreatePHI(Type::getDoubleTy(getGlobalContext()), 2, "iftmp"); PN->addIncoming(ThenV, ThenBB); @@ -2160,8 +2157,8 @@ int main() { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-11-16 18:28:22 +0100 (Tue, 16 Nov 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/LangImpl8.html b/docs/tutorial/LangImpl8.html index fe42a22..cc55d40 100644 --- a/docs/tutorial/LangImpl8.html +++ b/docs/tutorial/LangImpl8.html @@ -11,8 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Conclusion and other useful LLVM - tidbits</div> +<h1>Kaleidoscope: Conclusion and other useful LLVM tidbits</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -43,10 +42,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="conclusion">Tutorial Conclusion</a></div> +<h2><a name="conclusion">Tutorial Conclusion</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to the the final chapter of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. In the course of this tutorial, we have grown @@ -154,23 +153,19 @@ are very useful if you want to take advantage of LLVM's capabilities.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="llvmirproperties">Properties of the LLVM -IR</a></div> +<h2><a name="llvmirproperties">Properties of the LLVM IR</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>We have a couple common questions about code in the LLVM IR form - lets just get these out of the way right now, shall we?</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="targetindep">Target -Independence</a></div> +<h4><a name="targetindep">Target Independence</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Kaleidoscope is an example of a "portable language": any program written in Kaleidoscope will work the same way on any target that it runs on. Many other @@ -221,10 +216,10 @@ in-kernel language.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="safety">Safety Guarantees</a></div> +<h4><a name="safety">Safety Guarantees</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Many of the languages above are also "safe" languages: it is impossible for a program written in Java to corrupt its address space and crash the process @@ -243,11 +238,10 @@ list</a> if you are interested in more details.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="langspecific">Language-Specific -Optimizations</a></div> +<h4><a name="langspecific">Language-Specific Optimizations</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>One thing about LLVM that turns off many people is that it does not solve all the world's problems in one system (sorry 'world hunger', someone else will have @@ -297,24 +291,23 @@ language-specific AST. </div> +</div> + <!-- *********************************************************************** --> -<div class="doc_section"><a name="tipsandtricks">Tips and Tricks</a></div> +<h2><a name="tipsandtricks">Tips and Tricks</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>There is a variety of useful tips and tricks that you come to know after working on/with LLVM that aren't obvious at first glance. Instead of letting everyone rediscover them, this section talks about some of these issues.</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="offsetofsizeof">Implementing portable -offsetof/sizeof</a></div> +<h4><a name="offsetofsizeof">Implementing portable offsetof/sizeof</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>One interesting thing that comes up, if you are trying to keep the code generated by your compiler "target independent", is that you often need to know @@ -331,11 +324,10 @@ in a portable way.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="gcstack">Garbage Collected -Stack Frames</a></div> +<h4><a name="gcstack">Garbage Collected Stack Frames</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Some languages want to explicitly manage their stack frames, often so that they are garbage collected or to allow easy implementation of closures. There @@ -349,6 +341,8 @@ Passing Style</a> and the use of tail calls (which LLVM also supports).</p> </div> +</div> + <!-- *********************************************************************** --> <hr> <address> @@ -358,8 +352,8 @@ Passing Style</a> and the use of tail calls (which LLVM also supports).</p> src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl1.html b/docs/tutorial/OCamlLangImpl1.html index 4410613..7cae68c 100644 --- a/docs/tutorial/OCamlLangImpl1.html +++ b/docs/tutorial/OCamlLangImpl1.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Tutorial Introduction and the Lexer</div> +<h1>Kaleidoscope: Tutorial Introduction and the Lexer</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -35,10 +35,10 @@ AST</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Tutorial Introduction</a></div> +<h2><a name="intro">Tutorial Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to the "Implementing a language with LLVM" tutorial. This tutorial runs through the implementation of a simple language, showing how fun and @@ -130,10 +130,10 @@ languages!</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="language">The Basic Language</a></div> +<h2><a name="language">The Basic Language</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>This tutorial will be illustrated with a toy language that we'll call "<a href="http://en.wikipedia.org/wiki/Kaleidoscope">Kaleidoscope</a>" (derived @@ -188,10 +188,10 @@ a Mandelbrot Set</a> at various levels of magnification.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="lexer">The Lexer</a></div> +<h2><a name="lexer">The Lexer</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>When it comes to implementing a language, the first thing needed is the ability to process a text file and recognize what it says. The traditional @@ -358,8 +358,8 @@ include a driver so that you can use the lexer and parser together. <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> <a href="mailto:idadesub@users.sourceforge.net">Erick Tryzelaar</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl2.html b/docs/tutorial/OCamlLangImpl2.html index 41d0956..e1bb871 100644 --- a/docs/tutorial/OCamlLangImpl2.html +++ b/docs/tutorial/OCamlLangImpl2.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Implementing a Parser and AST</div> +<h1>Kaleidoscope: Implementing a Parser and AST</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -40,10 +40,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 2 Introduction</a></div> +<h2><a name="intro">Chapter 2 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 2 of the "<a href="index.html">Implementing a language with LLVM in Objective Caml</a>" tutorial. This chapter shows you how to use @@ -65,10 +65,10 @@ Tree.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="ast">The Abstract Syntax Tree (AST)</a></div> +<h2><a name="ast">The Abstract Syntax Tree (AST)</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>The AST for a program captures its behavior in such a way that it is easy for later stages of the compiler (e.g. code generation) to interpret. We basically @@ -146,10 +146,10 @@ bodies in Kaleidoscope.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parserbasics">Parser Basics</a></div> +<h2><a name="parserbasics">Parser Basics</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Now that we have an AST to build, we need to define the parser code to build it. The idea here is that we want to parse something like "x+y" (which is @@ -181,11 +181,10 @@ piece of our grammar: numeric literals.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parserprimexprs">Basic Expression - Parsing</a></div> +<h2><a name="parserprimexprs">Basic Expression Parsing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>We start with numeric literals, because they are the simplest to process. For each production in our grammar, we'll define a function which parses that @@ -303,11 +302,10 @@ They are a bit more complex.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parserbinops">Binary Expression - Parsing</a></div> +<h2><a name="parserbinops">Binary Expression Parsing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Binary expressions are significantly harder to parse because they are often ambiguous. For example, when given the string "x+y*z", the parser can choose @@ -517,10 +515,10 @@ handle function definitions, etc.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="parsertop">Parsing the Rest</a></div> +<h2><a name="parsertop">Parsing the Rest</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> The next thing missing is handling of function prototypes. In Kaleidoscope, @@ -596,10 +594,10 @@ actually <em>execute</em> this code we've built!</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="driver">The Driver</a></div> +<h2><a name="driver">The Driver</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>The driver for this simply invokes all of the parsing pieces with a top-level dispatch loop. There isn't much interesting here, so I'll just include the @@ -652,10 +650,10 @@ type "4+5;", and the parser will know you are done.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="conclusions">Conclusions</a></div> +<h2><a name="conclusions">Conclusions</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>With just under 300 lines of commented code (240 lines of non-comment, non-blank code), we fully defined our minimal language, including a lexer, @@ -689,10 +687,10 @@ Representation (IR) from the AST.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for this and the previous chapter. @@ -1038,8 +1036,8 @@ main () <a href="mailto:sabre@nondot.org">Chris Lattner</a> <a href="mailto:erickt@users.sourceforge.net">Erick Tryzelaar</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-07 02:28:04 +0200 (Fri, 07 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl3.html b/docs/tutorial/OCamlLangImpl3.html index c7c5370..e52bb6c 100644 --- a/docs/tutorial/OCamlLangImpl3.html +++ b/docs/tutorial/OCamlLangImpl3.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Code generation to LLVM IR</div> +<h1>Kaleidoscope: Code generation to LLVM IR</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -38,10 +38,10 @@ Support</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 3 Introduction</a></div> +<h2><a name="intro">Chapter 3 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 3 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. This chapter shows you how to transform the <a @@ -57,10 +57,10 @@ LLVM SVN to work. LLVM 2.2 and before will not work with it.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="basics">Code Generation Setup</a></div> +<h2><a name="basics">Code Generation Setup</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> In order to generate LLVM IR, we want some simple setup to get started. First @@ -128,10 +128,10 @@ that this has already been done, and we'll just use it to emit code.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="exprs">Expression Code Generation</a></div> +<h2><a name="exprs">Expression Code Generation</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Generating LLVM code for expression nodes is very straightforward: less than 30 lines of commented code for all four of our expression nodes. First @@ -263,10 +263,10 @@ basic framework.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="funcs">Function Code Generation</a></div> +<h2><a name="funcs">Function Code Generation</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Code generation for prototypes and functions must handle a number of details, which make their code less beautiful than expression code @@ -466,11 +466,10 @@ def bar() foo(1, 2); # error, unknown function "foo" </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="driver">Driver Changes and -Closing Thoughts</a></div> +<h2><a name="driver">Driver Changes and Closing Thoughts</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> For now, code generation to LLVM doesn't really get us much, except that we can @@ -607,10 +606,10 @@ support</a> to this so we can actually start running code!</p> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1086,8 +1085,8 @@ main () <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> <a href="mailto:idadesub@users.sourceforge.net">Erick Tryzelaar</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-28 19:07:41 +0200 (Fri, 28 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl4.html b/docs/tutorial/OCamlLangImpl4.html index a86184c..db164d5 100644 --- a/docs/tutorial/OCamlLangImpl4.html +++ b/docs/tutorial/OCamlLangImpl4.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Adding JIT and Optimizer Support</div> +<h1>Kaleidoscope: Adding JIT and Optimizer Support</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -37,10 +37,10 @@ Flow</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 4 Introduction</a></div> +<h2><a name="intro">Chapter 4 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 4 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. Chapters 1-3 described the implementation of a simple @@ -52,11 +52,10 @@ for the Kaleidoscope language.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="trivialconstfold">Trivial Constant -Folding</a></div> +<h2><a name="trivialconstfold">Trivial Constant Folding</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p><b>Note:</b> the default <tt>IRBuilder</tt> now always includes the constant folding optimisations below.<p> @@ -148,11 +147,10 @@ range of optimizations that you can use, in the form of "passes".</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="optimizerpasses">LLVM Optimization - Passes</a></div> +<h2><a name="optimizerpasses">LLVM Optimization Passes</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>LLVM provides many optimization passes, which do many different sorts of things and have different tradeoffs. Unlike other systems, LLVM doesn't hold @@ -283,10 +281,10 @@ executing it!</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="jit">Adding a JIT Compiler</a></div> +<h2><a name="jit">Adding a JIT Compiler</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Code that is available in LLVM IR can have a wide variety of tools applied to it. For example, you can run optimizations on it (as we did above), @@ -486,10 +484,10 @@ constructs</a>, tackling some interesting LLVM IR issues along the way.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1022,8 +1020,8 @@ extern double putchard(double X) { <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> <a href="mailto:idadesub@users.sourceforge.net">Erick Tryzelaar</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-28 19:07:41 +0200 (Fri, 28 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl5.html b/docs/tutorial/OCamlLangImpl5.html index 3173803..ca79691 100644 --- a/docs/tutorial/OCamlLangImpl5.html +++ b/docs/tutorial/OCamlLangImpl5.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Extending the Language: Control Flow</div> +<h1>Kaleidoscope: Extending the Language: Control Flow</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -52,10 +52,10 @@ User-defined Operators</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 5 Introduction</a></div> +<h2><a name="intro">Chapter 5 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 5 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. Parts 1-4 described the implementation of the simple @@ -69,10 +69,10 @@ have an if/then/else expression plus a simple 'for' loop.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="ifthen">If/Then/Else</a></div> +<h2><a name="ifthen">If/Then/Else</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Extending Kaleidoscope to support if/then/else is quite straightforward. It @@ -112,15 +112,12 @@ Since Kaleidoscope allows side-effects, this behavior is important to nail down. <p>Now that we know what we "want", lets break this down into its constituent pieces.</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="iflexer">Lexer Extensions for -If/Then/Else</a></div> +<h4><a name="iflexer">Lexer Extensions for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The lexer extensions are straightforward. First we add new variants for the relevant tokens:</p> @@ -153,11 +150,10 @@ stuff:</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifast">AST Extensions for - If/Then/Else</a></div> +<h4><a name="ifast">AST Extensions for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>To represent the new expression we add a new AST variant for it:</p> @@ -175,11 +171,10 @@ type expr = </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifparser">Parser Extensions for -If/Then/Else</a></div> +<h4><a name="ifparser">Parser Extensions for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Now that we have the relevant tokens coming from the lexer and we have the AST node to build, our parsing logic is relatively straightforward. First we @@ -214,10 +209,10 @@ let rec parse_primary = parser </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifir">LLVM IR for If/Then/Else</a></div> +<h4><a name="ifir">LLVM IR for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Now that we have it parsing and building the AST, the final piece is adding LLVM code generation support. This is the most interesting part of the @@ -331,11 +326,10 @@ directly.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="ifcodegen">Code Generation for -If/Then/Else</a></div> +<h4><a name="ifcodegen">Code Generation for If/Then/Else</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>In order to generate code for this, we implement the <tt>Codegen</tt> method for <tt>IfExprAST</tt>:</p> @@ -492,11 +486,13 @@ another useful expression that is familiar from non-functional languages...</p> </div> +</div> + <!-- *********************************************************************** --> -<div class="doc_section"><a name="for">'for' Loop Expression</a></div> +<h2><a name="for">'for' Loop Expression</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Now that we know how to add basic control flow constructs to the language, we have the tools to add more powerful things. Lets add something more @@ -525,14 +521,11 @@ variables, it will get more useful.</p> <p>As before, lets talk about the changes that we need to Kaleidoscope to support this.</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forlexer">Lexer Extensions for -the 'for' Loop</a></div> +<h4><a name="forlexer">Lexer Extensions for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The lexer extensions are the same sort of thing as for if/then/else:</p> @@ -559,11 +552,10 @@ the 'for' Loop</a></div> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forast">AST Extensions for -the 'for' Loop</a></div> +<h4><a name="forast">AST Extensions for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The AST variant is just as simple. It basically boils down to capturing the variable name and the constituent expressions in the node.</p> @@ -580,11 +572,10 @@ type expr = </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forparser">Parser Extensions for -the 'for' Loop</a></div> +<h4><a name="forparser">Parser Extensions for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The parser code is also fairly standard. The only interesting thing here is handling of the optional step value. The parser code handles it by checking to @@ -628,11 +619,10 @@ let rec parse_primary = parser </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forir">LLVM IR for -the 'for' Loop</a></div> +<h4><a name="forir">LLVM IR for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Now we get to the good part: the LLVM IR we want to generate for this thing. With the simple example above, we get this LLVM IR (note that this dump is @@ -674,11 +664,10 @@ expressions, and some basic blocks. Lets see how this fits together.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="forcodegen">Code Generation for -the 'for' Loop</a></div> +<h4><a name="forcodegen">Code Generation for the 'for' Loop</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>The first part of Codegen is very simple: we just output the start expression for the loop value:</p> @@ -851,11 +840,13 @@ to our poor innocent language.</p> </div> +</div> + <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1562,8 +1553,8 @@ operators</a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> <a href="mailto:idadesub@users.sourceforge.net">Erick Tryzelaar</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-05-28 19:07:41 +0200 (Fri, 28 May 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl6.html b/docs/tutorial/OCamlLangImpl6.html index 1d4f8c7..bde429b 100644 --- a/docs/tutorial/OCamlLangImpl6.html +++ b/docs/tutorial/OCamlLangImpl6.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title">Kaleidoscope: Extending the Language: User-defined Operators</div> +<h1>Kaleidoscope: Extending the Language: User-defined Operators</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -38,10 +38,10 @@ Variables / SSA Construction</li> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 6 Introduction</a></div> +<h2><a name="intro">Chapter 6 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 6 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. At this point in our tutorial, we now have a fully @@ -64,10 +64,10 @@ an example of what you can build with Kaleidoscope and its feature set.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="idea">User-defined Operators: the Idea</a></div> +<h2><a name="idea">User-defined Operators: the Idea</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> The "operator overloading" that we will add to Kaleidoscope is more general than @@ -129,10 +129,10 @@ operators.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="binary">User-defined Binary Operators</a></div> +<h2><a name="binary">User-defined Binary Operators</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Adding support for user-defined binary operators is pretty simple with our current framework. We'll first add support for the unary/binary keywords:</p> @@ -320,10 +320,10 @@ see what it takes.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="unary">User-defined Unary Operators</a></div> +<h2><a name="unary">User-defined Unary Operators</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Since we don't currently support unary operators in the Kaleidoscope language, we'll need to add everything to support them. Above, we added simple @@ -472,10 +472,10 @@ is simpler primarily because it doesn't need to handle any predefined operators. </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="example">Kicking the Tires</a></div> +<h2><a name="example">Kicking the Tires</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>It is somewhat hard to believe, but with a few simple extensions we've covered in the last chapters, we have grown a real-ish language. With this, we @@ -778,10 +778,10 @@ add variable mutation without building SSA in your front-end.</p> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with the @@ -1567,8 +1567,8 @@ SSA construction</a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> <a href="mailto:idadesub@users.sourceforge.net">Erick Tryzelaar</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-06-21 22:31:30 +0200 (Mon, 21 Jun 2010) $ + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl7.html b/docs/tutorial/OCamlLangImpl7.html index a9fcd70..a48e679 100644 --- a/docs/tutorial/OCamlLangImpl7.html +++ b/docs/tutorial/OCamlLangImpl7.html @@ -13,7 +13,7 @@ <body> -<div class="doc_title">Kaleidoscope: Extending the Language: Mutable Variables</div> +<h1>Kaleidoscope: Extending the Language: Mutable Variables</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -42,10 +42,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="intro">Chapter 7 Introduction</a></div> +<h2><a name="intro">Chapter 7 Introduction</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to Chapter 7 of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. In chapters 1 through 6, we've built a very @@ -70,10 +70,10 @@ support for this, though the way it works is a bit unexpected for some.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="why">Why is this a hard problem?</a></div> +<h2><a name="why">Why is this a hard problem?</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> To understand why mutable variables cause complexities in SSA construction, @@ -144,10 +144,10 @@ logic.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="memory">Memory in LLVM</a></div> +<h2><a name="memory">Memory in LLVM</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>The 'trick' here is that while LLVM does require all register values to be in SSA form, it does not require (or permit) memory objects to be in SSA form. @@ -325,11 +325,10 @@ variables now! </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="kalvars">Mutable Variables in -Kaleidoscope</a></div> +<h2><a name="kalvars">Mutable Variables in Kaleidoscope</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Now that we know the sort of problem we want to tackle, lets see what this looks like in the context of our little Kaleidoscope language. We're going to @@ -382,11 +381,10 @@ Kaleidoscope to support new variable definitions. </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="adjustments">Adjusting Existing Variables for -Mutation</a></div> +<h2><a name="adjustments">Adjusting Existing Variables for Mutation</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> The symbol table in Kaleidoscope is managed at code generation time by the @@ -672,10 +670,10 @@ we'll add the assignment operator.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="assignment">New Assignment Operator</a></div> +<h2><a name="assignment">New Assignment Operator</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>With our current framework, adding a new assignment operator is really simple. We will parse it just like any other binary operator, but handle it @@ -773,11 +771,10 @@ add this next! </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="localvars">User-defined Local -Variables</a></div> +<h2><a name="localvars">User-defined Local Variables</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Adding var/in is just like any other other extensions we made to Kaleidoscope: we extend the lexer, the parser, the AST and the code generator. @@ -956,10 +953,10 @@ anywhere in sight.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="code">Full Code Listing</a></div> +<h2><a name="code">Full Code Listing</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p> Here is the complete code listing for our running example, enhanced with mutable @@ -1887,7 +1884,7 @@ extern double printd(double X) { </dd> </dl> -<a href="LangImpl8.html">Next: Conclusion and other useful LLVM tidbits</a> +<a href="OCamlLangImpl8.html">Next: Conclusion and other useful LLVM tidbits</a> </div> <!-- *********************************************************************** --> @@ -1899,9 +1896,9 @@ extern double printd(double X) { src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> <a href="mailto:idadesub@users.sourceforge.net">Erick Tryzelaar</a><br> - Last modified: $Date: 2011-01-01 04:27:43 +0100 (Sat, 01 Jan 2011) $ + Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $ </address> </body> </html> diff --git a/docs/tutorial/OCamlLangImpl8.html b/docs/tutorial/OCamlLangImpl8.html index 64a6200..eed8c03 100644 --- a/docs/tutorial/OCamlLangImpl8.html +++ b/docs/tutorial/OCamlLangImpl8.html @@ -11,8 +11,7 @@ <body> -<div class="doc_title">Kaleidoscope: Conclusion and other useful LLVM - tidbits</div> +<h1>Kaleidoscope: Conclusion and other useful LLVM tidbits</h1> <ul> <li><a href="index.html">Up to Tutorial Index</a></li> @@ -43,10 +42,10 @@ </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="conclusion">Tutorial Conclusion</a></div> +<h2><a name="conclusion">Tutorial Conclusion</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>Welcome to the the final chapter of the "<a href="index.html">Implementing a language with LLVM</a>" tutorial. In the course of this tutorial, we have grown @@ -154,23 +153,19 @@ are very useful if you want to take advantage of LLVM's capabilities.</p> </div> <!-- *********************************************************************** --> -<div class="doc_section"><a name="llvmirproperties">Properties of the LLVM -IR</a></div> +<h2><a name="llvmirproperties">Properties of the LLVM IR</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>We have a couple common questions about code in the LLVM IR form - lets just get these out of the way right now, shall we?</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="targetindep">Target -Independence</a></div> +<h4><a name="targetindep">Target Independence</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Kaleidoscope is an example of a "portable language": any program written in Kaleidoscope will work the same way on any target that it runs on. Many other @@ -221,10 +216,10 @@ in-kernel language.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="safety">Safety Guarantees</a></div> +<h4><a name="safety">Safety Guarantees</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Many of the languages above are also "safe" languages: it is impossible for a program written in Java to corrupt its address space and crash the process @@ -243,11 +238,10 @@ list</a> if you are interested in more details.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="langspecific">Language-Specific -Optimizations</a></div> +<h4><a name="langspecific">Language-Specific Optimizations</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>One thing about LLVM that turns off many people is that it does not solve all the world's problems in one system (sorry 'world hunger', someone else will have @@ -297,24 +291,23 @@ language-specific AST. </div> +</div> + <!-- *********************************************************************** --> -<div class="doc_section"><a name="tipsandtricks">Tips and Tricks</a></div> +<h2><a name="tipsandtricks">Tips and Tricks</a></h2> <!-- *********************************************************************** --> -<div class="doc_text"> +<div> <p>There is a variety of useful tips and tricks that you come to know after working on/with LLVM that aren't obvious at first glance. Instead of letting everyone rediscover them, this section talks about some of these issues.</p> -</div> - <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="offsetofsizeof">Implementing portable -offsetof/sizeof</a></div> +<h4><a name="offsetofsizeof">Implementing portable offsetof/sizeof</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>One interesting thing that comes up, if you are trying to keep the code generated by your compiler "target independent", is that you often need to know @@ -331,11 +324,10 @@ in a portable way.</p> </div> <!-- ======================================================================= --> -<div class="doc_subsubsection"><a name="gcstack">Garbage Collected -Stack Frames</a></div> +<h4><a name="gcstack">Garbage Collected Stack Frames</a></h4> <!-- ======================================================================= --> -<div class="doc_text"> +<div> <p>Some languages want to explicitly manage their stack frames, often so that they are garbage collected or to allow easy implementation of closures. There @@ -349,6 +341,8 @@ Passing Style</a> and the use of tail calls (which LLVM also supports).</p> </div> +</div> + <!-- *********************************************************************** --> <hr> <address> @@ -358,7 +352,7 @@ Passing Style</a> and the use of tail calls (which LLVM also supports).</p> src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> - <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> + <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br> Last modified: $Date$ </address> </body> diff --git a/docs/tutorial/index.html b/docs/tutorial/index.html index 11dd5e2..0a8cae2 100644 --- a/docs/tutorial/index.html +++ b/docs/tutorial/index.html @@ -12,7 +12,7 @@ <body> -<div class="doc_title"> LLVM Tutorial: Table of Contents </div> +<h1>LLVM Tutorial: Table of Contents</h1> <ol> <li>Kaleidoscope: Implementing a Language with LLVM |