1 //===- CloneFunction.cpp - Clone a function into another function ---------===//
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
7 //===----------------------------------------------------------------------===//
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"
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
);
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();
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;
74 CodeInfo
->ContainsCalls
|= hasCalls
;
75 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
80 // Clone OldFunc into NewFunc, transforming the old arguments into references to
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!");
93 for (const Argument
&I
: OldFunc
->args())
94 assert(VMap
.count(&I
) && "No mapping from source argument specified!");
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())
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
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.
150 SPClonedWithinModule
= OldFunc
->getSubprogram();
151 if (SPClonedWithinModule
)
152 DIFinder
->processSubprogram(SPClonedWithinModule
);
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.
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.
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
)
215 for (DICompileUnit
*CU
: DIFinder
->compile_units())
218 for (DIType
*Type
: DIFinder
->types())
219 mapToSelfIfNew(Type
);
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
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(),
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
)
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()) {
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...
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
);
319 /// This is a private class used to implement CloneAndPruneFunctionInto.
320 struct PruningFunctionCloner
{
322 const Function
*OldFunc
;
323 ValueToValueMapTy
&VMap
;
324 bool ModuleLevelChanges
;
325 const char *NameSuffix
;
326 ClonedCodeInfo
*CodeInfo
;
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
);
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?
354 // Nope, clone it now.
356 BBEntry
= NewBB
= BasicBlock::Create(BB
->getContext());
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
;
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
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
))
401 if (!NewInst
->mayHaveSideEffects()) {
403 NewInst
->deleteValue();
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
));
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;
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...
439 Value
*V
= VMap
.lookup(BI
->getCondition());
440 Cond
= dyn_cast_or_null
<ConstantInt
>(V
);
443 // Constant fold to uncond branch!
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.
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()));
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;
509 // If the cloning starts at the beginning of the function, verify that
510 // the function arguments are mapped.
512 for (const Argument
&II
: OldFunc
->args())
513 assert(VMap
.count(&II
) && "No mapping from source argument specified!");
516 PruningFunctionCloner
PFC(NewFunc
, OldFunc
, VMap
, ModuleLevelChanges
,
517 NameSuffix
, CodeInfo
);
518 const BasicBlock
*StartingBB
;
520 StartingBB
= StartingInst
->getParent();
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
);
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
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
);
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
578 for (; phino
!= PHIToResolve
.size() &&
579 PHIToResolve
[phino
]->getParent() == OldBB
;
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
)) {
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
);
593 PN
->removeIncomingValue(pred
, false);
594 --pred
; // Revisit the next entry.
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
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
))
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
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");
643 PN
->eraseFromParent();
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
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
));
669 // Skip over non-intrinsic callsites, we don't want to remove any nodes from
671 CallBase
*CB
= dyn_cast
<CallBase
>(I
);
672 if (CB
&& CB
->getCalledFunction() &&
673 !CB
->getCalledFunction()->isIntrinsic())
676 // See if this instruction simplifies.
677 Value
*SimpleV
= SimplifyInstruction(I
, DL
);
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();
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
713 // br i1 undef, label %bb, label %bb
714 // to be simplified to
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
);
729 BranchInst
*BI
= dyn_cast
<BranchInst
>(I
->getTerminator());
730 if (!BI
|| BI
->isConditional()) {
735 BasicBlock
*Dest
= BI
->getSuccessor(0);
736 if (!Dest
->getSinglePredecessor()) {
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(),
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
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
,
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
;
813 ParentLoop
->addChildLoop(NewLoop
);
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
);
826 ParentLoop
->addBasicBlockToLoop(NewPH
, *LI
);
828 // Update DominatorTree.
829 DT
->addNewBlock(NewPH
, LoopDomBB
);
831 for (Loop
*CurLoop
: OrigLoop
->getLoopsInPreorder()) {
832 Loop
*&NewLoop
= LMap
[CurLoop
];
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
);
855 NewLoop
->addBasicBlockToLoop(NewBB
, *LI
);
857 // Add DominatorTree node. After seeing all blocks, update to correct
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(),
879 F
->getBasicBlockList().splice(Before
->getIterator(), F
->getBasicBlockList(),
880 NewLoop
->getHeader()->getIterator(), F
->end());
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
);
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
);
943 auto ScopeName
= SNANode
.getName();
944 if (!ScopeName
.empty())
945 Name
= (Twine(ScopeName
) + ":" + Ext
).str();
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;
970 NewScopeList
.push_back(MD
);
973 if (NeedsReplacement
)
974 return MDNode::get(Context
, NewScopeList
);
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())
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())
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());