1 //===- CloneFunction.cpp - Clone a function into another function ---------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the CloneFunctionInto interface, which is used as the
11 // low-level function cloner. This is used by the CloneFunction and function
12 // inliner to do the dirty work of copying the body of a function around.
14 //===----------------------------------------------------------------------===//
16 #include "llvm/Transforms/Utils/Cloning.h"
17 #include "llvm/Constants.h"
18 #include "llvm/DerivedTypes.h"
19 #include "llvm/Instructions.h"
20 #include "llvm/IntrinsicInst.h"
21 #include "llvm/GlobalVariable.h"
22 #include "llvm/Function.h"
23 #include "llvm/Support/CFG.h"
24 #include "llvm/Support/Compiler.h"
25 #include "llvm/Transforms/Utils/ValueMapper.h"
26 #include "llvm/Analysis/ConstantFolding.h"
27 #include "llvm/Analysis/DebugInfo.h"
28 #include "llvm/ADT/SmallVector.h"
32 // CloneBasicBlock - See comments in Cloning.h
33 BasicBlock
*llvm::CloneBasicBlock(const BasicBlock
*BB
,
34 DenseMap
<const Value
*, Value
*> &ValueMap
,
35 const char *NameSuffix
, Function
*F
,
36 ClonedCodeInfo
*CodeInfo
) {
37 BasicBlock
*NewBB
= BasicBlock::Create("", F
);
38 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
40 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
42 // Loop over all instructions, and copy them over.
43 for (BasicBlock::const_iterator II
= BB
->begin(), IE
= BB
->end();
45 Instruction
*NewInst
= II
->clone();
47 NewInst
->setName(II
->getName()+NameSuffix
);
48 NewBB
->getInstList().push_back(NewInst
);
49 ValueMap
[II
] = NewInst
; // Add instruction map to value.
51 hasCalls
|= (isa
<CallInst
>(II
) && !isa
<DbgInfoIntrinsic
>(II
));
52 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
53 if (isa
<ConstantInt
>(AI
->getArraySize()))
54 hasStaticAllocas
= true;
56 hasDynamicAllocas
= true;
61 CodeInfo
->ContainsCalls
|= hasCalls
;
62 CodeInfo
->ContainsUnwinds
|= isa
<UnwindInst
>(BB
->getTerminator());
63 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
64 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
65 BB
!= &BB
->getParent()->getEntryBlock();
70 // Clone OldFunc into NewFunc, transforming the old arguments into references to
73 void llvm::CloneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
74 DenseMap
<const Value
*, Value
*> &ValueMap
,
75 std::vector
<ReturnInst
*> &Returns
,
76 const char *NameSuffix
, ClonedCodeInfo
*CodeInfo
) {
77 assert(NameSuffix
&& "NameSuffix cannot be null!");
80 for (Function::const_arg_iterator I
= OldFunc
->arg_begin(),
81 E
= OldFunc
->arg_end(); I
!= E
; ++I
)
82 assert(ValueMap
.count(I
) && "No mapping from source argument specified!");
85 // Clone any attributes.
86 if (NewFunc
->arg_size() == OldFunc
->arg_size())
87 NewFunc
->copyAttributesFrom(OldFunc
);
89 //Some arguments were deleted with the ValueMap. Copy arguments one by one
90 for (Function::const_arg_iterator I
= OldFunc
->arg_begin(),
91 E
= OldFunc
->arg_end(); I
!= E
; ++I
)
92 if (Argument
* Anew
= dyn_cast
<Argument
>(ValueMap
[I
]))
93 Anew
->addAttr( OldFunc
->getAttributes()
94 .getParamAttributes(I
->getArgNo() + 1));
95 NewFunc
->setAttributes(NewFunc
->getAttributes()
96 .addAttr(0, OldFunc
->getAttributes()
97 .getRetAttributes()));
98 NewFunc
->setAttributes(NewFunc
->getAttributes()
99 .addAttr(~0, OldFunc
->getAttributes()
100 .getFnAttributes()));
104 // Loop over all of the basic blocks in the function, cloning them as
105 // appropriate. Note that we save BE this way in order to handle cloning of
106 // recursive functions into themselves.
108 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
110 const BasicBlock
&BB
= *BI
;
112 // Create a new basic block and copy instructions into it!
113 BasicBlock
*CBB
= CloneBasicBlock(&BB
, ValueMap
, NameSuffix
, NewFunc
,
115 ValueMap
[&BB
] = CBB
; // Add basic block mapping.
117 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(CBB
->getTerminator()))
118 Returns
.push_back(RI
);
121 // Loop over all of the instructions in the function, fixing up operand
122 // references as we go. This uses ValueMap to do all the hard work.
124 for (Function::iterator BB
= cast
<BasicBlock
>(ValueMap
[OldFunc
->begin()]),
125 BE
= NewFunc
->end(); BB
!= BE
; ++BB
)
126 // Loop over all instructions, fixing each one as we find it...
127 for (BasicBlock::iterator II
= BB
->begin(); II
!= BB
->end(); ++II
)
128 RemapInstruction(II
, ValueMap
);
131 /// CloneFunction - Return a copy of the specified function, but without
132 /// embedding the function into another module. Also, any references specified
133 /// in the ValueMap are changed to refer to their mapped value instead of the
134 /// original one. If any of the arguments to the function are in the ValueMap,
135 /// the arguments are deleted from the resultant function. The ValueMap is
136 /// updated to include mappings from all of the instructions and basicblocks in
137 /// the function from their old to new values.
139 Function
*llvm::CloneFunction(const Function
*F
,
140 DenseMap
<const Value
*, Value
*> &ValueMap
,
141 ClonedCodeInfo
*CodeInfo
) {
142 std::vector
<const Type
*> ArgTypes
;
144 // The user might be deleting arguments to the function by specifying them in
145 // the ValueMap. If so, we need to not add the arguments to the arg ty vector
147 for (Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
149 if (ValueMap
.count(I
) == 0) // Haven't mapped the argument to anything yet?
150 ArgTypes
.push_back(I
->getType());
152 // Create a new function type...
153 FunctionType
*FTy
= FunctionType::get(F
->getFunctionType()->getReturnType(),
154 ArgTypes
, F
->getFunctionType()->isVarArg());
156 // Create the new function...
157 Function
*NewF
= Function::Create(FTy
, F
->getLinkage(), F
->getName());
159 // Loop over the arguments, copying the names of the mapped arguments over...
160 Function::arg_iterator DestI
= NewF
->arg_begin();
161 for (Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
163 if (ValueMap
.count(I
) == 0) { // Is this argument preserved?
164 DestI
->setName(I
->getName()); // Copy the name over...
165 ValueMap
[I
] = DestI
++; // Add mapping to ValueMap
168 std::vector
<ReturnInst
*> Returns
; // Ignore returns cloned...
169 CloneFunctionInto(NewF
, F
, ValueMap
, Returns
, "", CodeInfo
);
176 /// PruningFunctionCloner - This class is a private class used to implement
177 /// the CloneAndPruneFunctionInto method.
178 struct VISIBILITY_HIDDEN PruningFunctionCloner
{
180 const Function
*OldFunc
;
181 DenseMap
<const Value
*, Value
*> &ValueMap
;
182 std::vector
<ReturnInst
*> &Returns
;
183 const char *NameSuffix
;
184 ClonedCodeInfo
*CodeInfo
;
185 const TargetData
*TD
;
188 PruningFunctionCloner(Function
*newFunc
, const Function
*oldFunc
,
189 DenseMap
<const Value
*, Value
*> &valueMap
,
190 std::vector
<ReturnInst
*> &returns
,
191 const char *nameSuffix
,
192 ClonedCodeInfo
*codeInfo
,
193 const TargetData
*td
)
194 : NewFunc(newFunc
), OldFunc(oldFunc
), ValueMap(valueMap
), Returns(returns
),
195 NameSuffix(nameSuffix
), CodeInfo(codeInfo
), TD(td
), DbgFnStart(NULL
) {
198 /// CloneBlock - The specified block is found to be reachable, clone it and
199 /// anything that it can reach.
200 void CloneBlock(const BasicBlock
*BB
,
201 std::vector
<const BasicBlock
*> &ToClone
);
204 /// ConstantFoldMappedInstruction - Constant fold the specified instruction,
205 /// mapping its operands through ValueMap if they are available.
206 Constant
*ConstantFoldMappedInstruction(const Instruction
*I
);
210 /// CloneBlock - The specified block is found to be reachable, clone it and
211 /// anything that it can reach.
212 void PruningFunctionCloner::CloneBlock(const BasicBlock
*BB
,
213 std::vector
<const BasicBlock
*> &ToClone
){
214 Value
*&BBEntry
= ValueMap
[BB
];
216 // Have we already cloned this block?
219 // Nope, clone it now.
221 BBEntry
= NewBB
= BasicBlock::Create();
222 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
224 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
226 // Loop over all instructions, and copy them over, DCE'ing as we go. This
227 // loop doesn't include the terminator.
228 for (BasicBlock::const_iterator II
= BB
->begin(), IE
= --BB
->end();
230 // If this instruction constant folds, don't bother cloning the instruction,
231 // instead, just add the constant to the value map.
232 if (Constant
*C
= ConstantFoldMappedInstruction(II
)) {
237 // Do not clone llvm.dbg.region.end. It will be adjusted by the inliner.
238 if (const DbgFuncStartInst
*DFSI
= dyn_cast
<DbgFuncStartInst
>(II
)) {
239 if (DbgFnStart
== NULL
) {
240 DISubprogram
SP(cast
<GlobalVariable
>(DFSI
->getSubprogram()));
241 if (SP
.describes(BB
->getParent()))
242 DbgFnStart
= DFSI
->getSubprogram();
245 if (const DbgRegionEndInst
*DREIS
= dyn_cast
<DbgRegionEndInst
>(II
)) {
246 if (DREIS
->getContext() == DbgFnStart
)
250 Instruction
*NewInst
= II
->clone();
252 NewInst
->setName(II
->getName()+NameSuffix
);
253 NewBB
->getInstList().push_back(NewInst
);
254 ValueMap
[II
] = NewInst
; // Add instruction map to value.
256 hasCalls
|= (isa
<CallInst
>(II
) && !isa
<DbgInfoIntrinsic
>(II
));
257 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
258 if (isa
<ConstantInt
>(AI
->getArraySize()))
259 hasStaticAllocas
= true;
261 hasDynamicAllocas
= true;
265 // Finally, clone over the terminator.
266 const TerminatorInst
*OldTI
= BB
->getTerminator();
267 bool TerminatorDone
= false;
268 if (const BranchInst
*BI
= dyn_cast
<BranchInst
>(OldTI
)) {
269 if (BI
->isConditional()) {
270 // If the condition was a known constant in the callee...
271 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(BI
->getCondition());
272 // Or is a known constant in the caller...
274 Cond
= dyn_cast_or_null
<ConstantInt
>(ValueMap
[BI
->getCondition()]);
276 // Constant fold to uncond branch!
278 BasicBlock
*Dest
= BI
->getSuccessor(!Cond
->getZExtValue());
279 ValueMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
280 ToClone
.push_back(Dest
);
281 TerminatorDone
= true;
284 } else if (const SwitchInst
*SI
= dyn_cast
<SwitchInst
>(OldTI
)) {
285 // If switching on a value known constant in the caller.
286 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(SI
->getCondition());
287 if (Cond
== 0) // Or known constant after constant prop in the callee...
288 Cond
= dyn_cast_or_null
<ConstantInt
>(ValueMap
[SI
->getCondition()]);
289 if (Cond
) { // Constant fold to uncond branch!
290 BasicBlock
*Dest
= SI
->getSuccessor(SI
->findCaseValue(Cond
));
291 ValueMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
292 ToClone
.push_back(Dest
);
293 TerminatorDone
= true;
297 if (!TerminatorDone
) {
298 Instruction
*NewInst
= OldTI
->clone();
299 if (OldTI
->hasName())
300 NewInst
->setName(OldTI
->getName()+NameSuffix
);
301 NewBB
->getInstList().push_back(NewInst
);
302 ValueMap
[OldTI
] = NewInst
; // Add instruction map to value.
304 // Recursively clone any reachable successor blocks.
305 const TerminatorInst
*TI
= BB
->getTerminator();
306 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
)
307 ToClone
.push_back(TI
->getSuccessor(i
));
311 CodeInfo
->ContainsCalls
|= hasCalls
;
312 CodeInfo
->ContainsUnwinds
|= isa
<UnwindInst
>(OldTI
);
313 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
314 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
315 BB
!= &BB
->getParent()->front();
318 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(NewBB
->getTerminator()))
319 Returns
.push_back(RI
);
322 /// ConstantFoldMappedInstruction - Constant fold the specified instruction,
323 /// mapping its operands through ValueMap if they are available.
324 Constant
*PruningFunctionCloner::
325 ConstantFoldMappedInstruction(const Instruction
*I
) {
326 SmallVector
<Constant
*, 8> Ops
;
327 for (unsigned i
= 0, e
= I
->getNumOperands(); i
!= e
; ++i
)
328 if (Constant
*Op
= dyn_cast_or_null
<Constant
>(MapValue(I
->getOperand(i
),
332 return 0; // All operands not constant!
334 if (const CmpInst
*CI
= dyn_cast
<CmpInst
>(I
))
335 return ConstantFoldCompareInstOperands(CI
->getPredicate(),
336 &Ops
[0], Ops
.size(), TD
);
338 if (const LoadInst
*LI
= dyn_cast
<LoadInst
>(I
))
339 if (ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(Ops
[0]))
340 if (!LI
->isVolatile() && CE
->getOpcode() == Instruction::GetElementPtr
)
341 if (GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(CE
->getOperand(0)))
342 if (GV
->isConstant() && GV
->hasDefinitiveInitializer())
343 return ConstantFoldLoadThroughGEPConstantExpr(GV
->getInitializer(),
346 return ConstantFoldInstOperands(I
->getOpcode(), I
->getType(), &Ops
[0],
350 /// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto,
351 /// except that it does some simple constant prop and DCE on the fly. The
352 /// effect of this is to copy significantly less code in cases where (for
353 /// example) a function call with constant arguments is inlined, and those
354 /// constant arguments cause a significant amount of code in the callee to be
355 /// dead. Since this doesn't produce an exact copy of the input, it can't be
356 /// used for things like CloneFunction or CloneModule.
357 void llvm::CloneAndPruneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
358 DenseMap
<const Value
*, Value
*> &ValueMap
,
359 std::vector
<ReturnInst
*> &Returns
,
360 const char *NameSuffix
,
361 ClonedCodeInfo
*CodeInfo
,
362 const TargetData
*TD
) {
363 assert(NameSuffix
&& "NameSuffix cannot be null!");
366 for (Function::const_arg_iterator II
= OldFunc
->arg_begin(),
367 E
= OldFunc
->arg_end(); II
!= E
; ++II
)
368 assert(ValueMap
.count(II
) && "No mapping from source argument specified!");
371 PruningFunctionCloner
PFC(NewFunc
, OldFunc
, ValueMap
, Returns
,
372 NameSuffix
, CodeInfo
, TD
);
374 // Clone the entry block, and anything recursively reachable from it.
375 std::vector
<const BasicBlock
*> CloneWorklist
;
376 CloneWorklist
.push_back(&OldFunc
->getEntryBlock());
377 while (!CloneWorklist
.empty()) {
378 const BasicBlock
*BB
= CloneWorklist
.back();
379 CloneWorklist
.pop_back();
380 PFC
.CloneBlock(BB
, CloneWorklist
);
383 // Loop over all of the basic blocks in the old function. If the block was
384 // reachable, we have cloned it and the old block is now in the value map:
385 // insert it into the new function in the right order. If not, ignore it.
387 // Defer PHI resolution until rest of function is resolved.
388 std::vector
<const PHINode
*> PHIToResolve
;
389 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
391 BasicBlock
*NewBB
= cast_or_null
<BasicBlock
>(ValueMap
[BI
]);
392 if (NewBB
== 0) continue; // Dead block.
394 // Add the new block to the new function.
395 NewFunc
->getBasicBlockList().push_back(NewBB
);
397 // Loop over all of the instructions in the block, fixing up operand
398 // references as we go. This uses ValueMap to do all the hard work.
400 BasicBlock::iterator I
= NewBB
->begin();
402 // Handle PHI nodes specially, as we have to remove references to dead
404 if (PHINode
*PN
= dyn_cast
<PHINode
>(I
)) {
405 // Skip over all PHI nodes, remembering them for later.
406 BasicBlock::const_iterator OldI
= BI
->begin();
407 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
, ++OldI
)
408 PHIToResolve
.push_back(cast
<PHINode
>(OldI
));
411 // Otherwise, remap the rest of the instructions normally.
412 for (; I
!= NewBB
->end(); ++I
)
413 RemapInstruction(I
, ValueMap
);
416 // Defer PHI resolution until rest of function is resolved, PHI resolution
417 // requires the CFG to be up-to-date.
418 for (unsigned phino
= 0, e
= PHIToResolve
.size(); phino
!= e
; ) {
419 const PHINode
*OPN
= PHIToResolve
[phino
];
420 unsigned NumPreds
= OPN
->getNumIncomingValues();
421 const BasicBlock
*OldBB
= OPN
->getParent();
422 BasicBlock
*NewBB
= cast
<BasicBlock
>(ValueMap
[OldBB
]);
424 // Map operands for blocks that are live and remove operands for blocks
426 for (; phino
!= PHIToResolve
.size() &&
427 PHIToResolve
[phino
]->getParent() == OldBB
; ++phino
) {
428 OPN
= PHIToResolve
[phino
];
429 PHINode
*PN
= cast
<PHINode
>(ValueMap
[OPN
]);
430 for (unsigned pred
= 0, e
= NumPreds
; pred
!= e
; ++pred
) {
431 if (BasicBlock
*MappedBlock
=
432 cast_or_null
<BasicBlock
>(ValueMap
[PN
->getIncomingBlock(pred
)])) {
433 Value
*InVal
= MapValue(PN
->getIncomingValue(pred
), ValueMap
);
434 assert(InVal
&& "Unknown input value?");
435 PN
->setIncomingValue(pred
, InVal
);
436 PN
->setIncomingBlock(pred
, MappedBlock
);
438 PN
->removeIncomingValue(pred
, false);
439 --pred
, --e
; // Revisit the next entry.
444 // The loop above has removed PHI entries for those blocks that are dead
445 // and has updated others. However, if a block is live (i.e. copied over)
446 // but its terminator has been changed to not go to this block, then our
447 // phi nodes will have invalid entries. Update the PHI nodes in this
449 PHINode
*PN
= cast
<PHINode
>(NewBB
->begin());
450 NumPreds
= std::distance(pred_begin(NewBB
), pred_end(NewBB
));
451 if (NumPreds
!= PN
->getNumIncomingValues()) {
452 assert(NumPreds
< PN
->getNumIncomingValues());
453 // Count how many times each predecessor comes to this block.
454 std::map
<BasicBlock
*, unsigned> PredCount
;
455 for (pred_iterator PI
= pred_begin(NewBB
), E
= pred_end(NewBB
);
459 // Figure out how many entries to remove from each PHI.
460 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
461 ++PredCount
[PN
->getIncomingBlock(i
)];
463 // At this point, the excess predecessor entries are positive in the
464 // map. Loop over all of the PHIs and remove excess predecessor
466 BasicBlock::iterator I
= NewBB
->begin();
467 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
) {
468 for (std::map
<BasicBlock
*, unsigned>::iterator PCI
=PredCount
.begin(),
469 E
= PredCount
.end(); PCI
!= E
; ++PCI
) {
470 BasicBlock
*Pred
= PCI
->first
;
471 for (unsigned NumToRemove
= PCI
->second
; NumToRemove
; --NumToRemove
)
472 PN
->removeIncomingValue(Pred
, false);
477 // If the loops above have made these phi nodes have 0 or 1 operand,
478 // replace them with undef or the input value. We must do this for
479 // correctness, because 0-operand phis are not valid.
480 PN
= cast
<PHINode
>(NewBB
->begin());
481 if (PN
->getNumIncomingValues() == 0) {
482 BasicBlock::iterator I
= NewBB
->begin();
483 BasicBlock::const_iterator OldI
= OldBB
->begin();
484 while ((PN
= dyn_cast
<PHINode
>(I
++))) {
485 Value
*NV
= UndefValue::get(PN
->getType());
486 PN
->replaceAllUsesWith(NV
);
487 assert(ValueMap
[OldI
] == PN
&& "ValueMap mismatch");
489 PN
->eraseFromParent();
493 // NOTE: We cannot eliminate single entry phi nodes here, because of
494 // ValueMap. Single entry phi nodes can have multiple ValueMap entries
495 // pointing at them. Thus, deleting one would require scanning the ValueMap
496 // to update any entries in it that would require that. This would be
500 // Now that the inlined function body has been fully constructed, go through
501 // and zap unconditional fall-through branches. This happen all the time when
502 // specializing code: code specialization turns conditional branches into
503 // uncond branches, and this code folds them.
504 Function::iterator I
= cast
<BasicBlock
>(ValueMap
[&OldFunc
->getEntryBlock()]);
505 while (I
!= NewFunc
->end()) {
506 BranchInst
*BI
= dyn_cast
<BranchInst
>(I
->getTerminator());
507 if (!BI
|| BI
->isConditional()) { ++I
; continue; }
509 // Note that we can't eliminate uncond branches if the destination has
510 // single-entry PHI nodes. Eliminating the single-entry phi nodes would
511 // require scanning the ValueMap to update any entries that point to the phi
513 BasicBlock
*Dest
= BI
->getSuccessor(0);
514 if (!Dest
->getSinglePredecessor() || isa
<PHINode
>(Dest
->begin())) {
518 // We know all single-entry PHI nodes in the inlined function have been
519 // removed, so we just need to splice the blocks.
520 BI
->eraseFromParent();
522 // Move all the instructions in the succ to the pred.
523 I
->getInstList().splice(I
->end(), Dest
->getInstList());
525 // Make all PHI nodes that referred to Dest now refer to I as their source.
526 Dest
->replaceAllUsesWith(I
);
528 // Remove the dest block.
529 Dest
->eraseFromParent();
531 // Do not increment I, iteratively merge all things this block branches to.