From: Chris Lattner Date: Tue, 3 Aug 2004 00:17:21 +0000 (+0000) Subject: Simplify the first example, as the LLVM IR interfaces have evolved. Other X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=532c92d04ae89654d6944acb5929debb817511c0;p=oota-llvm.git Simplify the first example, as the LLVM IR interfaces have evolved. Other examples in this doc could also be simplified dramatically in similar ways. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15428 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/docs/Stacker.html b/docs/Stacker.html index a9e39d24288..82f511bb1e6 100644 --- a/docs/Stacker.html +++ b/docs/Stacker.html @@ -131,31 +131,28 @@ I noted that most of the important LLVM IR (Intermediate Representation) C++ classes were derived from the Value class. The full power of that simple design only became fully understood once I started constructing executable expressions for Stacker.

+

This really makes your programming go faster. Think about compiling code for the following C/C++ expression: (a|b)*((x+1)/(y+1)). Assuming the values are on the stack in the order a, b, x, y, this could be expressed in stacker as: 1 + SWAP 1 + / ROT2 OR *. -You could write a function using LLVM that computes this expression like this:

-

+You could write a function using LLVM that computes this expression like 
+this: 

+ +
 Value* 
 expression(BasicBlock* bb, Value* a, Value* b, Value* x, Value* y )
 {
-    Instruction* tail = bb->getTerminator();
-    ConstantSInt* one = ConstantSInt::get( Type::IntTy, 1);
-    BinaryOperator* or1 = 
-	BinaryOperator::create( Instruction::Or, a, b, "", tail );
-    BinaryOperator* add1 = 
-	BinaryOperator::create( Instruction::Add, x, one, "", tail );
-    BinaryOperator* add2 =
-	BinaryOperator::create( Instruction::Add, y, one, "", tail );
-    BinaryOperator* div1 = 
-	BinaryOperator::create( Instruction::Div, add1, add2, "", tail);
-    BinaryOperator* mult1 = 
-	BinaryOperator::create( Instruction::Mul, or1, div1, "", tail );
-
+    ConstantSInt* one = ConstantSInt::get(Type::IntTy, 1);
+    BinaryOperator* or1 = BinaryOperator::createOr(a, b, "", bb);
+    BinaryOperator* add1 = BinaryOperator::createAdd(x, one, "", bb);
+    BinaryOperator* add2 = BinaryOperator::createAdd(y, one, "", bb);
+    BinaryOperator* div1 = BinaryOperator::createDiv(add1, add2, "", bb);
+    BinaryOperator* mult1 = BinaryOperator::createMul(or1, div1, "", bb);
     return mult1;
 }
-
+
+

"Okay, big deal," you say? It is a big deal. Here's why. Note that I didn't have to tell this function which kinds of Values are being passed in. They could be Instructions, Constants, GlobalVariables, or