From 23ac4f1856ae6659db2d74be14996e3fa4077b65 Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Mon, 11 May 2015 23:47:30 +0000 Subject: [PATCH] Refactoring gc_relocate related code in CodeGenPrepare.cpp Summary: The original code inserted new instructions by following a Create->Remove->ReInsert flow. This patch removes the unnecessary Remove->ReInsert part by setting up the InsertPoint correctly at the very beginning. This change does not introduce any functionality change. Patch by Chen Li! Reviewers: reames, AndyAyers, sanjoy Reviewed By: sanjoy Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9687 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237070 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenPrepare.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/CodeGen/CodeGenPrepare.cpp b/lib/CodeGen/CodeGenPrepare.cpp index 641316105c0..13917f469ea 100644 --- a/lib/CodeGen/CodeGenPrepare.cpp +++ b/lib/CodeGen/CodeGenPrepare.cpp @@ -598,7 +598,10 @@ simplifyRelocatesOffABase(IntrinsicInst *RelocatedBase, continue; // Create a Builder and replace the target callsite with a gep - IRBuilder<> Builder(ToReplace); + assert(RelocatedBase->getNextNode() && "Should always have one since it's not a terminator"); + + // Insert after RelocatedBase + IRBuilder<> Builder(RelocatedBase->getNextNode()); Builder.SetCurrentDebugLocation(ToReplace->getDebugLoc()); // If gc_relocate does not match the actual type, cast it to the right type. @@ -626,14 +629,10 @@ simplifyRelocatesOffABase(IntrinsicInst *RelocatedBase, if (RelocatedBase->getType() != Base->getType()) { ActualRelocatedBase = cast(Builder.CreateBitCast(RelocatedBase, Base->getType())); - ActualRelocatedBase->removeFromParent(); - ActualRelocatedBase->insertAfter(cast(RelocatedBase)); } Value *Replacement = Builder.CreateGEP( Derived->getSourceElementType(), ActualRelocatedBase, makeArrayRef(OffsetV)); Instruction *ReplacementInst = cast(Replacement); - ReplacementInst->removeFromParent(); - ReplacementInst->insertAfter(ActualRelocatedBase); Replacement->takeName(ToReplace); // If the newly generated derived pointer's type does not match the original derived // pointer's type, cast the new derived pointer to match it. Same reasoning as above. @@ -641,8 +640,6 @@ simplifyRelocatesOffABase(IntrinsicInst *RelocatedBase, if (ReplacementInst->getType() != ToReplace->getType()) { ActualReplacement = cast(Builder.CreateBitCast(ReplacementInst, ToReplace->getType())); - ActualReplacement->removeFromParent(); - ActualReplacement->insertAfter(ReplacementInst); } ToReplace->replaceAllUsesWith(ActualReplacement); ToReplace->eraseFromParent(); -- 2.34.1