[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / lib / Transforms / Utils / CloneFunction.cpp
blob7ea799a3f645313a86c9f263431e8f104983095a
1 //===- CloneFunction.cpp - Clone a function into another function ---------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the CloneFunctionInto interface, which is used as the
10 // low-level function cloner. This is used by the CloneFunction and function
11 // inliner to do the dirty work of copying the body of a function around.
13 //===----------------------------------------------------------------------===//
15 #include "llvm/ADT/SetVector.h"
16 #include "llvm/ADT/SmallVector.h"
17 #include "llvm/Analysis/ConstantFolding.h"
18 #include "llvm/Analysis/DomTreeUpdater.h"
19 #include "llvm/Analysis/InstructionSimplify.h"
20 #include "llvm/Analysis/LoopInfo.h"
21 #include "llvm/IR/CFG.h"
22 #include "llvm/IR/Constants.h"
23 #include "llvm/IR/DebugInfo.h"
24 #include "llvm/IR/DerivedTypes.h"
25 #include "llvm/IR/Function.h"
26 #include "llvm/IR/GlobalVariable.h"
27 #include "llvm/IR/Instructions.h"
28 #include "llvm/IR/IntrinsicInst.h"
29 #include "llvm/IR/LLVMContext.h"
30 #include "llvm/IR/MDBuilder.h"
31 #include "llvm/IR/Metadata.h"
32 #include "llvm/IR/Module.h"
33 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
34 #include "llvm/Transforms/Utils/Cloning.h"
35 #include "llvm/Transforms/Utils/Local.h"
36 #include "llvm/Transforms/Utils/ValueMapper.h"
37 #include <map>
38 using namespace llvm;
40 #define DEBUG_TYPE "clone-function"
42 /// See comments in Cloning.h.
43 BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB, ValueToValueMapTy &VMap,
44 const Twine &NameSuffix, Function *F,
45 ClonedCodeInfo *CodeInfo,
46 DebugInfoFinder *DIFinder) {
47 BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "", F);
48 if (BB->hasName())
49 NewBB->setName(BB->getName() + NameSuffix);
51 bool hasCalls = false, hasDynamicAllocas = false;
52 Module *TheModule = F ? F->getParent() : nullptr;
54 // Loop over all instructions, and copy them over.
55 for (const Instruction &I : *BB) {
56 if (DIFinder && TheModule)
57 DIFinder->processInstruction(*TheModule, I);
59 Instruction *NewInst = I.clone();
60 if (I.hasName())
61 NewInst->setName(I.getName() + NameSuffix);
62 NewBB->getInstList().push_back(NewInst);
63 VMap[&I] = NewInst; // Add instruction map to value.
65 hasCalls |= (isa<CallInst>(I) && !isa<DbgInfoIntrinsic>(I));
66 if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
67 if (!AI->isStaticAlloca()) {
68 hasDynamicAllocas = true;
73 if (CodeInfo) {
74 CodeInfo->ContainsCalls |= hasCalls;
75 CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas;
77 return NewBB;
80 // Clone OldFunc into NewFunc, transforming the old arguments into references to
81 // VMap values.
83 void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc,
84 ValueToValueMapTy &VMap,
85 CloneFunctionChangeType Changes,
86 SmallVectorImpl<ReturnInst *> &Returns,
87 const char *NameSuffix, ClonedCodeInfo *CodeInfo,
88 ValueMapTypeRemapper *TypeMapper,
89 ValueMaterializer *Materializer) {
90 assert(NameSuffix && "NameSuffix cannot be null!");
92 #ifndef NDEBUG
93 for (const Argument &I : OldFunc->args())
94 assert(VMap.count(&I) && "No mapping from source argument specified!");
95 #endif
97 bool ModuleLevelChanges = Changes > CloneFunctionChangeType::LocalChangesOnly;
99 // Copy all attributes other than those stored in the AttributeList. We need
100 // to remap the parameter indices of the AttributeList.
101 AttributeList NewAttrs = NewFunc->getAttributes();
102 NewFunc->copyAttributesFrom(OldFunc);
103 NewFunc->setAttributes(NewAttrs);
105 // Fix up the personality function that got copied over.
106 if (OldFunc->hasPersonalityFn())
107 NewFunc->setPersonalityFn(
108 MapValue(OldFunc->getPersonalityFn(), VMap,
109 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges,
110 TypeMapper, Materializer));
112 SmallVector<AttributeSet, 4> NewArgAttrs(NewFunc->arg_size());
113 AttributeList OldAttrs = OldFunc->getAttributes();
115 // Clone any argument attributes that are present in the VMap.
116 for (const Argument &OldArg : OldFunc->args()) {
117 if (Argument *NewArg = dyn_cast<Argument>(VMap[&OldArg])) {
118 NewArgAttrs[NewArg->getArgNo()] =
119 OldAttrs.getParamAttrs(OldArg.getArgNo());
123 NewFunc->setAttributes(
124 AttributeList::get(NewFunc->getContext(), OldAttrs.getFnAttrs(),
125 OldAttrs.getRetAttrs(), NewArgAttrs));
127 // Everything else beyond this point deals with function instructions,
128 // so if we are dealing with a function declaration, we're done.
129 if (OldFunc->isDeclaration())
130 return;
132 // When we remap instructions within the same module, we want to avoid
133 // duplicating inlined DISubprograms, so record all subprograms we find as we
134 // duplicate instructions and then freeze them in the MD map. We also record
135 // information about dbg.value and dbg.declare to avoid duplicating the
136 // types.
137 Optional<DebugInfoFinder> DIFinder;
139 // Track the subprogram attachment that needs to be cloned to fine-tune the
140 // mapping within the same module.
141 DISubprogram *SPClonedWithinModule = nullptr;
142 if (Changes < CloneFunctionChangeType::DifferentModule) {
143 assert((NewFunc->getParent() == nullptr ||
144 NewFunc->getParent() == OldFunc->getParent()) &&
145 "Expected NewFunc to have the same parent, or no parent");
147 // Need to find subprograms, types, and compile units.
148 DIFinder.emplace();
150 SPClonedWithinModule = OldFunc->getSubprogram();
151 if (SPClonedWithinModule)
152 DIFinder->processSubprogram(SPClonedWithinModule);
153 } else {
154 assert((NewFunc->getParent() == nullptr ||
155 NewFunc->getParent() != OldFunc->getParent()) &&
156 "Expected NewFunc to have different parents, or no parent");
158 if (Changes == CloneFunctionChangeType::DifferentModule) {
159 assert(NewFunc->getParent() &&
160 "Need parent of new function to maintain debug info invariants");
162 // Need to find all the compile units.
163 DIFinder.emplace();
167 // Loop over all of the basic blocks in the function, cloning them as
168 // appropriate. Note that we save BE this way in order to handle cloning of
169 // recursive functions into themselves.
170 for (const BasicBlock &BB : *OldFunc) {
172 // Create a new basic block and copy instructions into it!
173 BasicBlock *CBB = CloneBasicBlock(&BB, VMap, NameSuffix, NewFunc, CodeInfo,
174 DIFinder ? &*DIFinder : nullptr);
176 // Add basic block mapping.
177 VMap[&BB] = CBB;
179 // It is only legal to clone a function if a block address within that
180 // function is never referenced outside of the function. Given that, we
181 // want to map block addresses from the old function to block addresses in
182 // the clone. (This is different from the generic ValueMapper
183 // implementation, which generates an invalid blockaddress when
184 // cloning a function.)
185 if (BB.hasAddressTaken()) {
186 Constant *OldBBAddr = BlockAddress::get(const_cast<Function *>(OldFunc),
187 const_cast<BasicBlock *>(&BB));
188 VMap[OldBBAddr] = BlockAddress::get(NewFunc, CBB);
191 // Note return instructions for the caller.
192 if (ReturnInst *RI = dyn_cast<ReturnInst>(CBB->getTerminator()))
193 Returns.push_back(RI);
196 if (Changes < CloneFunctionChangeType::DifferentModule &&
197 DIFinder->subprogram_count() > 0) {
198 // Turn on module-level changes, since we need to clone (some of) the
199 // debug info metadata.
201 // FIXME: Metadata effectively owned by a function should be made
202 // local, and only that local metadata should be cloned.
203 ModuleLevelChanges = true;
205 auto mapToSelfIfNew = [&VMap](MDNode *N) {
206 // Avoid clobbering an existing mapping.
207 (void)VMap.MD().try_emplace(N, N);
210 // Avoid cloning types, compile units, and (other) subprograms.
211 for (DISubprogram *ISP : DIFinder->subprograms())
212 if (ISP != SPClonedWithinModule)
213 mapToSelfIfNew(ISP);
215 for (DICompileUnit *CU : DIFinder->compile_units())
216 mapToSelfIfNew(CU);
218 for (DIType *Type : DIFinder->types())
219 mapToSelfIfNew(Type);
220 } else {
221 assert(!SPClonedWithinModule &&
222 "Subprogram should be in DIFinder->subprogram_count()...");
225 const auto RemapFlag = ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges;
226 // Duplicate the metadata that is attached to the cloned function.
227 // Subprograms/CUs/types that were already mapped to themselves won't be
228 // duplicated.
229 SmallVector<std::pair<unsigned, MDNode *>, 1> MDs;
230 OldFunc->getAllMetadata(MDs);
231 for (auto MD : MDs) {
232 NewFunc->addMetadata(MD.first, *MapMetadata(MD.second, VMap, RemapFlag,
233 TypeMapper, Materializer));
236 // Loop over all of the instructions in the new function, fixing up operand
237 // references as we go. This uses VMap to do all the hard work.
238 for (Function::iterator
239 BB = cast<BasicBlock>(VMap[&OldFunc->front()])->getIterator(),
240 BE = NewFunc->end();
241 BB != BE; ++BB)
242 // Loop over all instructions, fixing each one as we find it...
243 for (Instruction &II : *BB)
244 RemapInstruction(&II, VMap, RemapFlag, TypeMapper, Materializer);
246 // Only update !llvm.dbg.cu for DifferentModule (not CloneModule). In the
247 // same module, the compile unit will already be listed (or not). When
248 // cloning a module, CloneModule() will handle creating the named metadata.
249 if (Changes != CloneFunctionChangeType::DifferentModule)
250 return;
252 // Update !llvm.dbg.cu with compile units added to the new module if this
253 // function is being cloned in isolation.
255 // FIXME: This is making global / module-level changes, which doesn't seem
256 // like the right encapsulation Consider dropping the requirement to update
257 // !llvm.dbg.cu (either obsoleting the node, or restricting it to
258 // non-discardable compile units) instead of discovering compile units by
259 // visiting the metadata attached to global values, which would allow this
260 // code to be deleted. Alternatively, perhaps give responsibility for this
261 // update to CloneFunctionInto's callers.
262 auto *NewModule = NewFunc->getParent();
263 auto *NMD = NewModule->getOrInsertNamedMetadata("llvm.dbg.cu");
264 // Avoid multiple insertions of the same DICompileUnit to NMD.
265 SmallPtrSet<const void *, 8> Visited;
266 for (auto *Operand : NMD->operands())
267 Visited.insert(Operand);
268 for (auto *Unit : DIFinder->compile_units()) {
269 MDNode *MappedUnit =
270 MapMetadata(Unit, VMap, RF_None, TypeMapper, Materializer);
271 if (Visited.insert(MappedUnit).second)
272 NMD->addOperand(MappedUnit);
276 /// Return a copy of the specified function and add it to that function's
277 /// module. Also, any references specified in the VMap are changed to refer to
278 /// their mapped value instead of the original one. If any of the arguments to
279 /// the function are in the VMap, the arguments are deleted from the resultant
280 /// function. The VMap is updated to include mappings from all of the
281 /// instructions and basicblocks in the function from their old to new values.
283 Function *llvm::CloneFunction(Function *F, ValueToValueMapTy &VMap,
284 ClonedCodeInfo *CodeInfo) {
285 std::vector<Type *> ArgTypes;
287 // The user might be deleting arguments to the function by specifying them in
288 // the VMap. If so, we need to not add the arguments to the arg ty vector
290 for (const Argument &I : F->args())
291 if (VMap.count(&I) == 0) // Haven't mapped the argument to anything yet?
292 ArgTypes.push_back(I.getType());
294 // Create a new function type...
295 FunctionType *FTy =
296 FunctionType::get(F->getFunctionType()->getReturnType(), ArgTypes,
297 F->getFunctionType()->isVarArg());
299 // Create the new function...
300 Function *NewF = Function::Create(FTy, F->getLinkage(), F->getAddressSpace(),
301 F->getName(), F->getParent());
303 // Loop over the arguments, copying the names of the mapped arguments over...
304 Function::arg_iterator DestI = NewF->arg_begin();
305 for (const Argument &I : F->args())
306 if (VMap.count(&I) == 0) { // Is this argument preserved?
307 DestI->setName(I.getName()); // Copy the name over...
308 VMap[&I] = &*DestI++; // Add mapping to VMap
311 SmallVector<ReturnInst *, 8> Returns; // Ignore returns cloned.
312 CloneFunctionInto(NewF, F, VMap, CloneFunctionChangeType::LocalChangesOnly,
313 Returns, "", CodeInfo);
315 return NewF;
318 namespace {
319 /// This is a private class used to implement CloneAndPruneFunctionInto.
320 struct PruningFunctionCloner {
321 Function *NewFunc;
322 const Function *OldFunc;
323 ValueToValueMapTy &VMap;
324 bool ModuleLevelChanges;
325 const char *NameSuffix;
326 ClonedCodeInfo *CodeInfo;
328 public:
329 PruningFunctionCloner(Function *newFunc, const Function *oldFunc,
330 ValueToValueMapTy &valueMap, bool moduleLevelChanges,
331 const char *nameSuffix, ClonedCodeInfo *codeInfo)
332 : NewFunc(newFunc), OldFunc(oldFunc), VMap(valueMap),
333 ModuleLevelChanges(moduleLevelChanges), NameSuffix(nameSuffix),
334 CodeInfo(codeInfo) {}
336 /// The specified block is found to be reachable, clone it and
337 /// anything that it can reach.
338 void CloneBlock(const BasicBlock *BB, BasicBlock::const_iterator StartingInst,
339 std::vector<const BasicBlock *> &ToClone);
341 } // namespace
343 /// The specified block is found to be reachable, clone it and
344 /// anything that it can reach.
345 void PruningFunctionCloner::CloneBlock(
346 const BasicBlock *BB, BasicBlock::const_iterator StartingInst,
347 std::vector<const BasicBlock *> &ToClone) {
348 WeakTrackingVH &BBEntry = VMap[BB];
350 // Have we already cloned this block?
351 if (BBEntry)
352 return;
354 // Nope, clone it now.
355 BasicBlock *NewBB;
356 BBEntry = NewBB = BasicBlock::Create(BB->getContext());
357 if (BB->hasName())
358 NewBB->setName(BB->getName() + NameSuffix);
360 // It is only legal to clone a function if a block address within that
361 // function is never referenced outside of the function. Given that, we
362 // want to map block addresses from the old function to block addresses in
363 // the clone. (This is different from the generic ValueMapper
364 // implementation, which generates an invalid blockaddress when
365 // cloning a function.)
367 // Note that we don't need to fix the mapping for unreachable blocks;
368 // the default mapping there is safe.
369 if (BB->hasAddressTaken()) {
370 Constant *OldBBAddr = BlockAddress::get(const_cast<Function *>(OldFunc),
371 const_cast<BasicBlock *>(BB));
372 VMap[OldBBAddr] = BlockAddress::get(NewFunc, NewBB);
375 bool hasCalls = false, hasDynamicAllocas = false, hasStaticAllocas = false;
377 // Loop over all instructions, and copy them over, DCE'ing as we go. This
378 // loop doesn't include the terminator.
379 for (BasicBlock::const_iterator II = StartingInst, IE = --BB->end(); II != IE;
380 ++II) {
382 Instruction *NewInst = II->clone();
384 // Eagerly remap operands to the newly cloned instruction, except for PHI
385 // nodes for which we defer processing until we update the CFG.
386 if (!isa<PHINode>(NewInst)) {
387 RemapInstruction(NewInst, VMap,
388 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges);
390 // If we can simplify this instruction to some other value, simply add
391 // a mapping to that value rather than inserting a new instruction into
392 // the basic block.
393 if (Value *V =
394 SimplifyInstruction(NewInst, BB->getModule()->getDataLayout())) {
395 // On the off-chance that this simplifies to an instruction in the old
396 // function, map it back into the new function.
397 if (NewFunc != OldFunc)
398 if (Value *MappedV = VMap.lookup(V))
399 V = MappedV;
401 if (!NewInst->mayHaveSideEffects()) {
402 VMap[&*II] = V;
403 NewInst->deleteValue();
404 continue;
409 if (II->hasName())
410 NewInst->setName(II->getName() + NameSuffix);
411 VMap[&*II] = NewInst; // Add instruction map to value.
412 NewBB->getInstList().push_back(NewInst);
413 hasCalls |= (isa<CallInst>(II) && !isa<DbgInfoIntrinsic>(II));
415 if (CodeInfo) {
416 CodeInfo->OrigVMap[&*II] = NewInst;
417 if (auto *CB = dyn_cast<CallBase>(&*II))
418 if (CB->hasOperandBundles())
419 CodeInfo->OperandBundleCallSites.push_back(NewInst);
422 if (const AllocaInst *AI = dyn_cast<AllocaInst>(II)) {
423 if (isa<ConstantInt>(AI->getArraySize()))
424 hasStaticAllocas = true;
425 else
426 hasDynamicAllocas = true;
430 // Finally, clone over the terminator.
431 const Instruction *OldTI = BB->getTerminator();
432 bool TerminatorDone = false;
433 if (const BranchInst *BI = dyn_cast<BranchInst>(OldTI)) {
434 if (BI->isConditional()) {
435 // If the condition was a known constant in the callee...
436 ConstantInt *Cond = dyn_cast<ConstantInt>(BI->getCondition());
437 // Or is a known constant in the caller...
438 if (!Cond) {
439 Value *V = VMap.lookup(BI->getCondition());
440 Cond = dyn_cast_or_null<ConstantInt>(V);
443 // Constant fold to uncond branch!
444 if (Cond) {
445 BasicBlock *Dest = BI->getSuccessor(!Cond->getZExtValue());
446 VMap[OldTI] = BranchInst::Create(Dest, NewBB);
447 ToClone.push_back(Dest);
448 TerminatorDone = true;
451 } else if (const SwitchInst *SI = dyn_cast<SwitchInst>(OldTI)) {
452 // If switching on a value known constant in the caller.
453 ConstantInt *Cond = dyn_cast<ConstantInt>(SI->getCondition());
454 if (!Cond) { // Or known constant after constant prop in the callee...
455 Value *V = VMap.lookup(SI->getCondition());
456 Cond = dyn_cast_or_null<ConstantInt>(V);
458 if (Cond) { // Constant fold to uncond branch!
459 SwitchInst::ConstCaseHandle Case = *SI->findCaseValue(Cond);
460 BasicBlock *Dest = const_cast<BasicBlock *>(Case.getCaseSuccessor());
461 VMap[OldTI] = BranchInst::Create(Dest, NewBB);
462 ToClone.push_back(Dest);
463 TerminatorDone = true;
467 if (!TerminatorDone) {
468 Instruction *NewInst = OldTI->clone();
469 if (OldTI->hasName())
470 NewInst->setName(OldTI->getName() + NameSuffix);
471 NewBB->getInstList().push_back(NewInst);
472 VMap[OldTI] = NewInst; // Add instruction map to value.
474 if (CodeInfo) {
475 CodeInfo->OrigVMap[OldTI] = NewInst;
476 if (auto *CB = dyn_cast<CallBase>(OldTI))
477 if (CB->hasOperandBundles())
478 CodeInfo->OperandBundleCallSites.push_back(NewInst);
481 // Recursively clone any reachable successor blocks.
482 append_range(ToClone, successors(BB->getTerminator()));
485 if (CodeInfo) {
486 CodeInfo->ContainsCalls |= hasCalls;
487 CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas;
488 CodeInfo->ContainsDynamicAllocas |=
489 hasStaticAllocas && BB != &BB->getParent()->front();
493 /// This works like CloneAndPruneFunctionInto, except that it does not clone the
494 /// entire function. Instead it starts at an instruction provided by the caller
495 /// and copies (and prunes) only the code reachable from that instruction.
496 void llvm::CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc,
497 const Instruction *StartingInst,
498 ValueToValueMapTy &VMap,
499 bool ModuleLevelChanges,
500 SmallVectorImpl<ReturnInst *> &Returns,
501 const char *NameSuffix,
502 ClonedCodeInfo *CodeInfo) {
503 assert(NameSuffix && "NameSuffix cannot be null!");
505 ValueMapTypeRemapper *TypeMapper = nullptr;
506 ValueMaterializer *Materializer = nullptr;
508 #ifndef NDEBUG
509 // If the cloning starts at the beginning of the function, verify that
510 // the function arguments are mapped.
511 if (!StartingInst)
512 for (const Argument &II : OldFunc->args())
513 assert(VMap.count(&II) && "No mapping from source argument specified!");
514 #endif
516 PruningFunctionCloner PFC(NewFunc, OldFunc, VMap, ModuleLevelChanges,
517 NameSuffix, CodeInfo);
518 const BasicBlock *StartingBB;
519 if (StartingInst)
520 StartingBB = StartingInst->getParent();
521 else {
522 StartingBB = &OldFunc->getEntryBlock();
523 StartingInst = &StartingBB->front();
526 // Clone the entry block, and anything recursively reachable from it.
527 std::vector<const BasicBlock *> CloneWorklist;
528 PFC.CloneBlock(StartingBB, StartingInst->getIterator(), CloneWorklist);
529 while (!CloneWorklist.empty()) {
530 const BasicBlock *BB = CloneWorklist.back();
531 CloneWorklist.pop_back();
532 PFC.CloneBlock(BB, BB->begin(), CloneWorklist);
535 // Loop over all of the basic blocks in the old function. If the block was
536 // reachable, we have cloned it and the old block is now in the value map:
537 // insert it into the new function in the right order. If not, ignore it.
539 // Defer PHI resolution until rest of function is resolved.
540 SmallVector<const PHINode *, 16> PHIToResolve;
541 for (const BasicBlock &BI : *OldFunc) {
542 Value *V = VMap.lookup(&BI);
543 BasicBlock *NewBB = cast_or_null<BasicBlock>(V);
544 if (!NewBB)
545 continue; // Dead block.
547 // Add the new block to the new function.
548 NewFunc->getBasicBlockList().push_back(NewBB);
550 // Handle PHI nodes specially, as we have to remove references to dead
551 // blocks.
552 for (const PHINode &PN : BI.phis()) {
553 // PHI nodes may have been remapped to non-PHI nodes by the caller or
554 // during the cloning process.
555 if (isa<PHINode>(VMap[&PN]))
556 PHIToResolve.push_back(&PN);
557 else
558 break;
561 // Finally, remap the terminator instructions, as those can't be remapped
562 // until all BBs are mapped.
563 RemapInstruction(NewBB->getTerminator(), VMap,
564 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges,
565 TypeMapper, Materializer);
568 // Defer PHI resolution until rest of function is resolved, PHI resolution
569 // requires the CFG to be up-to-date.
570 for (unsigned phino = 0, e = PHIToResolve.size(); phino != e;) {
571 const PHINode *OPN = PHIToResolve[phino];
572 unsigned NumPreds = OPN->getNumIncomingValues();
573 const BasicBlock *OldBB = OPN->getParent();
574 BasicBlock *NewBB = cast<BasicBlock>(VMap[OldBB]);
576 // Map operands for blocks that are live and remove operands for blocks
577 // that are dead.
578 for (; phino != PHIToResolve.size() &&
579 PHIToResolve[phino]->getParent() == OldBB;
580 ++phino) {
581 OPN = PHIToResolve[phino];
582 PHINode *PN = cast<PHINode>(VMap[OPN]);
583 for (unsigned pred = 0, e = NumPreds; pred != e; ++pred) {
584 Value *V = VMap.lookup(PN->getIncomingBlock(pred));
585 if (BasicBlock *MappedBlock = cast_or_null<BasicBlock>(V)) {
586 Value *InVal =
587 MapValue(PN->getIncomingValue(pred), VMap,
588 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges);
589 assert(InVal && "Unknown input value?");
590 PN->setIncomingValue(pred, InVal);
591 PN->setIncomingBlock(pred, MappedBlock);
592 } else {
593 PN->removeIncomingValue(pred, false);
594 --pred; // Revisit the next entry.
595 --e;
600 // The loop above has removed PHI entries for those blocks that are dead
601 // and has updated others. However, if a block is live (i.e. copied over)
602 // but its terminator has been changed to not go to this block, then our
603 // phi nodes will have invalid entries. Update the PHI nodes in this
604 // case.
605 PHINode *PN = cast<PHINode>(NewBB->begin());
606 NumPreds = pred_size(NewBB);
607 if (NumPreds != PN->getNumIncomingValues()) {
608 assert(NumPreds < PN->getNumIncomingValues());
609 // Count how many times each predecessor comes to this block.
610 std::map<BasicBlock *, unsigned> PredCount;
611 for (BasicBlock *Pred : predecessors(NewBB))
612 --PredCount[Pred];
614 // Figure out how many entries to remove from each PHI.
615 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
616 ++PredCount[PN->getIncomingBlock(i)];
618 // At this point, the excess predecessor entries are positive in the
619 // map. Loop over all of the PHIs and remove excess predecessor
620 // entries.
621 BasicBlock::iterator I = NewBB->begin();
622 for (; (PN = dyn_cast<PHINode>(I)); ++I) {
623 for (const auto &PCI : PredCount) {
624 BasicBlock *Pred = PCI.first;
625 for (unsigned NumToRemove = PCI.second; NumToRemove; --NumToRemove)
626 PN->removeIncomingValue(Pred, false);
631 // If the loops above have made these phi nodes have 0 or 1 operand,
632 // replace them with undef or the input value. We must do this for
633 // correctness, because 0-operand phis are not valid.
634 PN = cast<PHINode>(NewBB->begin());
635 if (PN->getNumIncomingValues() == 0) {
636 BasicBlock::iterator I = NewBB->begin();
637 BasicBlock::const_iterator OldI = OldBB->begin();
638 while ((PN = dyn_cast<PHINode>(I++))) {
639 Value *NV = UndefValue::get(PN->getType());
640 PN->replaceAllUsesWith(NV);
641 assert(VMap[&*OldI] == PN && "VMap mismatch");
642 VMap[&*OldI] = NV;
643 PN->eraseFromParent();
644 ++OldI;
649 // Make a second pass over the PHINodes now that all of them have been
650 // remapped into the new function, simplifying the PHINode and performing any
651 // recursive simplifications exposed. This will transparently update the
652 // WeakTrackingVH in the VMap. Notably, we rely on that so that if we coalesce
653 // two PHINodes, the iteration over the old PHIs remains valid, and the
654 // mapping will just map us to the new node (which may not even be a PHI
655 // node).
656 const DataLayout &DL = NewFunc->getParent()->getDataLayout();
657 SmallSetVector<const Value *, 8> Worklist;
658 for (unsigned Idx = 0, Size = PHIToResolve.size(); Idx != Size; ++Idx)
659 if (isa<PHINode>(VMap[PHIToResolve[Idx]]))
660 Worklist.insert(PHIToResolve[Idx]);
662 // Note that we must test the size on each iteration, the worklist can grow.
663 for (unsigned Idx = 0; Idx != Worklist.size(); ++Idx) {
664 const Value *OrigV = Worklist[Idx];
665 auto *I = dyn_cast_or_null<Instruction>(VMap.lookup(OrigV));
666 if (!I)
667 continue;
669 // Skip over non-intrinsic callsites, we don't want to remove any nodes from
670 // the CGSCC.
671 CallBase *CB = dyn_cast<CallBase>(I);
672 if (CB && CB->getCalledFunction() &&
673 !CB->getCalledFunction()->isIntrinsic())
674 continue;
676 // See if this instruction simplifies.
677 Value *SimpleV = SimplifyInstruction(I, DL);
678 if (!SimpleV)
679 continue;
681 // Stash away all the uses of the old instruction so we can check them for
682 // recursive simplifications after a RAUW. This is cheaper than checking all
683 // uses of To on the recursive step in most cases.
684 for (const User *U : OrigV->users())
685 Worklist.insert(cast<Instruction>(U));
687 // Replace the instruction with its simplified value.
688 I->replaceAllUsesWith(SimpleV);
690 // If the original instruction had no side effects, remove it.
691 if (isInstructionTriviallyDead(I))
692 I->eraseFromParent();
693 else
694 VMap[OrigV] = I;
697 // Now that the inlined function body has been fully constructed, go through
698 // and zap unconditional fall-through branches. This happens all the time when
699 // specializing code: code specialization turns conditional branches into
700 // uncond branches, and this code folds them.
701 Function::iterator Begin = cast<BasicBlock>(VMap[StartingBB])->getIterator();
702 Function::iterator I = Begin;
703 while (I != NewFunc->end()) {
704 // We need to simplify conditional branches and switches with a constant
705 // operand. We try to prune these out when cloning, but if the
706 // simplification required looking through PHI nodes, those are only
707 // available after forming the full basic block. That may leave some here,
708 // and we still want to prune the dead code as early as possible.
710 // Do the folding before we check if the block is dead since we want code
711 // like
712 // bb:
713 // br i1 undef, label %bb, label %bb
714 // to be simplified to
715 // bb:
716 // br label %bb
717 // before we call I->getSinglePredecessor().
718 ConstantFoldTerminator(&*I);
720 // Check if this block has become dead during inlining or other
721 // simplifications. Note that the first block will appear dead, as it has
722 // not yet been wired up properly.
723 if (I != Begin && (pred_empty(&*I) || I->getSinglePredecessor() == &*I)) {
724 BasicBlock *DeadBB = &*I++;
725 DeleteDeadBlock(DeadBB);
726 continue;
729 BranchInst *BI = dyn_cast<BranchInst>(I->getTerminator());
730 if (!BI || BI->isConditional()) {
731 ++I;
732 continue;
735 BasicBlock *Dest = BI->getSuccessor(0);
736 if (!Dest->getSinglePredecessor()) {
737 ++I;
738 continue;
741 // We shouldn't be able to get single-entry PHI nodes here, as instsimplify
742 // above should have zapped all of them..
743 assert(!isa<PHINode>(Dest->begin()));
745 // We know all single-entry PHI nodes in the inlined function have been
746 // removed, so we just need to splice the blocks.
747 BI->eraseFromParent();
749 // Make all PHI nodes that referred to Dest now refer to I as their source.
750 Dest->replaceAllUsesWith(&*I);
752 // Move all the instructions in the succ to the pred.
753 I->getInstList().splice(I->end(), Dest->getInstList());
755 // Remove the dest block.
756 Dest->eraseFromParent();
758 // Do not increment I, iteratively merge all things this block branches to.
761 // Make a final pass over the basic blocks from the old function to gather
762 // any return instructions which survived folding. We have to do this here
763 // because we can iteratively remove and merge returns above.
764 for (Function::iterator I = cast<BasicBlock>(VMap[StartingBB])->getIterator(),
765 E = NewFunc->end();
766 I != E; ++I)
767 if (ReturnInst *RI = dyn_cast<ReturnInst>(I->getTerminator()))
768 Returns.push_back(RI);
771 /// This works exactly like CloneFunctionInto,
772 /// except that it does some simple constant prop and DCE on the fly. The
773 /// effect of this is to copy significantly less code in cases where (for
774 /// example) a function call with constant arguments is inlined, and those
775 /// constant arguments cause a significant amount of code in the callee to be
776 /// dead. Since this doesn't produce an exact copy of the input, it can't be
777 /// used for things like CloneFunction or CloneModule.
778 void llvm::CloneAndPruneFunctionInto(
779 Function *NewFunc, const Function *OldFunc, ValueToValueMapTy &VMap,
780 bool ModuleLevelChanges, SmallVectorImpl<ReturnInst *> &Returns,
781 const char *NameSuffix, ClonedCodeInfo *CodeInfo) {
782 CloneAndPruneIntoFromInst(NewFunc, OldFunc, &OldFunc->front().front(), VMap,
783 ModuleLevelChanges, Returns, NameSuffix, CodeInfo);
786 /// Remaps instructions in \p Blocks using the mapping in \p VMap.
787 void llvm::remapInstructionsInBlocks(
788 const SmallVectorImpl<BasicBlock *> &Blocks, ValueToValueMapTy &VMap) {
789 // Rewrite the code to refer to itself.
790 for (auto *BB : Blocks)
791 for (auto &Inst : *BB)
792 RemapInstruction(&Inst, VMap,
793 RF_NoModuleLevelChanges | RF_IgnoreMissingLocals);
796 /// Clones a loop \p OrigLoop. Returns the loop and the blocks in \p
797 /// Blocks.
799 /// Updates LoopInfo and DominatorTree assuming the loop is dominated by block
800 /// \p LoopDomBB. Insert the new blocks before block specified in \p Before.
801 Loop *llvm::cloneLoopWithPreheader(BasicBlock *Before, BasicBlock *LoopDomBB,
802 Loop *OrigLoop, ValueToValueMapTy &VMap,
803 const Twine &NameSuffix, LoopInfo *LI,
804 DominatorTree *DT,
805 SmallVectorImpl<BasicBlock *> &Blocks) {
806 Function *F = OrigLoop->getHeader()->getParent();
807 Loop *ParentLoop = OrigLoop->getParentLoop();
808 DenseMap<Loop *, Loop *> LMap;
810 Loop *NewLoop = LI->AllocateLoop();
811 LMap[OrigLoop] = NewLoop;
812 if (ParentLoop)
813 ParentLoop->addChildLoop(NewLoop);
814 else
815 LI->addTopLevelLoop(NewLoop);
817 BasicBlock *OrigPH = OrigLoop->getLoopPreheader();
818 assert(OrigPH && "No preheader");
819 BasicBlock *NewPH = CloneBasicBlock(OrigPH, VMap, NameSuffix, F);
820 // To rename the loop PHIs.
821 VMap[OrigPH] = NewPH;
822 Blocks.push_back(NewPH);
824 // Update LoopInfo.
825 if (ParentLoop)
826 ParentLoop->addBasicBlockToLoop(NewPH, *LI);
828 // Update DominatorTree.
829 DT->addNewBlock(NewPH, LoopDomBB);
831 for (Loop *CurLoop : OrigLoop->getLoopsInPreorder()) {
832 Loop *&NewLoop = LMap[CurLoop];
833 if (!NewLoop) {
834 NewLoop = LI->AllocateLoop();
836 // Establish the parent/child relationship.
837 Loop *OrigParent = CurLoop->getParentLoop();
838 assert(OrigParent && "Could not find the original parent loop");
839 Loop *NewParentLoop = LMap[OrigParent];
840 assert(NewParentLoop && "Could not find the new parent loop");
842 NewParentLoop->addChildLoop(NewLoop);
846 for (BasicBlock *BB : OrigLoop->getBlocks()) {
847 Loop *CurLoop = LI->getLoopFor(BB);
848 Loop *&NewLoop = LMap[CurLoop];
849 assert(NewLoop && "Expecting new loop to be allocated");
851 BasicBlock *NewBB = CloneBasicBlock(BB, VMap, NameSuffix, F);
852 VMap[BB] = NewBB;
854 // Update LoopInfo.
855 NewLoop->addBasicBlockToLoop(NewBB, *LI);
857 // Add DominatorTree node. After seeing all blocks, update to correct
858 // IDom.
859 DT->addNewBlock(NewBB, NewPH);
861 Blocks.push_back(NewBB);
864 for (BasicBlock *BB : OrigLoop->getBlocks()) {
865 // Update loop headers.
866 Loop *CurLoop = LI->getLoopFor(BB);
867 if (BB == CurLoop->getHeader())
868 LMap[CurLoop]->moveToHeader(cast<BasicBlock>(VMap[BB]));
870 // Update DominatorTree.
871 BasicBlock *IDomBB = DT->getNode(BB)->getIDom()->getBlock();
872 DT->changeImmediateDominator(cast<BasicBlock>(VMap[BB]),
873 cast<BasicBlock>(VMap[IDomBB]));
876 // Move them physically from the end of the block list.
877 F->getBasicBlockList().splice(Before->getIterator(), F->getBasicBlockList(),
878 NewPH);
879 F->getBasicBlockList().splice(Before->getIterator(), F->getBasicBlockList(),
880 NewLoop->getHeader()->getIterator(), F->end());
882 return NewLoop;
885 /// Duplicate non-Phi instructions from the beginning of block up to
886 /// StopAt instruction into a split block between BB and its predecessor.
887 BasicBlock *llvm::DuplicateInstructionsInSplitBetween(
888 BasicBlock *BB, BasicBlock *PredBB, Instruction *StopAt,
889 ValueToValueMapTy &ValueMapping, DomTreeUpdater &DTU) {
891 assert(count(successors(PredBB), BB) == 1 &&
892 "There must be a single edge between PredBB and BB!");
893 // We are going to have to map operands from the original BB block to the new
894 // copy of the block 'NewBB'. If there are PHI nodes in BB, evaluate them to
895 // account for entry from PredBB.
896 BasicBlock::iterator BI = BB->begin();
897 for (; PHINode *PN = dyn_cast<PHINode>(BI); ++BI)
898 ValueMapping[PN] = PN->getIncomingValueForBlock(PredBB);
900 BasicBlock *NewBB = SplitEdge(PredBB, BB);
901 NewBB->setName(PredBB->getName() + ".split");
902 Instruction *NewTerm = NewBB->getTerminator();
904 // FIXME: SplitEdge does not yet take a DTU, so we include the split edge
905 // in the update set here.
906 DTU.applyUpdates({{DominatorTree::Delete, PredBB, BB},
907 {DominatorTree::Insert, PredBB, NewBB},
908 {DominatorTree::Insert, NewBB, BB}});
910 // Clone the non-phi instructions of BB into NewBB, keeping track of the
911 // mapping and using it to remap operands in the cloned instructions.
912 // Stop once we see the terminator too. This covers the case where BB's
913 // terminator gets replaced and StopAt == BB's terminator.
914 for (; StopAt != &*BI && BB->getTerminator() != &*BI; ++BI) {
915 Instruction *New = BI->clone();
916 New->setName(BI->getName());
917 New->insertBefore(NewTerm);
918 ValueMapping[&*BI] = New;
920 // Remap operands to patch up intra-block references.
921 for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
922 if (Instruction *Inst = dyn_cast<Instruction>(New->getOperand(i))) {
923 auto I = ValueMapping.find(Inst);
924 if (I != ValueMapping.end())
925 New->setOperand(i, I->second);
929 return NewBB;
932 void llvm::cloneNoAliasScopes(ArrayRef<MDNode *> NoAliasDeclScopes,
933 DenseMap<MDNode *, MDNode *> &ClonedScopes,
934 StringRef Ext, LLVMContext &Context) {
935 MDBuilder MDB(Context);
937 for (auto *ScopeList : NoAliasDeclScopes) {
938 for (auto &MDOperand : ScopeList->operands()) {
939 if (MDNode *MD = dyn_cast<MDNode>(MDOperand)) {
940 AliasScopeNode SNANode(MD);
942 std::string Name;
943 auto ScopeName = SNANode.getName();
944 if (!ScopeName.empty())
945 Name = (Twine(ScopeName) + ":" + Ext).str();
946 else
947 Name = std::string(Ext);
949 MDNode *NewScope = MDB.createAnonymousAliasScope(
950 const_cast<MDNode *>(SNANode.getDomain()), Name);
951 ClonedScopes.insert(std::make_pair(MD, NewScope));
957 void llvm::adaptNoAliasScopes(Instruction *I,
958 const DenseMap<MDNode *, MDNode *> &ClonedScopes,
959 LLVMContext &Context) {
960 auto CloneScopeList = [&](const MDNode *ScopeList) -> MDNode * {
961 bool NeedsReplacement = false;
962 SmallVector<Metadata *, 8> NewScopeList;
963 for (auto &MDOp : ScopeList->operands()) {
964 if (MDNode *MD = dyn_cast<MDNode>(MDOp)) {
965 if (auto *NewMD = ClonedScopes.lookup(MD)) {
966 NewScopeList.push_back(NewMD);
967 NeedsReplacement = true;
968 continue;
970 NewScopeList.push_back(MD);
973 if (NeedsReplacement)
974 return MDNode::get(Context, NewScopeList);
975 return nullptr;
978 if (auto *Decl = dyn_cast<NoAliasScopeDeclInst>(I))
979 if (auto *NewScopeList = CloneScopeList(Decl->getScopeList()))
980 Decl->setScopeList(NewScopeList);
982 auto replaceWhenNeeded = [&](unsigned MD_ID) {
983 if (const MDNode *CSNoAlias = I->getMetadata(MD_ID))
984 if (auto *NewScopeList = CloneScopeList(CSNoAlias))
985 I->setMetadata(MD_ID, NewScopeList);
987 replaceWhenNeeded(LLVMContext::MD_noalias);
988 replaceWhenNeeded(LLVMContext::MD_alias_scope);
991 void llvm::cloneAndAdaptNoAliasScopes(ArrayRef<MDNode *> NoAliasDeclScopes,
992 ArrayRef<BasicBlock *> NewBlocks,
993 LLVMContext &Context, StringRef Ext) {
994 if (NoAliasDeclScopes.empty())
995 return;
997 DenseMap<MDNode *, MDNode *> ClonedScopes;
998 LLVM_DEBUG(dbgs() << "cloneAndAdaptNoAliasScopes: cloning "
999 << NoAliasDeclScopes.size() << " node(s)\n");
1001 cloneNoAliasScopes(NoAliasDeclScopes, ClonedScopes, Ext, Context);
1002 // Identify instructions using metadata that needs adaptation
1003 for (BasicBlock *NewBlock : NewBlocks)
1004 for (Instruction &I : *NewBlock)
1005 adaptNoAliasScopes(&I, ClonedScopes, Context);
1008 void llvm::cloneAndAdaptNoAliasScopes(ArrayRef<MDNode *> NoAliasDeclScopes,
1009 Instruction *IStart, Instruction *IEnd,
1010 LLVMContext &Context, StringRef Ext) {
1011 if (NoAliasDeclScopes.empty())
1012 return;
1014 DenseMap<MDNode *, MDNode *> ClonedScopes;
1015 LLVM_DEBUG(dbgs() << "cloneAndAdaptNoAliasScopes: cloning "
1016 << NoAliasDeclScopes.size() << " node(s)\n");
1018 cloneNoAliasScopes(NoAliasDeclScopes, ClonedScopes, Ext, Context);
1019 // Identify instructions using metadata that needs adaptation
1020 assert(IStart->getParent() == IEnd->getParent() && "different basic block ?");
1021 auto ItStart = IStart->getIterator();
1022 auto ItEnd = IEnd->getIterator();
1023 ++ItEnd; // IEnd is included, increment ItEnd to get the end of the range
1024 for (auto &I : llvm::make_range(ItStart, ItEnd))
1025 adaptNoAliasScopes(&I, ClonedScopes, Context);
1028 void llvm::identifyNoAliasScopesToClone(
1029 ArrayRef<BasicBlock *> BBs, SmallVectorImpl<MDNode *> &NoAliasDeclScopes) {
1030 for (BasicBlock *BB : BBs)
1031 for (Instruction &I : *BB)
1032 if (auto *Decl = dyn_cast<NoAliasScopeDeclInst>(&I))
1033 NoAliasDeclScopes.push_back(Decl->getScopeList());
1036 void llvm::identifyNoAliasScopesToClone(
1037 BasicBlock::iterator Start, BasicBlock::iterator End,
1038 SmallVectorImpl<MDNode *> &NoAliasDeclScopes) {
1039 for (Instruction &I : make_range(Start, End))
1040 if (auto *Decl = dyn_cast<NoAliasScopeDeclInst>(&I))
1041 NoAliasDeclScopes.push_back(Decl->getScopeList());