mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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
This commit is contained in:
parent
aa1c57e324
commit
23ac4f1856
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user