summaryrefslogtreecommitdiffstats
path: root/llvm/docs/Stacker.html
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-08-03 00:17:21 +0000
committerChris Lattner <sabre@nondot.org>2004-08-03 00:17:21 +0000
commit298f9f85bc38cae7c5b19e4b213f02cf2595f122 (patch)
treec8d3a324f86675171d5561be254d3083c8ff5a10 /llvm/docs/Stacker.html
parentcaceaafadacd551932ce98e09eb89b8b408a805c (diff)
downloadbcm5719-llvm-298f9f85bc38cae7c5b19e4b213f02cf2595f122.tar.gz
bcm5719-llvm-298f9f85bc38cae7c5b19e4b213f02cf2595f122.zip
Simplify the first example, as the LLVM IR interfaces have evolved. Other
examples in this doc could also be simplified dramatically in similar ways. llvm-svn: 15428
Diffstat (limited to 'llvm/docs/Stacker.html')
-rw-r--r--llvm/docs/Stacker.html29
1 files changed, 13 insertions, 16 deletions
diff --git a/llvm/docs/Stacker.html b/llvm/docs/Stacker.html
index a9e39d24288..82f511bb1e6 100644
--- a/llvm/docs/Stacker.html
+++ b/llvm/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.</p>
+
<p>This really makes your programming go faster. Think about compiling code
for the following C/C++ expression: <code>(a|b)*((x+1)/(y+1))</code>. Assuming
the values are on the stack in the order a, b, x, y, this could be
expressed in stacker as: <code>1 + SWAP 1 + / ROT2 OR *</code>.
-You could write a function using LLVM that computes this expression like this: </p>
-<pre><code>
+You could write a function using LLVM that computes this expression like
+this: </p>
+
+<div class="doc_code"><pre>
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;
}
-</code></pre>
+</pre></div>
+
<p>"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
<code>Instruction</code>s, <code>Constant</code>s, <code>GlobalVariable</code>s, or
OpenPOWER on IntegriCloud