summaryrefslogtreecommitdiff
path: root/docs/tutorial
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-11-06 01:39:12 +0000
committerChris Lattner <sabre@nondot.org>2007-11-06 01:39:12 +0000
commit711552174e3a666175228c72ab88f1c37439e284 (patch)
tree8ed0cc3ce60c04670b2696d58d16b298457844d9 /docs/tutorial
parent89c94f5cedbb975f7820b85acbe56d62f11bdfe5 (diff)
downloadllvm-711552174e3a666175228c72ab88f1c37439e284.tar.gz
llvm-711552174e3a666175228c72ab88f1c37439e284.tar.bz2
llvm-711552174e3a666175228c72ab88f1c37439e284.tar.xz
fixes from Ryan Brown.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43747 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/tutorial')
-rw-r--r--docs/tutorial/LangImpl1.html2
-rw-r--r--docs/tutorial/LangImpl2.html36
-rw-r--r--docs/tutorial/LangImpl3.html22
-rw-r--r--docs/tutorial/LangImpl4.html20
-rw-r--r--docs/tutorial/LangImpl5.html11
-rw-r--r--docs/tutorial/LangImpl6.html4
-rw-r--r--docs/tutorial/LangImpl7.html14
7 files changed, 59 insertions, 50 deletions
diff --git a/docs/tutorial/LangImpl1.html b/docs/tutorial/LangImpl1.html
index f57848b8e3..2ce59b98eb 100644
--- a/docs/tutorial/LangImpl1.html
+++ b/docs/tutorial/LangImpl1.html
@@ -232,7 +232,7 @@ if you typed in "1.23". Feel free to extend it :). Next we handle comments:
</pre>
</div>
-<p>We handle comments by skipping to the end of the line and then returning the
+<p>We handle comments by skipping to the end of the line and then return the
next comment. Finally, if the input doesn't match one of the above cases, it is
either an operator character like '+' or the end of the file. These are handled with
this code:</p>
diff --git a/docs/tutorial/LangImpl2.html b/docs/tutorial/LangImpl2.html
index 7eed8d644b..b8b6112884 100644
--- a/docs/tutorial/LangImpl2.html
+++ b/docs/tutorial/LangImpl2.html
@@ -325,16 +325,18 @@ static ExprAST *ParseIdentifierExpr() {
// Call.
getNextToken(); // eat (
std::vector&lt;ExprAST*&gt; Args;
- while (1) {
- ExprAST *Arg = ParseExpression();
- if (!Arg) return 0;
- Args.push_back(Arg);
+ if (CurTok != ')') {
+ while (1) {
+ ExprAST *Arg = ParseExpression();
+ if (!Arg) return 0;
+ Args.push_back(Arg);
- if (CurTok == ')') break;
+ if (CurTok == ')') break;
- if (CurTok != ',')
- return Error("Expected ')'");
- getNextToken();
+ if (CurTok != ',')
+ return Error("Expected ')'");
+ getNextToken();
+ }
}
// Eat the ')'.
@@ -985,16 +987,18 @@ static ExprAST *ParseIdentifierExpr() {
// Call.
getNextToken(); // eat (
std::vector&lt;ExprAST*&gt; Args;
- while (1) {
- ExprAST *Arg = ParseExpression();
- if (!Arg) return 0;
- Args.push_back(Arg);
+ if (CurTok != ')') {
+ while (1) {
+ ExprAST *Arg = ParseExpression();
+ if (!Arg) return 0;
+ Args.push_back(Arg);
- if (CurTok == ')') break;
+ if (CurTok == ')') break;
- if (CurTok != ',')
- return Error("Expected ')'");
- getNextToken();
+ if (CurTok != ',')
+ return Error("Expected ')'");
+ getNextToken();
+ }
}
// Eat the ')'.
diff --git a/docs/tutorial/LangImpl3.html b/docs/tutorial/LangImpl3.html
index 22987e552b..5e6d2c82f7 100644
--- a/docs/tutorial/LangImpl3.html
+++ b/docs/tutorial/LangImpl3.html
@@ -192,7 +192,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
default: return ErrorV("invalid binary operator");
@@ -860,16 +860,18 @@ static ExprAST *ParseIdentifierExpr() {
// Call.
getNextToken(); // eat (
std::vector&lt;ExprAST*&gt; Args;
- while (1) {
- ExprAST *Arg = ParseExpression();
- if (!Arg) return 0;
- Args.push_back(Arg);
+ if (CurTok != ')') {
+ while (1) {
+ ExprAST *Arg = ParseExpression();
+ if (!Arg) return 0;
+ Args.push_back(Arg);
- if (CurTok == ')') break;
+ if (CurTok == ')') break;
- if (CurTok != ',')
- return Error("Expected ')'");
- getNextToken();
+ if (CurTok != ',')
+ return Error("Expected ')'");
+ getNextToken();
+ }
}
// Eat the ')'.
@@ -1034,7 +1036,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
default: return ErrorV("invalid binary operator");
diff --git a/docs/tutorial/LangImpl4.html b/docs/tutorial/LangImpl4.html
index 7b02faa614..11a6cc0177 100644
--- a/docs/tutorial/LangImpl4.html
+++ b/docs/tutorial/LangImpl4.html
@@ -715,16 +715,18 @@ static ExprAST *ParseIdentifierExpr() {
// Call.
getNextToken(); // eat (
std::vector&lt;ExprAST*&gt; Args;
- while (1) {
- ExprAST *Arg = ParseExpression();
- if (!Arg) return 0;
- Args.push_back(Arg);
+ if (CurTok != ')') {
+ while (1) {
+ ExprAST *Arg = ParseExpression();
+ if (!Arg) return 0;
+ Args.push_back(Arg);
- if (CurTok == ')') break;
+ if (CurTok == ')') break;
- if (CurTok != ',')
- return Error("Expected ')'");
- getNextToken();
+ if (CurTok != ',')
+ return Error("Expected ')'");
+ getNextToken();
+ }
}
// Eat the ')'.
@@ -890,7 +892,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
default: return ErrorV("invalid binary operator");
diff --git a/docs/tutorial/LangImpl5.html b/docs/tutorial/LangImpl5.html
index acd60456c8..be82b2dab5 100644
--- a/docs/tutorial/LangImpl5.html
+++ b/docs/tutorial/LangImpl5.html
@@ -319,7 +319,7 @@ block. In this case, if control comes in from the "then" block, it gets the
value of "calltmp". If control comes from the "else" block, it gets the value
of "calltmp1".</p>
-<p>At this point, you are probably starting to think "on no! this means my
+<p>At this point, you are probably starting to think "oh no! this means my
simple and elegant front-end will have to start generating SSA form in order to
use LLVM!". Fortunately, this is not the case, and we strongly advise
<em>not</em> implementing an SSA construction algorithm in your front-end
@@ -679,8 +679,8 @@ loop: ; preds = %loop, %entry
%nextvar = add double %i, 1.000000e+00
; termination test
- %multmp = fcmp ult double %i, %n
- %booltmp = uitofp i1 %multmp to double
+ %cmptmp = fcmp ult double %i, %n
+ %booltmp = uitofp i1 %cmptmp to double
%loopcond = fcmp one double %booltmp, 0.000000e+00
br i1 %loopcond, label %loop, label %afterloop
@@ -871,7 +871,8 @@ that is what we return from <tt>ForExprAST::Codegen</tt>.</p>
the tutorial. We added two control flow constructs, and used them to motivate
a couple of aspects of the LLVM IR that are important for front-end implementors
to know. In the next chapter of our saga, we will get a bit crazier and add
-operator overloading to our poor innocent language.</p>
+<a href="LangImpl6.html">user-defined operators</a> to our poor innocent
+language.</p>
</div>
@@ -1378,7 +1379,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
default: return ErrorV("invalid binary operator");
diff --git a/docs/tutorial/LangImpl6.html b/docs/tutorial/LangImpl6.html
index b113afc364..8976acf50e 100644
--- a/docs/tutorial/LangImpl6.html
+++ b/docs/tutorial/LangImpl6.html
@@ -280,7 +280,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
<b>default: break;</b>
@@ -1396,7 +1396,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
default: break;
diff --git a/docs/tutorial/LangImpl7.html b/docs/tutorial/LangImpl7.html
index 1a506767e5..9aa65d3b6e 100644
--- a/docs/tutorial/LangImpl7.html
+++ b/docs/tutorial/LangImpl7.html
@@ -546,8 +546,8 @@ entry:
<b>%x1 = alloca double
store double %x, double* %x1
%x2 = load double* %x1</b>
- %multmp = fcmp ult double %x2, 3.000000e+00
- %booltmp = uitofp i1 %multmp to double
+ %cmptmp = fcmp ult double %x2, 3.000000e+00
+ %booltmp = uitofp i1 %cmptmp to double
%ifcond = fcmp one double %booltmp, 0.000000e+00
br i1 %ifcond, label %then, label %else
@@ -585,8 +585,8 @@ PHI node for it, so we still just make the PHI.</p>
<pre>
define double @fib(double %x) {
entry:
- %multmp = fcmp ult double <b>%x</b>, 3.000000e+00
- %booltmp = uitofp i1 %multmp to double
+ %cmptmp = fcmp ult double <b>%x</b>, 3.000000e+00
+ %booltmp = uitofp i1 %cmptmp to double
%ifcond = fcmp one double %booltmp, 0.000000e+00
br i1 %ifcond, label %then, label %else
@@ -618,8 +618,8 @@ such blatent inefficiencies :).</p>
<pre>
define double @fib(double %x) {
entry:
- %multmp = fcmp ult double %x, 3.000000e+00
- %booltmp = uitofp i1 %multmp to double
+ %cmptmp = fcmp ult double %x, 3.000000e+00
+ %booltmp = uitofp i1 %cmptmp to double
%ifcond = fcmp ueq double %booltmp, 0.000000e+00
br i1 %ifcond, label %else, label %ifcont
@@ -1674,7 +1674,7 @@ Value *BinaryExprAST::Codegen() {
case '-': return Builder.CreateSub(L, R, "subtmp");
case '*': return Builder.CreateMul(L, R, "multmp");
case '&lt;':
- L = Builder.CreateFCmpULT(L, R, "multmp");
+ L = Builder.CreateFCmpULT(L, R, "cmptmp");
// Convert bool 0/1 to double 0.0 or 1.0
return Builder.CreateUIToFP(L, Type::DoubleTy, "booltmp");
default: break;