diff options
author | Mike Stump <mrs@apple.com> | 2009-10-01 22:29:41 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-10-01 22:29:41 +0000 |
commit | 017460ab6c6550395e17763bd62d449586f79ab9 (patch) | |
tree | 800803f74dea217855857c5462b6a2ba565678cd /clang/lib/CodeGen/CGBlocks.cpp | |
parent | 1cc6dd97dac3da3605aa5e71362f24e9a6c10db5 (diff) | |
download | bcm5719-llvm-017460ab6c6550395e17763bd62d449586f79ab9.tar.gz bcm5719-llvm-017460ab6c6550395e17763bd62d449586f79ab9.zip |
Implement a FIXME. This improves codegen just a tad.
llvm-svn: 83221
Diffstat (limited to 'clang/lib/CodeGen/CGBlocks.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGBlocks.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index ba14fea36e0..79950e8c6be 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -663,20 +663,23 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, StartFunction(BD, ResultType, Fn, Args, BExpr->getBody()->getLocEnd()); + CurFuncDecl = OuterFuncDecl; + CurCodeDecl = BD; + // Save a spot to insert the debug information for all the BlockDeclRefDecls. llvm::BasicBlock *entry = Builder.GetInsertBlock(); + llvm::BasicBlock::iterator entry_ptr = Builder.GetInsertPoint(); + --entry_ptr; - CurFuncDecl = OuterFuncDecl; - CurCodeDecl = BD; - // FIXME: Can we straighten this out not using multiple basic blocks? - // Set body aside for now. - llvm::BasicBlock *body = createBasicBlock("body"); - Builder.SetInsertPoint(body); EmitStmt(BExpr->getBody()); + // Remember where we were... llvm::BasicBlock *resume = Builder.GetInsertBlock(); + // Go back to the entry. - Builder.SetInsertPoint(entry); + ++entry_ptr; + Builder.SetInsertPoint(entry, entry_ptr); + if (CGDebugInfo *DI = getDebugInfo()) { // Emit debug information for all the BlockDeclRefDecls. for (unsigned i=0; i < BlockDeclRefDecls.size(); ++i) { @@ -691,8 +694,6 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, } } } - // And now go back to the body - EmitBlock(body); // And resume where we left off. if (resume == 0) Builder.ClearInsertionPoint(); |