diff options
author | Arthur Eubanks <aeubanks@google.com> | 2023-06-16 13:47:30 -0700 |
---|---|---|
committer | Arthur Eubanks <aeubanks@google.com> | 2023-06-16 13:53:31 -0700 |
commit | 3e39cfe5b4af7a8496049f623cfce177dc1903d6 (patch) | |
tree | feeab5c951c0d48f68ddd7f512b6a787ad0c71b2 /llvm/lib/Transforms/Utils/CloneFunction.cpp | |
parent | 5759e3ce6d03a8363779df2efea554a15ff61047 (diff) | |
download | llvm-3e39cfe5b4af7a8496049f623cfce177dc1903d6.zip llvm-3e39cfe5b4af7a8496049f623cfce177dc1903d6.tar.gz llvm-3e39cfe5b4af7a8496049f623cfce177dc1903d6.tar.bz2 |
Revert "Revert "InstSimplify: Require instruction be parented""
This reverts commit 0c03f48480f69b854f86d31235425b5cb71ac921.
Going to fix forward size regression instead due to more dependent patches needing to be reverted otherwise.
Diffstat (limited to 'llvm/lib/Transforms/Utils/CloneFunction.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/CloneFunction.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp index 272970e..d552086 100644 --- a/llvm/lib/Transforms/Utils/CloneFunction.cpp +++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp @@ -470,9 +470,8 @@ void PruningFunctionCloner::CloneBlock( // Nope, clone it now. BasicBlock *NewBB; - BBEntry = NewBB = BasicBlock::Create(BB->getContext()); - if (BB->hasName()) - NewBB->setName(BB->getName() + NameSuffix); + Twine NewName(BB->hasName() ? Twine(BB->getName()) + NameSuffix : ""); + BBEntry = NewBB = BasicBlock::Create(BB->getContext(), NewName, NewFunc); // It is only legal to clone a function if a block address within that // function is never referenced outside of the function. Given that, we @@ -498,6 +497,7 @@ void PruningFunctionCloner::CloneBlock( ++II) { Instruction *NewInst = cloneInstruction(II); + NewInst->insertInto(NewBB, NewBB->end()); if (HostFuncIsStrictFP) { // All function calls in the inlined function must get 'strictfp' @@ -516,8 +516,6 @@ void PruningFunctionCloner::CloneBlock( // If we can simplify this instruction to some other value, simply add // a mapping to that value rather than inserting a new instruction into // the basic block. - // - // FIXME: simplifyInstruction should know the context of the new function. if (Value *V = simplifyInstruction(NewInst, BB->getModule()->getDataLayout())) { // On the off-chance that this simplifies to an instruction in the old @@ -528,7 +526,7 @@ void PruningFunctionCloner::CloneBlock( if (!NewInst->mayHaveSideEffects()) { VMap[&*II] = V; - NewInst->deleteValue(); + NewInst->eraseFromParent(); continue; } } @@ -537,7 +535,6 @@ void PruningFunctionCloner::CloneBlock( if (II->hasName()) NewInst->setName(II->getName() + NameSuffix); VMap[&*II] = NewInst; // Add instruction map to value. - NewInst->insertInto(NewBB, NewBB->end()); if (isa<CallInst>(II) && !II->isDebugOrPseudoInst()) { hasCalls = true; hasMemProfMetadata |= II->hasMetadata(LLVMContext::MD_memprof); @@ -685,8 +682,8 @@ void llvm::CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc, if (!NewBB) continue; // Dead block. - // Add the new block to the new function. - NewFunc->insert(NewFunc->end(), NewBB); + // Move the new block to preserve the order in the original function. + NewBB->moveBefore(NewFunc->end()); // Handle PHI nodes specially, as we have to remove references to dead // blocks. |