fixes from Ryan Brown.
authorChris Lattner <sabre@nondot.org>
Tue, 6 Nov 2007 01:39:12 +0000 (01:39 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 6 Nov 2007 01:39:12 +0000 (01:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43747 91177308-0d34-0410-b5e6-96231b3b80d8

docs/tutorial/LangImpl1.html
docs/tutorial/LangImpl2.html
docs/tutorial/LangImpl3.html
docs/tutorial/LangImpl4.html
docs/tutorial/LangImpl5.html
docs/tutorial/LangImpl6.html
docs/tutorial/LangImpl7.html

index f57848b8e33d09b248585e239a1e0821c2519b31..2ce59b98ebd963a10a3479580532c34577bb4012 100644 (file)
@@ -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>
index 7eed8d644b29e8e72abc8a7977a4e6f0b529c7c0..b8b6112884163ef50fa8471cbaf8877c9ad824b0 100644 (file)
@@ -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 ')'.
index 22987e552bf4e6a63f5a10a1c82c35cfc2ed7f52..5e6d2c82f75c3541794c684260d031db456c8d74 100644 (file)
@@ -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");
index 7b02faa6141d43ef31061fcbda1042d6dceb9ed8..11a6cc0177f71e653cd791839b693937f55899f6 100644 (file)
@@ -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");
index acd60456c8164b37476a5d3a3e77bda3aba00574..be82b2dab5677dca84609ac57c821ae842286af8 100644 (file)
@@ -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");
index b113afc3640be89cc6ec006f7e081d65c7ce4560..8976acf50e748c1fe3b0c4d0801c56f1391692d4 100644 (file)
@@ -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;
index 1a506767e576e601c2a354a88fbce20ba43ca9d2..9aa65d3b6e126bf74905ad9289961c9801883596 100644 (file)
@@ -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;