X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FStacker.html;h=81b623efa9a15eca20c51a6d4b78b7f755147b7c;hb=95df6b3603e228cea714be21997fec82cb03011e;hp=225a27bbf77556707220239e905f8a3d89dff404;hpb=72826f61710a8bdc421ddc5f8c2ed10bf6873de8;p=oota-llvm.git diff --git a/docs/Stacker.html b/docs/Stacker.html index 225a27bbf77..81b623efa9a 100644 --- a/docs/Stacker.html +++ b/docs/Stacker.html @@ -219,8 +219,8 @@ should be constructed. In general, here's what I learned:

The foregoing is such an important principal, its worth making an idiom:

-BasicBlock* bb = new BasicBlock();
-bb->getInstList().push_back( new Branch( ... ) );
+BasicBlock* bb = BasicBlock::Create();
+bb->getInstList().push_back( BranchInst::Create( ... ) );
 new Instruction(..., bb->getTerminator() );
 

To make this clear, consider the typical if-then-else statement @@ -232,16 +232,16 @@ BasicBlock* MyCompiler::handle_if( BasicBlock* bb, ICmpInst* condition ) { // Create the blocks to contain code in the structure of if/then/else - BasicBlock* then_bb = new BasicBlock(); - BasicBlock* else_bb = new BasicBlock(); - BasicBlock* exit_bb = new BasicBlock(); + BasicBlock* then_bb = BasicBlock::Create(); + BasicBlock* else_bb = BasicBlock::Create(); + BasicBlock* exit_bb = BasicBlock::Create(); // Insert the branch instruction for the "if" - bb->getInstList().push_back( new BranchInst( then_bb, else_bb, condition ) ); + bb->getInstList().push_back( BranchInst::Create( then_bb, else_bb, condition ) ); // Set up the terminating instructions - then->getInstList().push_back( new BranchInst( exit_bb ) ); - else->getInstList().push_back( new BranchInst( exit_bb ) ); + then->getInstList().push_back( BranchInst::Create( exit_bb ) ); + else->getInstList().push_back( BranchInst::Create( exit_bb ) ); // Fill in the then part .. details excised for brevity this->fill_in( then_bb ); @@ -310,7 +310,7 @@ things, this leads to the idiom: std::vector<Value*> index_vector; index_vector.push_back( ConstantInt::get( Type::LongTy, 0 ); // ... push other indices ... -GetElementPtrInst* gep = new GetElementPtrInst( ptr, index_vector ); +GetElementPtrInst* gep = GetElementPtrInst::Create( ptr, index_vector );

For example, suppose we have a global variable whose type is [24 x int]. The variable itself represents a pointer to that array. To subscript the @@ -1296,18 +1296,26 @@ remainder of the story.

Directory Structure
+

The source code, test programs, and sample programs can all be found in the LLVM repository named llvm-stacker This should be checked out to the projects directory so that it will auto-configure. To do that, make sure you have the llvm sources in llvm (see Getting Started) and then use these -commands:

-    cd llvm/projects
-    cvs co llvm-stacker
-

+commands:

+ +
+
+% svn co http://llvm.org/svn/llvm-project/llvm-top/trunk llvm-top
+% cd llvm-top
+% make build MODULE=stacker
+
+
+

Under the projects/llvm-stacker directory you will find the implementation of the Stacker compiler, as follows:

+
+
The Lexer
+

See projects/llvm-stacker/lib/compiler/Lexer.l

+
The Parser