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/Metadata.h"
31 #include "llvm/IR/Module.h"
32 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
33 #include "llvm/Transforms/Utils/Cloning.h"
34 #include "llvm/Transforms/Utils/Local.h"
35 #include "llvm/Transforms/Utils/ValueMapper.h"
39 /// See comments in Cloning.h.
40 BasicBlock
*llvm::CloneBasicBlock(const BasicBlock
*BB
, ValueToValueMapTy
&VMap
,
41 const Twine
&NameSuffix
, Function
*F
,
42 ClonedCodeInfo
*CodeInfo
,
43 DebugInfoFinder
*DIFinder
) {
44 DenseMap
<const MDNode
*, MDNode
*> Cache
;
45 BasicBlock
*NewBB
= BasicBlock::Create(BB
->getContext(), "", F
);
47 NewBB
->setName(BB
->getName() + NameSuffix
);
49 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
50 Module
*TheModule
= F
? F
->getParent() : nullptr;
52 // Loop over all instructions, and copy them over.
53 for (const Instruction
&I
: *BB
) {
54 if (DIFinder
&& TheModule
)
55 DIFinder
->processInstruction(*TheModule
, I
);
57 Instruction
*NewInst
= I
.clone();
59 NewInst
->setName(I
.getName() + NameSuffix
);
60 NewBB
->getInstList().push_back(NewInst
);
61 VMap
[&I
] = NewInst
; // Add instruction map to value.
63 hasCalls
|= (isa
<CallInst
>(I
) && !isa
<DbgInfoIntrinsic
>(I
));
64 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(&I
)) {
65 if (isa
<ConstantInt
>(AI
->getArraySize()))
66 hasStaticAllocas
= true;
68 hasDynamicAllocas
= true;
73 CodeInfo
->ContainsCalls
|= hasCalls
;
74 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
75 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
76 BB
!= &BB
->getParent()->getEntryBlock();
81 // Clone OldFunc into NewFunc, transforming the old arguments into references to
84 void llvm::CloneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
85 ValueToValueMapTy
&VMap
,
86 bool ModuleLevelChanges
,
87 SmallVectorImpl
<ReturnInst
*> &Returns
,
88 const char *NameSuffix
, ClonedCodeInfo
*CodeInfo
,
89 ValueMapTypeRemapper
*TypeMapper
,
90 ValueMaterializer
*Materializer
) {
91 assert(NameSuffix
&& "NameSuffix cannot be null!");
94 for (const Argument
&I
: OldFunc
->args())
95 assert(VMap
.count(&I
) && "No mapping from source argument specified!");
98 // Copy all attributes other than those stored in the AttributeList. We need
99 // to remap the parameter indices of the AttributeList.
100 AttributeList NewAttrs
= NewFunc
->getAttributes();
101 NewFunc
->copyAttributesFrom(OldFunc
);
102 NewFunc
->setAttributes(NewAttrs
);
104 // Fix up the personality function that got copied over.
105 if (OldFunc
->hasPersonalityFn())
106 NewFunc
->setPersonalityFn(
107 MapValue(OldFunc
->getPersonalityFn(), VMap
,
108 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
,
109 TypeMapper
, Materializer
));
111 SmallVector
<AttributeSet
, 4> NewArgAttrs(NewFunc
->arg_size());
112 AttributeList OldAttrs
= OldFunc
->getAttributes();
114 // Clone any argument attributes that are present in the VMap.
115 for (const Argument
&OldArg
: OldFunc
->args()) {
116 if (Argument
*NewArg
= dyn_cast
<Argument
>(VMap
[&OldArg
])) {
117 NewArgAttrs
[NewArg
->getArgNo()] =
118 OldAttrs
.getParamAttributes(OldArg
.getArgNo());
122 NewFunc
->setAttributes(
123 AttributeList::get(NewFunc
->getContext(), OldAttrs
.getFnAttributes(),
124 OldAttrs
.getRetAttributes(), NewArgAttrs
));
127 OldFunc
->getParent() && OldFunc
->getParent() == NewFunc
->getParent();
128 DISubprogram
*SP
= OldFunc
->getSubprogram();
130 assert(!MustCloneSP
|| ModuleLevelChanges
);
131 // Add mappings for some DebugInfo nodes that we don't want duplicated
132 // even if they're distinct.
133 auto &MD
= VMap
.MD();
134 MD
[SP
->getUnit()].reset(SP
->getUnit());
135 MD
[SP
->getType()].reset(SP
->getType());
136 MD
[SP
->getFile()].reset(SP
->getFile());
137 // If we're not cloning into the same module, no need to clone the
143 SmallVector
<std::pair
<unsigned, MDNode
*>, 1> MDs
;
144 OldFunc
->getAllMetadata(MDs
);
145 for (auto MD
: MDs
) {
146 NewFunc
->addMetadata(
148 *MapMetadata(MD
.second
, VMap
,
149 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
,
150 TypeMapper
, Materializer
));
153 // When we remap instructions, we want to avoid duplicating inlined
154 // DISubprograms, so record all subprograms we find as we duplicate
155 // instructions and then freeze them in the MD map.
156 // We also record information about dbg.value and dbg.declare to avoid
157 // duplicating the types.
158 DebugInfoFinder DIFinder
;
160 // Loop over all of the basic blocks in the function, cloning them as
161 // appropriate. Note that we save BE this way in order to handle cloning of
162 // recursive functions into themselves.
164 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
166 const BasicBlock
&BB
= *BI
;
168 // Create a new basic block and copy instructions into it!
169 BasicBlock
*CBB
= CloneBasicBlock(&BB
, VMap
, NameSuffix
, NewFunc
, CodeInfo
,
170 ModuleLevelChanges
? &DIFinder
: nullptr);
172 // Add basic block mapping.
175 // It is only legal to clone a function if a block address within that
176 // function is never referenced outside of the function. Given that, we
177 // want to map block addresses from the old function to block addresses in
178 // the clone. (This is different from the generic ValueMapper
179 // implementation, which generates an invalid blockaddress when
180 // cloning a function.)
181 if (BB
.hasAddressTaken()) {
182 Constant
*OldBBAddr
= BlockAddress::get(const_cast<Function
*>(OldFunc
),
183 const_cast<BasicBlock
*>(&BB
));
184 VMap
[OldBBAddr
] = BlockAddress::get(NewFunc
, CBB
);
187 // Note return instructions for the caller.
188 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(CBB
->getTerminator()))
189 Returns
.push_back(RI
);
192 for (DISubprogram
*ISP
: DIFinder
.subprograms())
194 VMap
.MD()[ISP
].reset(ISP
);
196 for (DICompileUnit
*CU
: DIFinder
.compile_units())
197 VMap
.MD()[CU
].reset(CU
);
199 for (DIType
*Type
: DIFinder
.types())
200 VMap
.MD()[Type
].reset(Type
);
202 // Loop over all of the instructions in the function, fixing up operand
203 // references as we go. This uses VMap to do all the hard work.
204 for (Function::iterator BB
=
205 cast
<BasicBlock
>(VMap
[&OldFunc
->front()])->getIterator(),
208 // Loop over all instructions, fixing each one as we find it...
209 for (Instruction
&II
: *BB
)
210 RemapInstruction(&II
, VMap
,
211 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
,
212 TypeMapper
, Materializer
);
215 /// Return a copy of the specified function and add it to that function's
216 /// module. Also, any references specified in the VMap are changed to refer to
217 /// their mapped value instead of the original one. If any of the arguments to
218 /// the function are in the VMap, the arguments are deleted from the resultant
219 /// function. The VMap is updated to include mappings from all of the
220 /// instructions and basicblocks in the function from their old to new values.
222 Function
*llvm::CloneFunction(Function
*F
, ValueToValueMapTy
&VMap
,
223 ClonedCodeInfo
*CodeInfo
) {
224 std::vector
<Type
*> ArgTypes
;
226 // The user might be deleting arguments to the function by specifying them in
227 // the VMap. If so, we need to not add the arguments to the arg ty vector
229 for (const Argument
&I
: F
->args())
230 if (VMap
.count(&I
) == 0) // Haven't mapped the argument to anything yet?
231 ArgTypes
.push_back(I
.getType());
233 // Create a new function type...
234 FunctionType
*FTy
= FunctionType::get(F
->getFunctionType()->getReturnType(),
235 ArgTypes
, F
->getFunctionType()->isVarArg());
237 // Create the new function...
238 Function
*NewF
= Function::Create(FTy
, F
->getLinkage(), F
->getAddressSpace(),
239 F
->getName(), F
->getParent());
241 // Loop over the arguments, copying the names of the mapped arguments over...
242 Function::arg_iterator DestI
= NewF
->arg_begin();
243 for (const Argument
& I
: F
->args())
244 if (VMap
.count(&I
) == 0) { // Is this argument preserved?
245 DestI
->setName(I
.getName()); // Copy the name over...
246 VMap
[&I
] = &*DestI
++; // Add mapping to VMap
249 SmallVector
<ReturnInst
*, 8> Returns
; // Ignore returns cloned.
250 CloneFunctionInto(NewF
, F
, VMap
, F
->getSubprogram() != nullptr, Returns
, "",
259 /// This is a private class used to implement CloneAndPruneFunctionInto.
260 struct PruningFunctionCloner
{
262 const Function
*OldFunc
;
263 ValueToValueMapTy
&VMap
;
264 bool ModuleLevelChanges
;
265 const char *NameSuffix
;
266 ClonedCodeInfo
*CodeInfo
;
269 PruningFunctionCloner(Function
*newFunc
, const Function
*oldFunc
,
270 ValueToValueMapTy
&valueMap
, bool moduleLevelChanges
,
271 const char *nameSuffix
, ClonedCodeInfo
*codeInfo
)
272 : NewFunc(newFunc
), OldFunc(oldFunc
), VMap(valueMap
),
273 ModuleLevelChanges(moduleLevelChanges
), NameSuffix(nameSuffix
),
274 CodeInfo(codeInfo
) {}
276 /// The specified block is found to be reachable, clone it and
277 /// anything that it can reach.
278 void CloneBlock(const BasicBlock
*BB
,
279 BasicBlock::const_iterator StartingInst
,
280 std::vector
<const BasicBlock
*> &ToClone
);
284 /// The specified block is found to be reachable, clone it and
285 /// anything that it can reach.
286 void PruningFunctionCloner::CloneBlock(const BasicBlock
*BB
,
287 BasicBlock::const_iterator StartingInst
,
288 std::vector
<const BasicBlock
*> &ToClone
){
289 WeakTrackingVH
&BBEntry
= VMap
[BB
];
291 // Have we already cloned this block?
294 // Nope, clone it now.
296 BBEntry
= NewBB
= BasicBlock::Create(BB
->getContext());
297 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
299 // It is only legal to clone a function if a block address within that
300 // function is never referenced outside of the function. Given that, we
301 // want to map block addresses from the old function to block addresses in
302 // the clone. (This is different from the generic ValueMapper
303 // implementation, which generates an invalid blockaddress when
304 // cloning a function.)
306 // Note that we don't need to fix the mapping for unreachable blocks;
307 // the default mapping there is safe.
308 if (BB
->hasAddressTaken()) {
309 Constant
*OldBBAddr
= BlockAddress::get(const_cast<Function
*>(OldFunc
),
310 const_cast<BasicBlock
*>(BB
));
311 VMap
[OldBBAddr
] = BlockAddress::get(NewFunc
, NewBB
);
314 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
316 // Loop over all instructions, and copy them over, DCE'ing as we go. This
317 // loop doesn't include the terminator.
318 for (BasicBlock::const_iterator II
= StartingInst
, IE
= --BB
->end();
321 Instruction
*NewInst
= II
->clone();
323 // Eagerly remap operands to the newly cloned instruction, except for PHI
324 // nodes for which we defer processing until we update the CFG.
325 if (!isa
<PHINode
>(NewInst
)) {
326 RemapInstruction(NewInst
, VMap
,
327 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
);
329 // If we can simplify this instruction to some other value, simply add
330 // a mapping to that value rather than inserting a new instruction into
333 SimplifyInstruction(NewInst
, BB
->getModule()->getDataLayout())) {
334 // On the off-chance that this simplifies to an instruction in the old
335 // function, map it back into the new function.
336 if (NewFunc
!= OldFunc
)
337 if (Value
*MappedV
= VMap
.lookup(V
))
340 if (!NewInst
->mayHaveSideEffects()) {
342 NewInst
->deleteValue();
349 NewInst
->setName(II
->getName()+NameSuffix
);
350 VMap
[&*II
] = NewInst
; // Add instruction map to value.
351 NewBB
->getInstList().push_back(NewInst
);
352 hasCalls
|= (isa
<CallInst
>(II
) && !isa
<DbgInfoIntrinsic
>(II
));
355 if (auto CS
= ImmutableCallSite(&*II
))
356 if (CS
.hasOperandBundles())
357 CodeInfo
->OperandBundleCallSites
.push_back(NewInst
);
359 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
360 if (isa
<ConstantInt
>(AI
->getArraySize()))
361 hasStaticAllocas
= true;
363 hasDynamicAllocas
= true;
367 // Finally, clone over the terminator.
368 const Instruction
*OldTI
= BB
->getTerminator();
369 bool TerminatorDone
= false;
370 if (const BranchInst
*BI
= dyn_cast
<BranchInst
>(OldTI
)) {
371 if (BI
->isConditional()) {
372 // If the condition was a known constant in the callee...
373 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(BI
->getCondition());
374 // Or is a known constant in the caller...
376 Value
*V
= VMap
.lookup(BI
->getCondition());
377 Cond
= dyn_cast_or_null
<ConstantInt
>(V
);
380 // Constant fold to uncond branch!
382 BasicBlock
*Dest
= BI
->getSuccessor(!Cond
->getZExtValue());
383 VMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
384 ToClone
.push_back(Dest
);
385 TerminatorDone
= true;
388 } else if (const SwitchInst
*SI
= dyn_cast
<SwitchInst
>(OldTI
)) {
389 // If switching on a value known constant in the caller.
390 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(SI
->getCondition());
391 if (!Cond
) { // Or known constant after constant prop in the callee...
392 Value
*V
= VMap
.lookup(SI
->getCondition());
393 Cond
= dyn_cast_or_null
<ConstantInt
>(V
);
395 if (Cond
) { // Constant fold to uncond branch!
396 SwitchInst::ConstCaseHandle Case
= *SI
->findCaseValue(Cond
);
397 BasicBlock
*Dest
= const_cast<BasicBlock
*>(Case
.getCaseSuccessor());
398 VMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
399 ToClone
.push_back(Dest
);
400 TerminatorDone
= true;
404 if (!TerminatorDone
) {
405 Instruction
*NewInst
= OldTI
->clone();
406 if (OldTI
->hasName())
407 NewInst
->setName(OldTI
->getName()+NameSuffix
);
408 NewBB
->getInstList().push_back(NewInst
);
409 VMap
[OldTI
] = NewInst
; // Add instruction map to value.
412 if (auto CS
= ImmutableCallSite(OldTI
))
413 if (CS
.hasOperandBundles())
414 CodeInfo
->OperandBundleCallSites
.push_back(NewInst
);
416 // Recursively clone any reachable successor blocks.
417 const Instruction
*TI
= BB
->getTerminator();
418 for (const BasicBlock
*Succ
: successors(TI
))
419 ToClone
.push_back(Succ
);
423 CodeInfo
->ContainsCalls
|= hasCalls
;
424 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
425 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
426 BB
!= &BB
->getParent()->front();
430 /// This works like CloneAndPruneFunctionInto, except that it does not clone the
431 /// entire function. Instead it starts at an instruction provided by the caller
432 /// and copies (and prunes) only the code reachable from that instruction.
433 void llvm::CloneAndPruneIntoFromInst(Function
*NewFunc
, const Function
*OldFunc
,
434 const Instruction
*StartingInst
,
435 ValueToValueMapTy
&VMap
,
436 bool ModuleLevelChanges
,
437 SmallVectorImpl
<ReturnInst
*> &Returns
,
438 const char *NameSuffix
,
439 ClonedCodeInfo
*CodeInfo
) {
440 assert(NameSuffix
&& "NameSuffix cannot be null!");
442 ValueMapTypeRemapper
*TypeMapper
= nullptr;
443 ValueMaterializer
*Materializer
= nullptr;
446 // If the cloning starts at the beginning of the function, verify that
447 // the function arguments are mapped.
449 for (const Argument
&II
: OldFunc
->args())
450 assert(VMap
.count(&II
) && "No mapping from source argument specified!");
453 PruningFunctionCloner
PFC(NewFunc
, OldFunc
, VMap
, ModuleLevelChanges
,
454 NameSuffix
, CodeInfo
);
455 const BasicBlock
*StartingBB
;
457 StartingBB
= StartingInst
->getParent();
459 StartingBB
= &OldFunc
->getEntryBlock();
460 StartingInst
= &StartingBB
->front();
463 // Clone the entry block, and anything recursively reachable from it.
464 std::vector
<const BasicBlock
*> CloneWorklist
;
465 PFC
.CloneBlock(StartingBB
, StartingInst
->getIterator(), CloneWorklist
);
466 while (!CloneWorklist
.empty()) {
467 const BasicBlock
*BB
= CloneWorklist
.back();
468 CloneWorklist
.pop_back();
469 PFC
.CloneBlock(BB
, BB
->begin(), CloneWorklist
);
472 // Loop over all of the basic blocks in the old function. If the block was
473 // reachable, we have cloned it and the old block is now in the value map:
474 // insert it into the new function in the right order. If not, ignore it.
476 // Defer PHI resolution until rest of function is resolved.
477 SmallVector
<const PHINode
*, 16> PHIToResolve
;
478 for (const BasicBlock
&BI
: *OldFunc
) {
479 Value
*V
= VMap
.lookup(&BI
);
480 BasicBlock
*NewBB
= cast_or_null
<BasicBlock
>(V
);
481 if (!NewBB
) continue; // Dead block.
483 // Add the new block to the new function.
484 NewFunc
->getBasicBlockList().push_back(NewBB
);
486 // Handle PHI nodes specially, as we have to remove references to dead
488 for (const PHINode
&PN
: BI
.phis()) {
489 // PHI nodes may have been remapped to non-PHI nodes by the caller or
490 // during the cloning process.
491 if (isa
<PHINode
>(VMap
[&PN
]))
492 PHIToResolve
.push_back(&PN
);
497 // Finally, remap the terminator instructions, as those can't be remapped
498 // until all BBs are mapped.
499 RemapInstruction(NewBB
->getTerminator(), VMap
,
500 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
,
501 TypeMapper
, Materializer
);
504 // Defer PHI resolution until rest of function is resolved, PHI resolution
505 // requires the CFG to be up-to-date.
506 for (unsigned phino
= 0, e
= PHIToResolve
.size(); phino
!= e
; ) {
507 const PHINode
*OPN
= PHIToResolve
[phino
];
508 unsigned NumPreds
= OPN
->getNumIncomingValues();
509 const BasicBlock
*OldBB
= OPN
->getParent();
510 BasicBlock
*NewBB
= cast
<BasicBlock
>(VMap
[OldBB
]);
512 // Map operands for blocks that are live and remove operands for blocks
514 for (; phino
!= PHIToResolve
.size() &&
515 PHIToResolve
[phino
]->getParent() == OldBB
; ++phino
) {
516 OPN
= PHIToResolve
[phino
];
517 PHINode
*PN
= cast
<PHINode
>(VMap
[OPN
]);
518 for (unsigned pred
= 0, e
= NumPreds
; pred
!= e
; ++pred
) {
519 Value
*V
= VMap
.lookup(PN
->getIncomingBlock(pred
));
520 if (BasicBlock
*MappedBlock
= cast_or_null
<BasicBlock
>(V
)) {
521 Value
*InVal
= MapValue(PN
->getIncomingValue(pred
),
523 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
);
524 assert(InVal
&& "Unknown input value?");
525 PN
->setIncomingValue(pred
, InVal
);
526 PN
->setIncomingBlock(pred
, MappedBlock
);
528 PN
->removeIncomingValue(pred
, false);
529 --pred
; // Revisit the next entry.
535 // The loop above has removed PHI entries for those blocks that are dead
536 // and has updated others. However, if a block is live (i.e. copied over)
537 // but its terminator has been changed to not go to this block, then our
538 // phi nodes will have invalid entries. Update the PHI nodes in this
540 PHINode
*PN
= cast
<PHINode
>(NewBB
->begin());
541 NumPreds
= pred_size(NewBB
);
542 if (NumPreds
!= PN
->getNumIncomingValues()) {
543 assert(NumPreds
< PN
->getNumIncomingValues());
544 // Count how many times each predecessor comes to this block.
545 std::map
<BasicBlock
*, unsigned> PredCount
;
546 for (pred_iterator PI
= pred_begin(NewBB
), E
= pred_end(NewBB
);
550 // Figure out how many entries to remove from each PHI.
551 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
552 ++PredCount
[PN
->getIncomingBlock(i
)];
554 // At this point, the excess predecessor entries are positive in the
555 // map. Loop over all of the PHIs and remove excess predecessor
557 BasicBlock::iterator I
= NewBB
->begin();
558 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
) {
559 for (const auto &PCI
: PredCount
) {
560 BasicBlock
*Pred
= PCI
.first
;
561 for (unsigned NumToRemove
= PCI
.second
; NumToRemove
; --NumToRemove
)
562 PN
->removeIncomingValue(Pred
, false);
567 // If the loops above have made these phi nodes have 0 or 1 operand,
568 // replace them with undef or the input value. We must do this for
569 // correctness, because 0-operand phis are not valid.
570 PN
= cast
<PHINode
>(NewBB
->begin());
571 if (PN
->getNumIncomingValues() == 0) {
572 BasicBlock::iterator I
= NewBB
->begin();
573 BasicBlock::const_iterator OldI
= OldBB
->begin();
574 while ((PN
= dyn_cast
<PHINode
>(I
++))) {
575 Value
*NV
= UndefValue::get(PN
->getType());
576 PN
->replaceAllUsesWith(NV
);
577 assert(VMap
[&*OldI
] == PN
&& "VMap mismatch");
579 PN
->eraseFromParent();
585 // Make a second pass over the PHINodes now that all of them have been
586 // remapped into the new function, simplifying the PHINode and performing any
587 // recursive simplifications exposed. This will transparently update the
588 // WeakTrackingVH in the VMap. Notably, we rely on that so that if we coalesce
589 // two PHINodes, the iteration over the old PHIs remains valid, and the
590 // mapping will just map us to the new node (which may not even be a PHI
592 const DataLayout
&DL
= NewFunc
->getParent()->getDataLayout();
593 SmallSetVector
<const Value
*, 8> Worklist
;
594 for (unsigned Idx
= 0, Size
= PHIToResolve
.size(); Idx
!= Size
; ++Idx
)
595 if (isa
<PHINode
>(VMap
[PHIToResolve
[Idx
]]))
596 Worklist
.insert(PHIToResolve
[Idx
]);
598 // Note that we must test the size on each iteration, the worklist can grow.
599 for (unsigned Idx
= 0; Idx
!= Worklist
.size(); ++Idx
) {
600 const Value
*OrigV
= Worklist
[Idx
];
601 auto *I
= dyn_cast_or_null
<Instruction
>(VMap
.lookup(OrigV
));
605 // Skip over non-intrinsic callsites, we don't want to remove any nodes from
607 CallSite CS
= CallSite(I
);
608 if (CS
&& CS
.getCalledFunction() && !CS
.getCalledFunction()->isIntrinsic())
611 // See if this instruction simplifies.
612 Value
*SimpleV
= SimplifyInstruction(I
, DL
);
616 // Stash away all the uses of the old instruction so we can check them for
617 // recursive simplifications after a RAUW. This is cheaper than checking all
618 // uses of To on the recursive step in most cases.
619 for (const User
*U
: OrigV
->users())
620 Worklist
.insert(cast
<Instruction
>(U
));
622 // Replace the instruction with its simplified value.
623 I
->replaceAllUsesWith(SimpleV
);
625 // If the original instruction had no side effects, remove it.
626 if (isInstructionTriviallyDead(I
))
627 I
->eraseFromParent();
632 // Now that the inlined function body has been fully constructed, go through
633 // and zap unconditional fall-through branches. This happens all the time when
634 // specializing code: code specialization turns conditional branches into
635 // uncond branches, and this code folds them.
636 Function::iterator Begin
= cast
<BasicBlock
>(VMap
[StartingBB
])->getIterator();
637 Function::iterator I
= Begin
;
638 while (I
!= NewFunc
->end()) {
639 // We need to simplify conditional branches and switches with a constant
640 // operand. We try to prune these out when cloning, but if the
641 // simplification required looking through PHI nodes, those are only
642 // available after forming the full basic block. That may leave some here,
643 // and we still want to prune the dead code as early as possible.
645 // Do the folding before we check if the block is dead since we want code
648 // br i1 undef, label %bb, label %bb
649 // to be simplified to
652 // before we call I->getSinglePredecessor().
653 ConstantFoldTerminator(&*I
);
655 // Check if this block has become dead during inlining or other
656 // simplifications. Note that the first block will appear dead, as it has
657 // not yet been wired up properly.
658 if (I
!= Begin
&& (pred_begin(&*I
) == pred_end(&*I
) ||
659 I
->getSinglePredecessor() == &*I
)) {
660 BasicBlock
*DeadBB
= &*I
++;
661 DeleteDeadBlock(DeadBB
);
665 BranchInst
*BI
= dyn_cast
<BranchInst
>(I
->getTerminator());
666 if (!BI
|| BI
->isConditional()) { ++I
; continue; }
668 BasicBlock
*Dest
= BI
->getSuccessor(0);
669 if (!Dest
->getSinglePredecessor()) {
673 // We shouldn't be able to get single-entry PHI nodes here, as instsimplify
674 // above should have zapped all of them..
675 assert(!isa
<PHINode
>(Dest
->begin()));
677 // We know all single-entry PHI nodes in the inlined function have been
678 // removed, so we just need to splice the blocks.
679 BI
->eraseFromParent();
681 // Make all PHI nodes that referred to Dest now refer to I as their source.
682 Dest
->replaceAllUsesWith(&*I
);
684 // Move all the instructions in the succ to the pred.
685 I
->getInstList().splice(I
->end(), Dest
->getInstList());
687 // Remove the dest block.
688 Dest
->eraseFromParent();
690 // Do not increment I, iteratively merge all things this block branches to.
693 // Make a final pass over the basic blocks from the old function to gather
694 // any return instructions which survived folding. We have to do this here
695 // because we can iteratively remove and merge returns above.
696 for (Function::iterator I
= cast
<BasicBlock
>(VMap
[StartingBB
])->getIterator(),
699 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(I
->getTerminator()))
700 Returns
.push_back(RI
);
704 /// This works exactly like CloneFunctionInto,
705 /// except that it does some simple constant prop and DCE on the fly. The
706 /// effect of this is to copy significantly less code in cases where (for
707 /// example) a function call with constant arguments is inlined, and those
708 /// constant arguments cause a significant amount of code in the callee to be
709 /// dead. Since this doesn't produce an exact copy of the input, it can't be
710 /// used for things like CloneFunction or CloneModule.
711 void llvm::CloneAndPruneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
712 ValueToValueMapTy
&VMap
,
713 bool ModuleLevelChanges
,
714 SmallVectorImpl
<ReturnInst
*> &Returns
,
715 const char *NameSuffix
,
716 ClonedCodeInfo
*CodeInfo
,
717 Instruction
*TheCall
) {
718 CloneAndPruneIntoFromInst(NewFunc
, OldFunc
, &OldFunc
->front().front(), VMap
,
719 ModuleLevelChanges
, Returns
, NameSuffix
, CodeInfo
);
722 /// Remaps instructions in \p Blocks using the mapping in \p VMap.
723 void llvm::remapInstructionsInBlocks(
724 const SmallVectorImpl
<BasicBlock
*> &Blocks
, ValueToValueMapTy
&VMap
) {
725 // Rewrite the code to refer to itself.
726 for (auto *BB
: Blocks
)
727 for (auto &Inst
: *BB
)
728 RemapInstruction(&Inst
, VMap
,
729 RF_NoModuleLevelChanges
| RF_IgnoreMissingLocals
);
732 /// Clones a loop \p OrigLoop. Returns the loop and the blocks in \p
735 /// Updates LoopInfo and DominatorTree assuming the loop is dominated by block
736 /// \p LoopDomBB. Insert the new blocks before block specified in \p Before.
737 Loop
*llvm::cloneLoopWithPreheader(BasicBlock
*Before
, BasicBlock
*LoopDomBB
,
738 Loop
*OrigLoop
, ValueToValueMapTy
&VMap
,
739 const Twine
&NameSuffix
, LoopInfo
*LI
,
741 SmallVectorImpl
<BasicBlock
*> &Blocks
) {
742 Function
*F
= OrigLoop
->getHeader()->getParent();
743 Loop
*ParentLoop
= OrigLoop
->getParentLoop();
744 DenseMap
<Loop
*, Loop
*> LMap
;
746 Loop
*NewLoop
= LI
->AllocateLoop();
747 LMap
[OrigLoop
] = NewLoop
;
749 ParentLoop
->addChildLoop(NewLoop
);
751 LI
->addTopLevelLoop(NewLoop
);
753 BasicBlock
*OrigPH
= OrigLoop
->getLoopPreheader();
754 assert(OrigPH
&& "No preheader");
755 BasicBlock
*NewPH
= CloneBasicBlock(OrigPH
, VMap
, NameSuffix
, F
);
756 // To rename the loop PHIs.
757 VMap
[OrigPH
] = NewPH
;
758 Blocks
.push_back(NewPH
);
762 ParentLoop
->addBasicBlockToLoop(NewPH
, *LI
);
764 // Update DominatorTree.
765 DT
->addNewBlock(NewPH
, LoopDomBB
);
767 for (Loop
*CurLoop
: OrigLoop
->getLoopsInPreorder()) {
768 Loop
*&NewLoop
= LMap
[CurLoop
];
770 NewLoop
= LI
->AllocateLoop();
772 // Establish the parent/child relationship.
773 Loop
*OrigParent
= CurLoop
->getParentLoop();
774 assert(OrigParent
&& "Could not find the original parent loop");
775 Loop
*NewParentLoop
= LMap
[OrigParent
];
776 assert(NewParentLoop
&& "Could not find the new parent loop");
778 NewParentLoop
->addChildLoop(NewLoop
);
782 for (BasicBlock
*BB
: OrigLoop
->getBlocks()) {
783 Loop
*CurLoop
= LI
->getLoopFor(BB
);
784 Loop
*&NewLoop
= LMap
[CurLoop
];
785 assert(NewLoop
&& "Expecting new loop to be allocated");
787 BasicBlock
*NewBB
= CloneBasicBlock(BB
, VMap
, NameSuffix
, F
);
791 NewLoop
->addBasicBlockToLoop(NewBB
, *LI
);
792 if (BB
== CurLoop
->getHeader())
793 NewLoop
->moveToHeader(NewBB
);
795 // Add DominatorTree node. After seeing all blocks, update to correct
797 DT
->addNewBlock(NewBB
, NewPH
);
799 Blocks
.push_back(NewBB
);
802 for (BasicBlock
*BB
: OrigLoop
->getBlocks()) {
803 // Update DominatorTree.
804 BasicBlock
*IDomBB
= DT
->getNode(BB
)->getIDom()->getBlock();
805 DT
->changeImmediateDominator(cast
<BasicBlock
>(VMap
[BB
]),
806 cast
<BasicBlock
>(VMap
[IDomBB
]));
809 // Move them physically from the end of the block list.
810 F
->getBasicBlockList().splice(Before
->getIterator(), F
->getBasicBlockList(),
812 F
->getBasicBlockList().splice(Before
->getIterator(), F
->getBasicBlockList(),
813 NewLoop
->getHeader()->getIterator(), F
->end());
818 /// Duplicate non-Phi instructions from the beginning of block up to
819 /// StopAt instruction into a split block between BB and its predecessor.
820 BasicBlock
*llvm::DuplicateInstructionsInSplitBetween(
821 BasicBlock
*BB
, BasicBlock
*PredBB
, Instruction
*StopAt
,
822 ValueToValueMapTy
&ValueMapping
, DomTreeUpdater
&DTU
) {
824 assert(count(successors(PredBB
), BB
) == 1 &&
825 "There must be a single edge between PredBB and BB!");
826 // We are going to have to map operands from the original BB block to the new
827 // copy of the block 'NewBB'. If there are PHI nodes in BB, evaluate them to
828 // account for entry from PredBB.
829 BasicBlock::iterator BI
= BB
->begin();
830 for (; PHINode
*PN
= dyn_cast
<PHINode
>(BI
); ++BI
)
831 ValueMapping
[PN
] = PN
->getIncomingValueForBlock(PredBB
);
833 BasicBlock
*NewBB
= SplitEdge(PredBB
, BB
);
834 NewBB
->setName(PredBB
->getName() + ".split");
835 Instruction
*NewTerm
= NewBB
->getTerminator();
837 // FIXME: SplitEdge does not yet take a DTU, so we include the split edge
838 // in the update set here.
839 DTU
.applyUpdates({{DominatorTree::Delete
, PredBB
, BB
},
840 {DominatorTree::Insert
, PredBB
, NewBB
},
841 {DominatorTree::Insert
, NewBB
, BB
}});
843 // Clone the non-phi instructions of BB into NewBB, keeping track of the
844 // mapping and using it to remap operands in the cloned instructions.
845 // Stop once we see the terminator too. This covers the case where BB's
846 // terminator gets replaced and StopAt == BB's terminator.
847 for (; StopAt
!= &*BI
&& BB
->getTerminator() != &*BI
; ++BI
) {
848 Instruction
*New
= BI
->clone();
849 New
->setName(BI
->getName());
850 New
->insertBefore(NewTerm
);
851 ValueMapping
[&*BI
] = New
;
853 // Remap operands to patch up intra-block references.
854 for (unsigned i
= 0, e
= New
->getNumOperands(); i
!= e
; ++i
)
855 if (Instruction
*Inst
= dyn_cast
<Instruction
>(New
->getOperand(i
))) {
856 auto I
= ValueMapping
.find(Inst
);
857 if (I
!= ValueMapping
.end())
858 New
->setOperand(i
, I
->second
);