Add CodeGenFunction::EmitDummyBlock for marking places where we make

"dummy" blocks (blocks just used to make sure we have a place to dump
code to).

llvm-svn: 59022
This commit is contained in:
Daniel Dunbar 2008-11-11 04:34:23 +00:00
parent 05e629aec6
commit 29ac59f25c
3 changed files with 16 additions and 7 deletions

View File

@ -1717,7 +1717,7 @@ void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
CGF.Builder.CreateCall(ObjCTypes.ExceptionThrowFn, ExceptionAsObject);
CGF.Builder.CreateUnreachable();
CGF.EmitBlock(CGF.createBasicBlock("bb"));
CGF.EmitDummyBlock();
}
void CodeGenFunction::EmitJumpThroughFinally(ObjCEHEntry *E,

View File

@ -167,6 +167,10 @@ void CodeGenFunction::EmitBlock(llvm::BasicBlock *BB) {
Builder.SetInsertPoint(BB);
}
void CodeGenFunction::EmitDummyBlock() {
EmitBlock(createBasicBlock());
}
void CodeGenFunction::EmitLabel(const LabelStmt &S) {
llvm::BasicBlock *NextBB = getBasicBlockForLabel(&S);
EmitBlock(NextBB);
@ -189,7 +193,7 @@ void CodeGenFunction::EmitGotoStmt(const GotoStmt &S) {
// Emit a block after the branch so that dead code after a goto has some place
// to go.
Builder.SetInsertPoint(createBasicBlock("", CurFn));
EmitDummyBlock();
}
void CodeGenFunction::EmitIndirectGotoStmt(const IndirectGotoStmt &S) {
@ -210,7 +214,7 @@ void CodeGenFunction::EmitIndirectGotoStmt(const IndirectGotoStmt &S) {
// Emit a block after the branch so that dead code after a goto has some place
// to go.
Builder.SetInsertPoint(createBasicBlock("", CurFn));
EmitDummyBlock();
}
void CodeGenFunction::EmitIfStmt(const IfStmt &S) {
@ -433,7 +437,7 @@ void CodeGenFunction::EmitReturnOfRValue(RValue RV, QualType Ty) {
// Emit a block after the branch so that dead code after a return has some
// place to go.
EmitBlock(createBasicBlock());
EmitDummyBlock();
}
/// EmitReturnStmt - Note that due to GCC extensions, this can have an operand
@ -473,7 +477,7 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) {
// Emit a block after the branch so that dead code after a return has some
// place to go.
EmitBlock(createBasicBlock());
EmitDummyBlock();
}
void CodeGenFunction::EmitDeclStmt(const DeclStmt &S) {
@ -487,7 +491,7 @@ void CodeGenFunction::EmitBreakStmt() {
llvm::BasicBlock *Block = BreakContinueStack.back().BreakBlock;
Builder.CreateBr(Block);
EmitBlock(createBasicBlock());
EmitDummyBlock();
}
void CodeGenFunction::EmitContinueStmt() {
@ -495,7 +499,7 @@ void CodeGenFunction::EmitContinueStmt() {
llvm::BasicBlock *Block = BreakContinueStack.back().ContinueBlock;
Builder.CreateBr(Block);
EmitBlock(createBasicBlock());
EmitDummyBlock();
}
/// EmitCaseStmtRange - If case statement range is not too big then

View File

@ -225,6 +225,11 @@ public:
llvm::BasicBlock *getBasicBlockForLabel(const LabelStmt *S);
void EmitBlock(llvm::BasicBlock *BB);
/// EmitDummyBlock - Emit a new block which will never be branched
/// to. This is used to satisfy the invariant that codegen always
/// has an active unterminated block to dump code into.
void EmitDummyBlock();
/// ErrorUnsupported - Print out an error that codegen doesn't support the
/// specified stmt yet.