From 839cbaa004a24e8f1ea14db5ed76e3d25ed28996 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 21 Apr 2010 10:29:06 +0000 Subject: [PATCH] Teach EmitBlock to put the target block immediately after the current block (if there's a current block). The chief advantage of doing this is that it lets us pick blocks (e.g. EH blocks) to push to the end of the function so that fallthrough happens consistently --- i.e. it gives us the flexibility of ordering blocks as we please without having to change the order in which we generate code. There are standard (?) optimization passes which can do some of that for us, but better to generate reasonable code to begin with. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101997 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGStmt.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 07c96d82ca..eb861f4690 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -225,7 +225,12 @@ void CodeGenFunction::EmitBlock(llvm::BasicBlock *BB, bool IsFinished) { } } - CurFn->getBasicBlockList().push_back(BB); + // Place the block after the current block, if possible, or else at + // the end of the function. + if (Builder.GetInsertBlock()) + CurFn->getBasicBlockList().insertAfter(Builder.GetInsertBlock(), BB); + else + CurFn->getBasicBlockList().push_back(BB); Builder.SetInsertPoint(BB); } -- 2.40.0