diff options
author | Alan Zhao <ayzhao@google.com> | 2023-06-16 10:58:17 -0700 |
---|---|---|
committer | Alan Zhao <ayzhao@google.com> | 2023-06-16 10:58:54 -0700 |
commit | d6b4f6786ba5d061d5d5822dd391682dd7185e71 (patch) | |
tree | ec0fc9d1a2a909467291a5c080d5c7f8eb43d426 /llvm/lib/Transforms/Utils/CloneFunction.cpp | |
parent | 44930490124d29c07b9538fb08fc6c7713cd74dc (diff) | |
download | llvm-d6b4f6786ba5d061d5d5822dd391682dd7185e71.zip llvm-d6b4f6786ba5d061d5d5822dd391682dd7185e71.tar.gz llvm-d6b4f6786ba5d061d5d5822dd391682dd7185e71.tar.bz2 |
Revert "Revert "InstSimplify: Require instruction be parented""
This reverts commit 00264eac4d0938ae8a0826da38e4777be269124c.
Reason: caused a bunch of bots to break
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. |