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
);
214 // Register all DICompileUnits of the old parent module in the new parent module
215 auto* OldModule
= OldFunc
->getParent();
216 auto* NewModule
= NewFunc
->getParent();
217 if (OldModule
&& NewModule
&& OldModule
!= NewModule
&& DIFinder
.compile_unit_count()) {
218 auto* NMD
= NewModule
->getOrInsertNamedMetadata("llvm.dbg.cu");
219 // Avoid multiple insertions of the same DICompileUnit to NMD.
220 SmallPtrSet
<const void*, 8> Visited
;
221 for (auto* Operand
: NMD
->operands())
222 Visited
.insert(Operand
);
223 for (auto* Unit
: DIFinder
.compile_units())
224 // VMap.MD()[Unit] == Unit
225 if (Visited
.insert(Unit
).second
)
226 NMD
->addOperand(Unit
);
230 /// Return a copy of the specified function and add it to that function's
231 /// module. Also, any references specified in the VMap are changed to refer to
232 /// their mapped value instead of the original one. If any of the arguments to
233 /// the function are in the VMap, the arguments are deleted from the resultant
234 /// function. The VMap is updated to include mappings from all of the
235 /// instructions and basicblocks in the function from their old to new values.
237 Function
*llvm::CloneFunction(Function
*F
, ValueToValueMapTy
&VMap
,
238 ClonedCodeInfo
*CodeInfo
) {
239 std::vector
<Type
*> ArgTypes
;
241 // The user might be deleting arguments to the function by specifying them in
242 // the VMap. If so, we need to not add the arguments to the arg ty vector
244 for (const Argument
&I
: F
->args())
245 if (VMap
.count(&I
) == 0) // Haven't mapped the argument to anything yet?
246 ArgTypes
.push_back(I
.getType());
248 // Create a new function type...
249 FunctionType
*FTy
= FunctionType::get(F
->getFunctionType()->getReturnType(),
250 ArgTypes
, F
->getFunctionType()->isVarArg());
252 // Create the new function...
253 Function
*NewF
= Function::Create(FTy
, F
->getLinkage(), F
->getAddressSpace(),
254 F
->getName(), F
->getParent());
256 // Loop over the arguments, copying the names of the mapped arguments over...
257 Function::arg_iterator DestI
= NewF
->arg_begin();
258 for (const Argument
& I
: F
->args())
259 if (VMap
.count(&I
) == 0) { // Is this argument preserved?
260 DestI
->setName(I
.getName()); // Copy the name over...
261 VMap
[&I
] = &*DestI
++; // Add mapping to VMap
264 SmallVector
<ReturnInst
*, 8> Returns
; // Ignore returns cloned.
265 CloneFunctionInto(NewF
, F
, VMap
, F
->getSubprogram() != nullptr, Returns
, "",
274 /// This is a private class used to implement CloneAndPruneFunctionInto.
275 struct PruningFunctionCloner
{
277 const Function
*OldFunc
;
278 ValueToValueMapTy
&VMap
;
279 bool ModuleLevelChanges
;
280 const char *NameSuffix
;
281 ClonedCodeInfo
*CodeInfo
;
284 PruningFunctionCloner(Function
*newFunc
, const Function
*oldFunc
,
285 ValueToValueMapTy
&valueMap
, bool moduleLevelChanges
,
286 const char *nameSuffix
, ClonedCodeInfo
*codeInfo
)
287 : NewFunc(newFunc
), OldFunc(oldFunc
), VMap(valueMap
),
288 ModuleLevelChanges(moduleLevelChanges
), NameSuffix(nameSuffix
),
289 CodeInfo(codeInfo
) {}
291 /// The specified block is found to be reachable, clone it and
292 /// anything that it can reach.
293 void CloneBlock(const BasicBlock
*BB
,
294 BasicBlock::const_iterator StartingInst
,
295 std::vector
<const BasicBlock
*> &ToClone
);
299 /// The specified block is found to be reachable, clone it and
300 /// anything that it can reach.
301 void PruningFunctionCloner::CloneBlock(const BasicBlock
*BB
,
302 BasicBlock::const_iterator StartingInst
,
303 std::vector
<const BasicBlock
*> &ToClone
){
304 WeakTrackingVH
&BBEntry
= VMap
[BB
];
306 // Have we already cloned this block?
309 // Nope, clone it now.
311 BBEntry
= NewBB
= BasicBlock::Create(BB
->getContext());
312 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
314 // It is only legal to clone a function if a block address within that
315 // function is never referenced outside of the function. Given that, we
316 // want to map block addresses from the old function to block addresses in
317 // the clone. (This is different from the generic ValueMapper
318 // implementation, which generates an invalid blockaddress when
319 // cloning a function.)
321 // Note that we don't need to fix the mapping for unreachable blocks;
322 // the default mapping there is safe.
323 if (BB
->hasAddressTaken()) {
324 Constant
*OldBBAddr
= BlockAddress::get(const_cast<Function
*>(OldFunc
),
325 const_cast<BasicBlock
*>(BB
));
326 VMap
[OldBBAddr
] = BlockAddress::get(NewFunc
, NewBB
);
329 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
331 // Loop over all instructions, and copy them over, DCE'ing as we go. This
332 // loop doesn't include the terminator.
333 for (BasicBlock::const_iterator II
= StartingInst
, IE
= --BB
->end();
336 Instruction
*NewInst
= II
->clone();
338 // Eagerly remap operands to the newly cloned instruction, except for PHI
339 // nodes for which we defer processing until we update the CFG.
340 if (!isa
<PHINode
>(NewInst
)) {
341 RemapInstruction(NewInst
, VMap
,
342 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
);
344 // If we can simplify this instruction to some other value, simply add
345 // a mapping to that value rather than inserting a new instruction into
348 SimplifyInstruction(NewInst
, BB
->getModule()->getDataLayout())) {
349 // On the off-chance that this simplifies to an instruction in the old
350 // function, map it back into the new function.
351 if (NewFunc
!= OldFunc
)
352 if (Value
*MappedV
= VMap
.lookup(V
))
355 if (!NewInst
->mayHaveSideEffects()) {
357 NewInst
->deleteValue();
364 NewInst
->setName(II
->getName()+NameSuffix
);
365 VMap
[&*II
] = NewInst
; // Add instruction map to value.
366 NewBB
->getInstList().push_back(NewInst
);
367 hasCalls
|= (isa
<CallInst
>(II
) && !isa
<DbgInfoIntrinsic
>(II
));
370 if (auto CS
= ImmutableCallSite(&*II
))
371 if (CS
.hasOperandBundles())
372 CodeInfo
->OperandBundleCallSites
.push_back(NewInst
);
374 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
375 if (isa
<ConstantInt
>(AI
->getArraySize()))
376 hasStaticAllocas
= true;
378 hasDynamicAllocas
= true;
382 // Finally, clone over the terminator.
383 const Instruction
*OldTI
= BB
->getTerminator();
384 bool TerminatorDone
= false;
385 if (const BranchInst
*BI
= dyn_cast
<BranchInst
>(OldTI
)) {
386 if (BI
->isConditional()) {
387 // If the condition was a known constant in the callee...
388 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(BI
->getCondition());
389 // Or is a known constant in the caller...
391 Value
*V
= VMap
.lookup(BI
->getCondition());
392 Cond
= dyn_cast_or_null
<ConstantInt
>(V
);
395 // Constant fold to uncond branch!
397 BasicBlock
*Dest
= BI
->getSuccessor(!Cond
->getZExtValue());
398 VMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
399 ToClone
.push_back(Dest
);
400 TerminatorDone
= true;
403 } else if (const SwitchInst
*SI
= dyn_cast
<SwitchInst
>(OldTI
)) {
404 // If switching on a value known constant in the caller.
405 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(SI
->getCondition());
406 if (!Cond
) { // Or known constant after constant prop in the callee...
407 Value
*V
= VMap
.lookup(SI
->getCondition());
408 Cond
= dyn_cast_or_null
<ConstantInt
>(V
);
410 if (Cond
) { // Constant fold to uncond branch!
411 SwitchInst::ConstCaseHandle Case
= *SI
->findCaseValue(Cond
);
412 BasicBlock
*Dest
= const_cast<BasicBlock
*>(Case
.getCaseSuccessor());
413 VMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
414 ToClone
.push_back(Dest
);
415 TerminatorDone
= true;
419 if (!TerminatorDone
) {
420 Instruction
*NewInst
= OldTI
->clone();
421 if (OldTI
->hasName())
422 NewInst
->setName(OldTI
->getName()+NameSuffix
);
423 NewBB
->getInstList().push_back(NewInst
);
424 VMap
[OldTI
] = NewInst
; // Add instruction map to value.
427 if (auto CS
= ImmutableCallSite(OldTI
))
428 if (CS
.hasOperandBundles())
429 CodeInfo
->OperandBundleCallSites
.push_back(NewInst
);
431 // Recursively clone any reachable successor blocks.
432 const Instruction
*TI
= BB
->getTerminator();
433 for (const BasicBlock
*Succ
: successors(TI
))
434 ToClone
.push_back(Succ
);
438 CodeInfo
->ContainsCalls
|= hasCalls
;
439 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
440 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
441 BB
!= &BB
->getParent()->front();
445 /// This works like CloneAndPruneFunctionInto, except that it does not clone the
446 /// entire function. Instead it starts at an instruction provided by the caller
447 /// and copies (and prunes) only the code reachable from that instruction.
448 void llvm::CloneAndPruneIntoFromInst(Function
*NewFunc
, const Function
*OldFunc
,
449 const Instruction
*StartingInst
,
450 ValueToValueMapTy
&VMap
,
451 bool ModuleLevelChanges
,
452 SmallVectorImpl
<ReturnInst
*> &Returns
,
453 const char *NameSuffix
,
454 ClonedCodeInfo
*CodeInfo
) {
455 assert(NameSuffix
&& "NameSuffix cannot be null!");
457 ValueMapTypeRemapper
*TypeMapper
= nullptr;
458 ValueMaterializer
*Materializer
= nullptr;
461 // If the cloning starts at the beginning of the function, verify that
462 // the function arguments are mapped.
464 for (const Argument
&II
: OldFunc
->args())
465 assert(VMap
.count(&II
) && "No mapping from source argument specified!");
468 PruningFunctionCloner
PFC(NewFunc
, OldFunc
, VMap
, ModuleLevelChanges
,
469 NameSuffix
, CodeInfo
);
470 const BasicBlock
*StartingBB
;
472 StartingBB
= StartingInst
->getParent();
474 StartingBB
= &OldFunc
->getEntryBlock();
475 StartingInst
= &StartingBB
->front();
478 // Clone the entry block, and anything recursively reachable from it.
479 std::vector
<const BasicBlock
*> CloneWorklist
;
480 PFC
.CloneBlock(StartingBB
, StartingInst
->getIterator(), CloneWorklist
);
481 while (!CloneWorklist
.empty()) {
482 const BasicBlock
*BB
= CloneWorklist
.back();
483 CloneWorklist
.pop_back();
484 PFC
.CloneBlock(BB
, BB
->begin(), CloneWorklist
);
487 // Loop over all of the basic blocks in the old function. If the block was
488 // reachable, we have cloned it and the old block is now in the value map:
489 // insert it into the new function in the right order. If not, ignore it.
491 // Defer PHI resolution until rest of function is resolved.
492 SmallVector
<const PHINode
*, 16> PHIToResolve
;
493 for (const BasicBlock
&BI
: *OldFunc
) {
494 Value
*V
= VMap
.lookup(&BI
);
495 BasicBlock
*NewBB
= cast_or_null
<BasicBlock
>(V
);
496 if (!NewBB
) continue; // Dead block.
498 // Add the new block to the new function.
499 NewFunc
->getBasicBlockList().push_back(NewBB
);
501 // Handle PHI nodes specially, as we have to remove references to dead
503 for (const PHINode
&PN
: BI
.phis()) {
504 // PHI nodes may have been remapped to non-PHI nodes by the caller or
505 // during the cloning process.
506 if (isa
<PHINode
>(VMap
[&PN
]))
507 PHIToResolve
.push_back(&PN
);
512 // Finally, remap the terminator instructions, as those can't be remapped
513 // until all BBs are mapped.
514 RemapInstruction(NewBB
->getTerminator(), VMap
,
515 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
,
516 TypeMapper
, Materializer
);
519 // Defer PHI resolution until rest of function is resolved, PHI resolution
520 // requires the CFG to be up-to-date.
521 for (unsigned phino
= 0, e
= PHIToResolve
.size(); phino
!= e
; ) {
522 const PHINode
*OPN
= PHIToResolve
[phino
];
523 unsigned NumPreds
= OPN
->getNumIncomingValues();
524 const BasicBlock
*OldBB
= OPN
->getParent();
525 BasicBlock
*NewBB
= cast
<BasicBlock
>(VMap
[OldBB
]);
527 // Map operands for blocks that are live and remove operands for blocks
529 for (; phino
!= PHIToResolve
.size() &&
530 PHIToResolve
[phino
]->getParent() == OldBB
; ++phino
) {
531 OPN
= PHIToResolve
[phino
];
532 PHINode
*PN
= cast
<PHINode
>(VMap
[OPN
]);
533 for (unsigned pred
= 0, e
= NumPreds
; pred
!= e
; ++pred
) {
534 Value
*V
= VMap
.lookup(PN
->getIncomingBlock(pred
));
535 if (BasicBlock
*MappedBlock
= cast_or_null
<BasicBlock
>(V
)) {
536 Value
*InVal
= MapValue(PN
->getIncomingValue(pred
),
538 ModuleLevelChanges
? RF_None
: RF_NoModuleLevelChanges
);
539 assert(InVal
&& "Unknown input value?");
540 PN
->setIncomingValue(pred
, InVal
);
541 PN
->setIncomingBlock(pred
, MappedBlock
);
543 PN
->removeIncomingValue(pred
, false);
544 --pred
; // Revisit the next entry.
550 // The loop above has removed PHI entries for those blocks that are dead
551 // and has updated others. However, if a block is live (i.e. copied over)
552 // but its terminator has been changed to not go to this block, then our
553 // phi nodes will have invalid entries. Update the PHI nodes in this
555 PHINode
*PN
= cast
<PHINode
>(NewBB
->begin());
556 NumPreds
= pred_size(NewBB
);
557 if (NumPreds
!= PN
->getNumIncomingValues()) {
558 assert(NumPreds
< PN
->getNumIncomingValues());
559 // Count how many times each predecessor comes to this block.
560 std::map
<BasicBlock
*, unsigned> PredCount
;
561 for (pred_iterator PI
= pred_begin(NewBB
), E
= pred_end(NewBB
);
565 // Figure out how many entries to remove from each PHI.
566 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
567 ++PredCount
[PN
->getIncomingBlock(i
)];
569 // At this point, the excess predecessor entries are positive in the
570 // map. Loop over all of the PHIs and remove excess predecessor
572 BasicBlock::iterator I
= NewBB
->begin();
573 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
) {
574 for (const auto &PCI
: PredCount
) {
575 BasicBlock
*Pred
= PCI
.first
;
576 for (unsigned NumToRemove
= PCI
.second
; NumToRemove
; --NumToRemove
)
577 PN
->removeIncomingValue(Pred
, false);
582 // If the loops above have made these phi nodes have 0 or 1 operand,
583 // replace them with undef or the input value. We must do this for
584 // correctness, because 0-operand phis are not valid.
585 PN
= cast
<PHINode
>(NewBB
->begin());
586 if (PN
->getNumIncomingValues() == 0) {
587 BasicBlock::iterator I
= NewBB
->begin();
588 BasicBlock::const_iterator OldI
= OldBB
->begin();
589 while ((PN
= dyn_cast
<PHINode
>(I
++))) {
590 Value
*NV
= UndefValue::get(PN
->getType());
591 PN
->replaceAllUsesWith(NV
);
592 assert(VMap
[&*OldI
] == PN
&& "VMap mismatch");
594 PN
->eraseFromParent();
600 // Make a second pass over the PHINodes now that all of them have been
601 // remapped into the new function, simplifying the PHINode and performing any
602 // recursive simplifications exposed. This will transparently update the
603 // WeakTrackingVH in the VMap. Notably, we rely on that so that if we coalesce
604 // two PHINodes, the iteration over the old PHIs remains valid, and the
605 // mapping will just map us to the new node (which may not even be a PHI
607 const DataLayout
&DL
= NewFunc
->getParent()->getDataLayout();
608 SmallSetVector
<const Value
*, 8> Worklist
;
609 for (unsigned Idx
= 0, Size
= PHIToResolve
.size(); Idx
!= Size
; ++Idx
)
610 if (isa
<PHINode
>(VMap
[PHIToResolve
[Idx
]]))
611 Worklist
.insert(PHIToResolve
[Idx
]);
613 // Note that we must test the size on each iteration, the worklist can grow.
614 for (unsigned Idx
= 0; Idx
!= Worklist
.size(); ++Idx
) {
615 const Value
*OrigV
= Worklist
[Idx
];
616 auto *I
= dyn_cast_or_null
<Instruction
>(VMap
.lookup(OrigV
));
620 // Skip over non-intrinsic callsites, we don't want to remove any nodes from
622 CallSite CS
= CallSite(I
);
623 if (CS
&& CS
.getCalledFunction() && !CS
.getCalledFunction()->isIntrinsic())
626 // See if this instruction simplifies.
627 Value
*SimpleV
= SimplifyInstruction(I
, DL
);
631 // Stash away all the uses of the old instruction so we can check them for
632 // recursive simplifications after a RAUW. This is cheaper than checking all
633 // uses of To on the recursive step in most cases.
634 for (const User
*U
: OrigV
->users())
635 Worklist
.insert(cast
<Instruction
>(U
));
637 // Replace the instruction with its simplified value.
638 I
->replaceAllUsesWith(SimpleV
);
640 // If the original instruction had no side effects, remove it.
641 if (isInstructionTriviallyDead(I
))
642 I
->eraseFromParent();
647 // Now that the inlined function body has been fully constructed, go through
648 // and zap unconditional fall-through branches. This happens all the time when
649 // specializing code: code specialization turns conditional branches into
650 // uncond branches, and this code folds them.
651 Function::iterator Begin
= cast
<BasicBlock
>(VMap
[StartingBB
])->getIterator();
652 Function::iterator I
= Begin
;
653 while (I
!= NewFunc
->end()) {
654 // We need to simplify conditional branches and switches with a constant
655 // operand. We try to prune these out when cloning, but if the
656 // simplification required looking through PHI nodes, those are only
657 // available after forming the full basic block. That may leave some here,
658 // and we still want to prune the dead code as early as possible.
660 // Do the folding before we check if the block is dead since we want code
663 // br i1 undef, label %bb, label %bb
664 // to be simplified to
667 // before we call I->getSinglePredecessor().
668 ConstantFoldTerminator(&*I
);
670 // Check if this block has become dead during inlining or other
671 // simplifications. Note that the first block will appear dead, as it has
672 // not yet been wired up properly.
673 if (I
!= Begin
&& (pred_begin(&*I
) == pred_end(&*I
) ||
674 I
->getSinglePredecessor() == &*I
)) {
675 BasicBlock
*DeadBB
= &*I
++;
676 DeleteDeadBlock(DeadBB
);
680 BranchInst
*BI
= dyn_cast
<BranchInst
>(I
->getTerminator());
681 if (!BI
|| BI
->isConditional()) { ++I
; continue; }
683 BasicBlock
*Dest
= BI
->getSuccessor(0);
684 if (!Dest
->getSinglePredecessor()) {
688 // We shouldn't be able to get single-entry PHI nodes here, as instsimplify
689 // above should have zapped all of them..
690 assert(!isa
<PHINode
>(Dest
->begin()));
692 // We know all single-entry PHI nodes in the inlined function have been
693 // removed, so we just need to splice the blocks.
694 BI
->eraseFromParent();
696 // Make all PHI nodes that referred to Dest now refer to I as their source.
697 Dest
->replaceAllUsesWith(&*I
);
699 // Move all the instructions in the succ to the pred.
700 I
->getInstList().splice(I
->end(), Dest
->getInstList());
702 // Remove the dest block.
703 Dest
->eraseFromParent();
705 // Do not increment I, iteratively merge all things this block branches to.
708 // Make a final pass over the basic blocks from the old function to gather
709 // any return instructions which survived folding. We have to do this here
710 // because we can iteratively remove and merge returns above.
711 for (Function::iterator I
= cast
<BasicBlock
>(VMap
[StartingBB
])->getIterator(),
714 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(I
->getTerminator()))
715 Returns
.push_back(RI
);
719 /// This works exactly like CloneFunctionInto,
720 /// except that it does some simple constant prop and DCE on the fly. The
721 /// effect of this is to copy significantly less code in cases where (for
722 /// example) a function call with constant arguments is inlined, and those
723 /// constant arguments cause a significant amount of code in the callee to be
724 /// dead. Since this doesn't produce an exact copy of the input, it can't be
725 /// used for things like CloneFunction or CloneModule.
726 void llvm::CloneAndPruneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
727 ValueToValueMapTy
&VMap
,
728 bool ModuleLevelChanges
,
729 SmallVectorImpl
<ReturnInst
*> &Returns
,
730 const char *NameSuffix
,
731 ClonedCodeInfo
*CodeInfo
,
732 Instruction
*TheCall
) {
733 CloneAndPruneIntoFromInst(NewFunc
, OldFunc
, &OldFunc
->front().front(), VMap
,
734 ModuleLevelChanges
, Returns
, NameSuffix
, CodeInfo
);
737 /// Remaps instructions in \p Blocks using the mapping in \p VMap.
738 void llvm::remapInstructionsInBlocks(
739 const SmallVectorImpl
<BasicBlock
*> &Blocks
, ValueToValueMapTy
&VMap
) {
740 // Rewrite the code to refer to itself.
741 for (auto *BB
: Blocks
)
742 for (auto &Inst
: *BB
)
743 RemapInstruction(&Inst
, VMap
,
744 RF_NoModuleLevelChanges
| RF_IgnoreMissingLocals
);
747 /// Clones a loop \p OrigLoop. Returns the loop and the blocks in \p
750 /// Updates LoopInfo and DominatorTree assuming the loop is dominated by block
751 /// \p LoopDomBB. Insert the new blocks before block specified in \p Before.
752 Loop
*llvm::cloneLoopWithPreheader(BasicBlock
*Before
, BasicBlock
*LoopDomBB
,
753 Loop
*OrigLoop
, ValueToValueMapTy
&VMap
,
754 const Twine
&NameSuffix
, LoopInfo
*LI
,
756 SmallVectorImpl
<BasicBlock
*> &Blocks
) {
757 Function
*F
= OrigLoop
->getHeader()->getParent();
758 Loop
*ParentLoop
= OrigLoop
->getParentLoop();
759 DenseMap
<Loop
*, Loop
*> LMap
;
761 Loop
*NewLoop
= LI
->AllocateLoop();
762 LMap
[OrigLoop
] = NewLoop
;
764 ParentLoop
->addChildLoop(NewLoop
);
766 LI
->addTopLevelLoop(NewLoop
);
768 BasicBlock
*OrigPH
= OrigLoop
->getLoopPreheader();
769 assert(OrigPH
&& "No preheader");
770 BasicBlock
*NewPH
= CloneBasicBlock(OrigPH
, VMap
, NameSuffix
, F
);
771 // To rename the loop PHIs.
772 VMap
[OrigPH
] = NewPH
;
773 Blocks
.push_back(NewPH
);
777 ParentLoop
->addBasicBlockToLoop(NewPH
, *LI
);
779 // Update DominatorTree.
780 DT
->addNewBlock(NewPH
, LoopDomBB
);
782 for (Loop
*CurLoop
: OrigLoop
->getLoopsInPreorder()) {
783 Loop
*&NewLoop
= LMap
[CurLoop
];
785 NewLoop
= LI
->AllocateLoop();
787 // Establish the parent/child relationship.
788 Loop
*OrigParent
= CurLoop
->getParentLoop();
789 assert(OrigParent
&& "Could not find the original parent loop");
790 Loop
*NewParentLoop
= LMap
[OrigParent
];
791 assert(NewParentLoop
&& "Could not find the new parent loop");
793 NewParentLoop
->addChildLoop(NewLoop
);
797 for (BasicBlock
*BB
: OrigLoop
->getBlocks()) {
798 Loop
*CurLoop
= LI
->getLoopFor(BB
);
799 Loop
*&NewLoop
= LMap
[CurLoop
];
800 assert(NewLoop
&& "Expecting new loop to be allocated");
802 BasicBlock
*NewBB
= CloneBasicBlock(BB
, VMap
, NameSuffix
, F
);
806 NewLoop
->addBasicBlockToLoop(NewBB
, *LI
);
807 if (BB
== CurLoop
->getHeader())
808 NewLoop
->moveToHeader(NewBB
);
810 // Add DominatorTree node. After seeing all blocks, update to correct
812 DT
->addNewBlock(NewBB
, NewPH
);
814 Blocks
.push_back(NewBB
);
817 for (BasicBlock
*BB
: OrigLoop
->getBlocks()) {
818 // Update DominatorTree.
819 BasicBlock
*IDomBB
= DT
->getNode(BB
)->getIDom()->getBlock();
820 DT
->changeImmediateDominator(cast
<BasicBlock
>(VMap
[BB
]),
821 cast
<BasicBlock
>(VMap
[IDomBB
]));
824 // Move them physically from the end of the block list.
825 F
->getBasicBlockList().splice(Before
->getIterator(), F
->getBasicBlockList(),
827 F
->getBasicBlockList().splice(Before
->getIterator(), F
->getBasicBlockList(),
828 NewLoop
->getHeader()->getIterator(), F
->end());
833 /// Duplicate non-Phi instructions from the beginning of block up to
834 /// StopAt instruction into a split block between BB and its predecessor.
835 BasicBlock
*llvm::DuplicateInstructionsInSplitBetween(
836 BasicBlock
*BB
, BasicBlock
*PredBB
, Instruction
*StopAt
,
837 ValueToValueMapTy
&ValueMapping
, DomTreeUpdater
&DTU
) {
839 assert(count(successors(PredBB
), BB
) == 1 &&
840 "There must be a single edge between PredBB and BB!");
841 // We are going to have to map operands from the original BB block to the new
842 // copy of the block 'NewBB'. If there are PHI nodes in BB, evaluate them to
843 // account for entry from PredBB.
844 BasicBlock::iterator BI
= BB
->begin();
845 for (; PHINode
*PN
= dyn_cast
<PHINode
>(BI
); ++BI
)
846 ValueMapping
[PN
] = PN
->getIncomingValueForBlock(PredBB
);
848 BasicBlock
*NewBB
= SplitEdge(PredBB
, BB
);
849 NewBB
->setName(PredBB
->getName() + ".split");
850 Instruction
*NewTerm
= NewBB
->getTerminator();
852 // FIXME: SplitEdge does not yet take a DTU, so we include the split edge
853 // in the update set here.
854 DTU
.applyUpdates({{DominatorTree::Delete
, PredBB
, BB
},
855 {DominatorTree::Insert
, PredBB
, NewBB
},
856 {DominatorTree::Insert
, NewBB
, BB
}});
858 // Clone the non-phi instructions of BB into NewBB, keeping track of the
859 // mapping and using it to remap operands in the cloned instructions.
860 // Stop once we see the terminator too. This covers the case where BB's
861 // terminator gets replaced and StopAt == BB's terminator.
862 for (; StopAt
!= &*BI
&& BB
->getTerminator() != &*BI
; ++BI
) {
863 Instruction
*New
= BI
->clone();
864 New
->setName(BI
->getName());
865 New
->insertBefore(NewTerm
);
866 ValueMapping
[&*BI
] = New
;
868 // Remap operands to patch up intra-block references.
869 for (unsigned i
= 0, e
= New
->getNumOperands(); i
!= e
; ++i
)
870 if (Instruction
*Inst
= dyn_cast
<Instruction
>(New
->getOperand(i
))) {
871 auto I
= ValueMapping
.find(Inst
);
872 if (I
!= ValueMapping
.end())
873 New
->setOperand(i
, I
->second
);