diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-05-11 23:47:30 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-05-11 23:47:30 +0000 |
commit | 3d705e37c322cae86e5f5fd1cf7fd198d387ddb2 (patch) | |
tree | 0289ed5edb77aacd3bbac0cf4001321e33c50e3d /llvm/lib/CodeGen | |
parent | 5665c999c2ab7ec7c00e3d1eab2c4c43756429a3 (diff) | |
download | bcm5719-llvm-3d705e37c322cae86e5f5fd1cf7fd198d387ddb2.tar.gz bcm5719-llvm-3d705e37c322cae86e5f5fd1cf7fd198d387ddb2.zip |
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
llvm-svn: 237070
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 641316105c0..13917f469ea 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/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<Instruction>(Builder.CreateBitCast(RelocatedBase, Base->getType())); - ActualRelocatedBase->removeFromParent(); - ActualRelocatedBase->insertAfter(cast<Instruction>(RelocatedBase)); } Value *Replacement = Builder.CreateGEP( Derived->getSourceElementType(), ActualRelocatedBase, makeArrayRef(OffsetV)); Instruction *ReplacementInst = cast<Instruction>(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<Instruction>(Builder.CreateBitCast(ReplacementInst, ToReplace->getType())); - ActualReplacement->removeFromParent(); - ActualReplacement->insertAfter(ReplacementInst); } ToReplace->replaceAllUsesWith(ActualReplacement); ToReplace->eraseFromParent(); |