diff --git a/lib/Renderscript/RSForEachExpand.cpp b/lib/Renderscript/RSForEachExpand.cpp
index 16760bb..f0aee4e 100644
--- a/lib/Renderscript/RSForEachExpand.cpp
+++ b/lib/Renderscript/RSForEachExpand.cpp
@@ -28,6 +28,7 @@
 #include <llvm/Support/raw_ostream.h>
 #include <llvm/IR/DataLayout.h>
 #include <llvm/IR/Type.h>
+#include <llvm/Transforms/Utils/BasicBlockUtils.h>
 
 #include "bcc/Config/Config.h"
 #include "bcc/Renderscript/RSInfo.h"
@@ -225,6 +226,10 @@
 
     assert(AI == F->arg_end());
 
+    llvm::BasicBlock *Begin = llvm::BasicBlock::Create(*C, "Begin", F);
+    llvm::IRBuilder<> Builder(Begin);
+    Builder.CreateRetVoid();
+
     return F;
   }
 
@@ -280,9 +285,8 @@
     llvm::Value *OutStep = NULL;
 
     // Construct the actual function body.
-    llvm::BasicBlock *Begin =
-        llvm::BasicBlock::Create(*C, "Begin", ExpandedFunc);
-    llvm::IRBuilder<> Builder(Begin);
+    llvm::BasicBlock *Begin = &ExpandedFunc->getEntryBlock();
+    llvm::IRBuilder<> Builder(Begin->begin());
 
     // uint32_t X = x1;
     llvm::AllocaInst *AX = Builder.CreateAlloca(Int32Ty, 0, "AX");
@@ -338,10 +342,15 @@
     bccAssert(Args == F->arg_end());
 
     llvm::BasicBlock *Loop = llvm::BasicBlock::Create(*C, "Loop", ExpandedFunc);
-    llvm::BasicBlock *Exit = llvm::BasicBlock::Create(*C, "Exit", ExpandedFunc);
 
     // if (x1 < x2) goto Loop; else goto Exit;
     llvm::Value *Cond = Builder.CreateICmpSLT(Arg_x1, Arg_x2);
+
+    llvm::BasicBlock *Exit = llvm::SplitBlock(Builder.GetInsertBlock(),
+                                              Builder.GetInsertPoint(), this);
+    Exit->setName("Exit");
+    Begin->getTerminator()->eraseFromParent();
+    Builder.SetInsertPoint(Begin);
     Builder.CreateCondBr(Cond, Loop, Exit);
 
     // Loop:
@@ -402,10 +411,6 @@
     Cond = Builder.CreateICmpSLT(XPlusOne, Arg_x2);
     Builder.CreateCondBr(Cond, Loop, Exit);
 
-    // Exit:
-    Builder.SetInsertPoint(Exit);
-    Builder.CreateRetVoid();
-
     return true;
   }
 
@@ -445,9 +450,8 @@
     llvm::Value *OutStep = NULL;
 
     // Construct the actual function body.
-    llvm::BasicBlock *Begin =
-        llvm::BasicBlock::Create(*C, "Begin", ExpandedFunc);
-    llvm::IRBuilder<> Builder(Begin);
+    llvm::BasicBlock *Begin = &ExpandedFunc->getEntryBlock();
+    llvm::IRBuilder<> Builder(Begin->begin());
 
     // uint32_t X = x1;
     llvm::AllocaInst *AX = Builder.CreateAlloca(Int32Ty, 0, "AX");
@@ -507,10 +511,15 @@
     bccAssert(Args == F->arg_end());
 
     llvm::BasicBlock *Loop = llvm::BasicBlock::Create(*C, "Loop", ExpandedFunc);
-    llvm::BasicBlock *Exit = llvm::BasicBlock::Create(*C, "Exit", ExpandedFunc);
 
     // if (x1 < x2) goto Loop; else goto Exit;
     llvm::Value *Cond = Builder.CreateICmpSLT(Arg_x1, Arg_x2);
+
+    llvm::BasicBlock *Exit = llvm::SplitBlock(Builder.GetInsertBlock(),
+                                              Builder.GetInsertPoint(), this);
+    Exit->setName("Exit");
+    Begin->getTerminator()->eraseFromParent();
+    Builder.SetInsertPoint(Begin);
     Builder.CreateCondBr(Cond, Loop, Exit);
 
     // Loop:
@@ -574,10 +583,6 @@
     Cond = Builder.CreateICmpSLT(XPlusOne, Arg_x2);
     Builder.CreateCondBr(Cond, Loop, Exit);
 
-    // Exit:
-    Builder.SetInsertPoint(Exit);
-    Builder.CreateRetVoid();
-
     return true;
   }
 
