mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-13 02:21:45 +00:00
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:
parent
05e629aec6
commit
29ac59f25c
@ -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,
|
||||
|
@ -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
|
||||
|
@ -226,6 +226,11 @@ public:
|
||||
|
||||
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.
|
||||
void ErrorUnsupported(const Stmt *S, const char *Type,
|
||||
|
Loading…
Reference in New Issue
Block a user