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/LLVMContext.h"
24 #include "llvm/Support/CFG.h"
25 #include "llvm/Support/Compiler.h"
26 #include "llvm/Transforms/Utils/ValueMapper.h"
27 #include "llvm/Analysis/ConstantFolding.h"
28 #include "llvm/Analysis/DebugInfo.h"
29 #include "llvm/ADT/SmallVector.h"
33 // CloneBasicBlock - See comments in Cloning.h
34 BasicBlock
*llvm::CloneBasicBlock(const BasicBlock
*BB
,
35 DenseMap
<const Value
*, Value
*> &ValueMap
,
36 const char *NameSuffix
, Function
*F
,
37 ClonedCodeInfo
*CodeInfo
) {
38 BasicBlock
*NewBB
= BasicBlock::Create("", F
);
39 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
41 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
43 // Loop over all instructions, and copy them over.
44 for (BasicBlock::const_iterator II
= BB
->begin(), IE
= BB
->end();
46 Instruction
*NewInst
= II
->clone(BB
->getContext());
48 NewInst
->setName(II
->getName()+NameSuffix
);
49 NewBB
->getInstList().push_back(NewInst
);
50 ValueMap
[II
] = NewInst
; // Add instruction map to value.
52 hasCalls
|= (isa
<CallInst
>(II
) && !isa
<DbgInfoIntrinsic
>(II
));
53 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
54 if (isa
<ConstantInt
>(AI
->getArraySize()))
55 hasStaticAllocas
= true;
57 hasDynamicAllocas
= true;
62 CodeInfo
->ContainsCalls
|= hasCalls
;
63 CodeInfo
->ContainsUnwinds
|= isa
<UnwindInst
>(BB
->getTerminator());
64 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
65 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
66 BB
!= &BB
->getParent()->getEntryBlock();
71 // Clone OldFunc into NewFunc, transforming the old arguments into references to
74 void llvm::CloneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
75 DenseMap
<const Value
*, Value
*> &ValueMap
,
76 std::vector
<ReturnInst
*> &Returns
,
77 const char *NameSuffix
, ClonedCodeInfo
*CodeInfo
) {
78 assert(NameSuffix
&& "NameSuffix cannot be null!");
81 for (Function::const_arg_iterator I
= OldFunc
->arg_begin(),
82 E
= OldFunc
->arg_end(); I
!= E
; ++I
)
83 assert(ValueMap
.count(I
) && "No mapping from source argument specified!");
86 // Clone any attributes.
87 if (NewFunc
->arg_size() == OldFunc
->arg_size())
88 NewFunc
->copyAttributesFrom(OldFunc
);
90 //Some arguments were deleted with the ValueMap. Copy arguments one by one
91 for (Function::const_arg_iterator I
= OldFunc
->arg_begin(),
92 E
= OldFunc
->arg_end(); I
!= E
; ++I
)
93 if (Argument
* Anew
= dyn_cast
<Argument
>(ValueMap
[I
]))
94 Anew
->addAttr( OldFunc
->getAttributes()
95 .getParamAttributes(I
->getArgNo() + 1));
96 NewFunc
->setAttributes(NewFunc
->getAttributes()
97 .addAttr(0, OldFunc
->getAttributes()
98 .getRetAttributes()));
99 NewFunc
->setAttributes(NewFunc
->getAttributes()
100 .addAttr(~0, OldFunc
->getAttributes()
101 .getFnAttributes()));
105 // Loop over all of the basic blocks in the function, cloning them as
106 // appropriate. Note that we save BE this way in order to handle cloning of
107 // recursive functions into themselves.
109 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
111 const BasicBlock
&BB
= *BI
;
113 // Create a new basic block and copy instructions into it!
114 BasicBlock
*CBB
= CloneBasicBlock(&BB
, ValueMap
, NameSuffix
, NewFunc
,
116 ValueMap
[&BB
] = CBB
; // Add basic block mapping.
118 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(CBB
->getTerminator()))
119 Returns
.push_back(RI
);
122 // Loop over all of the instructions in the function, fixing up operand
123 // references as we go. This uses ValueMap to do all the hard work.
125 for (Function::iterator BB
= cast
<BasicBlock
>(ValueMap
[OldFunc
->begin()]),
126 BE
= NewFunc
->end(); BB
!= BE
; ++BB
)
127 // Loop over all instructions, fixing each one as we find it...
128 for (BasicBlock::iterator II
= BB
->begin(); II
!= BB
->end(); ++II
)
129 RemapInstruction(II
, ValueMap
);
132 /// CloneFunction - Return a copy of the specified function, but without
133 /// embedding the function into another module. Also, any references specified
134 /// in the ValueMap are changed to refer to their mapped value instead of the
135 /// original one. If any of the arguments to the function are in the ValueMap,
136 /// the arguments are deleted from the resultant function. The ValueMap is
137 /// updated to include mappings from all of the instructions and basicblocks in
138 /// the function from their old to new values.
140 Function
*llvm::CloneFunction(const Function
*F
,
141 DenseMap
<const Value
*, Value
*> &ValueMap
,
142 ClonedCodeInfo
*CodeInfo
) {
143 std::vector
<const Type
*> ArgTypes
;
145 // The user might be deleting arguments to the function by specifying them in
146 // the ValueMap. If so, we need to not add the arguments to the arg ty vector
148 for (Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
150 if (ValueMap
.count(I
) == 0) // Haven't mapped the argument to anything yet?
151 ArgTypes
.push_back(I
->getType());
153 // Create a new function type...
154 FunctionType
*FTy
= FunctionType::get(F
->getFunctionType()->getReturnType(),
155 ArgTypes
, F
->getFunctionType()->isVarArg());
157 // Create the new function...
158 Function
*NewF
= Function::Create(FTy
, F
->getLinkage(), F
->getName());
160 // Loop over the arguments, copying the names of the mapped arguments over...
161 Function::arg_iterator DestI
= NewF
->arg_begin();
162 for (Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
164 if (ValueMap
.count(I
) == 0) { // Is this argument preserved?
165 DestI
->setName(I
->getName()); // Copy the name over...
166 ValueMap
[I
] = DestI
++; // Add mapping to ValueMap
169 std::vector
<ReturnInst
*> Returns
; // Ignore returns cloned...
170 CloneFunctionInto(NewF
, F
, ValueMap
, Returns
, "", CodeInfo
);
177 /// PruningFunctionCloner - This class is a private class used to implement
178 /// the CloneAndPruneFunctionInto method.
179 struct VISIBILITY_HIDDEN PruningFunctionCloner
{
181 const Function
*OldFunc
;
182 DenseMap
<const Value
*, Value
*> &ValueMap
;
183 std::vector
<ReturnInst
*> &Returns
;
184 const char *NameSuffix
;
185 ClonedCodeInfo
*CodeInfo
;
186 const TargetData
*TD
;
189 PruningFunctionCloner(Function
*newFunc
, const Function
*oldFunc
,
190 DenseMap
<const Value
*, Value
*> &valueMap
,
191 std::vector
<ReturnInst
*> &returns
,
192 const char *nameSuffix
,
193 ClonedCodeInfo
*codeInfo
,
194 const TargetData
*td
)
195 : NewFunc(newFunc
), OldFunc(oldFunc
), ValueMap(valueMap
), Returns(returns
),
196 NameSuffix(nameSuffix
), CodeInfo(codeInfo
), TD(td
), DbgFnStart(NULL
) {
199 /// CloneBlock - The specified block is found to be reachable, clone it and
200 /// anything that it can reach.
201 void CloneBlock(const BasicBlock
*BB
,
202 std::vector
<const BasicBlock
*> &ToClone
);
205 /// ConstantFoldMappedInstruction - Constant fold the specified instruction,
206 /// mapping its operands through ValueMap if they are available.
207 Constant
*ConstantFoldMappedInstruction(const Instruction
*I
);
211 /// CloneBlock - The specified block is found to be reachable, clone it and
212 /// anything that it can reach.
213 void PruningFunctionCloner::CloneBlock(const BasicBlock
*BB
,
214 std::vector
<const BasicBlock
*> &ToClone
){
215 Value
*&BBEntry
= ValueMap
[BB
];
217 // Have we already cloned this block?
220 // Nope, clone it now.
222 BBEntry
= NewBB
= BasicBlock::Create();
223 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
225 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
227 // Loop over all instructions, and copy them over, DCE'ing as we go. This
228 // loop doesn't include the terminator.
229 for (BasicBlock::const_iterator II
= BB
->begin(), IE
= --BB
->end();
231 // If this instruction constant folds, don't bother cloning the instruction,
232 // instead, just add the constant to the value map.
233 if (Constant
*C
= ConstantFoldMappedInstruction(II
)) {
238 // Do not clone llvm.dbg.region.end. It will be adjusted by the inliner.
239 if (const DbgFuncStartInst
*DFSI
= dyn_cast
<DbgFuncStartInst
>(II
)) {
240 if (DbgFnStart
== NULL
) {
241 DISubprogram
SP(cast
<GlobalVariable
>(DFSI
->getSubprogram()));
242 if (SP
.describes(BB
->getParent()))
243 DbgFnStart
= DFSI
->getSubprogram();
246 if (const DbgRegionEndInst
*DREIS
= dyn_cast
<DbgRegionEndInst
>(II
)) {
247 if (DREIS
->getContext() == DbgFnStart
)
251 Instruction
*NewInst
= II
->clone(BB
->getContext());
253 NewInst
->setName(II
->getName()+NameSuffix
);
254 NewBB
->getInstList().push_back(NewInst
);
255 ValueMap
[II
] = NewInst
; // Add instruction map to value.
257 hasCalls
|= (isa
<CallInst
>(II
) && !isa
<DbgInfoIntrinsic
>(II
));
258 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
259 if (isa
<ConstantInt
>(AI
->getArraySize()))
260 hasStaticAllocas
= true;
262 hasDynamicAllocas
= true;
266 // Finally, clone over the terminator.
267 const TerminatorInst
*OldTI
= BB
->getTerminator();
268 bool TerminatorDone
= false;
269 if (const BranchInst
*BI
= dyn_cast
<BranchInst
>(OldTI
)) {
270 if (BI
->isConditional()) {
271 // If the condition was a known constant in the callee...
272 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(BI
->getCondition());
273 // Or is a known constant in the caller...
275 Cond
= dyn_cast_or_null
<ConstantInt
>(ValueMap
[BI
->getCondition()]);
277 // Constant fold to uncond branch!
279 BasicBlock
*Dest
= BI
->getSuccessor(!Cond
->getZExtValue());
280 ValueMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
281 ToClone
.push_back(Dest
);
282 TerminatorDone
= true;
285 } else if (const SwitchInst
*SI
= dyn_cast
<SwitchInst
>(OldTI
)) {
286 // If switching on a value known constant in the caller.
287 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(SI
->getCondition());
288 if (Cond
== 0) // Or known constant after constant prop in the callee...
289 Cond
= dyn_cast_or_null
<ConstantInt
>(ValueMap
[SI
->getCondition()]);
290 if (Cond
) { // Constant fold to uncond branch!
291 BasicBlock
*Dest
= SI
->getSuccessor(SI
->findCaseValue(Cond
));
292 ValueMap
[OldTI
] = BranchInst::Create(Dest
, NewBB
);
293 ToClone
.push_back(Dest
);
294 TerminatorDone
= true;
298 if (!TerminatorDone
) {
299 Instruction
*NewInst
= OldTI
->clone(BB
->getContext());
300 if (OldTI
->hasName())
301 NewInst
->setName(OldTI
->getName()+NameSuffix
);
302 NewBB
->getInstList().push_back(NewInst
);
303 ValueMap
[OldTI
] = NewInst
; // Add instruction map to value.
305 // Recursively clone any reachable successor blocks.
306 const TerminatorInst
*TI
= BB
->getTerminator();
307 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
)
308 ToClone
.push_back(TI
->getSuccessor(i
));
312 CodeInfo
->ContainsCalls
|= hasCalls
;
313 CodeInfo
->ContainsUnwinds
|= isa
<UnwindInst
>(OldTI
);
314 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
315 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
316 BB
!= &BB
->getParent()->front();
319 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(NewBB
->getTerminator()))
320 Returns
.push_back(RI
);
323 /// ConstantFoldMappedInstruction - Constant fold the specified instruction,
324 /// mapping its operands through ValueMap if they are available.
325 Constant
*PruningFunctionCloner::
326 ConstantFoldMappedInstruction(const Instruction
*I
) {
327 LLVMContext
&Context
= I
->getContext();
329 SmallVector
<Constant
*, 8> Ops
;
330 for (unsigned i
= 0, e
= I
->getNumOperands(); i
!= e
; ++i
)
331 if (Constant
*Op
= dyn_cast_or_null
<Constant
>(MapValue(I
->getOperand(i
),
336 return 0; // All operands not constant!
338 if (const CmpInst
*CI
= dyn_cast
<CmpInst
>(I
))
339 return ConstantFoldCompareInstOperands(CI
->getPredicate(),
343 if (const LoadInst
*LI
= dyn_cast
<LoadInst
>(I
))
344 if (ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(Ops
[0]))
345 if (!LI
->isVolatile() && CE
->getOpcode() == Instruction::GetElementPtr
)
346 if (GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(CE
->getOperand(0)))
347 if (GV
->isConstant() && GV
->hasDefinitiveInitializer())
348 return ConstantFoldLoadThroughGEPConstantExpr(GV
->getInitializer(),
351 return ConstantFoldInstOperands(I
->getOpcode(), I
->getType(), &Ops
[0],
352 Ops
.size(), Context
, TD
);
355 /// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto,
356 /// except that it does some simple constant prop and DCE on the fly. The
357 /// effect of this is to copy significantly less code in cases where (for
358 /// example) a function call with constant arguments is inlined, and those
359 /// constant arguments cause a significant amount of code in the callee to be
360 /// dead. Since this doesn't produce an exact copy of the input, it can't be
361 /// used for things like CloneFunction or CloneModule.
362 void llvm::CloneAndPruneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
363 DenseMap
<const Value
*, Value
*> &ValueMap
,
364 std::vector
<ReturnInst
*> &Returns
,
365 const char *NameSuffix
,
366 ClonedCodeInfo
*CodeInfo
,
367 const TargetData
*TD
) {
368 assert(NameSuffix
&& "NameSuffix cannot be null!");
369 LLVMContext
&Context
= OldFunc
->getContext();
372 for (Function::const_arg_iterator II
= OldFunc
->arg_begin(),
373 E
= OldFunc
->arg_end(); II
!= E
; ++II
)
374 assert(ValueMap
.count(II
) && "No mapping from source argument specified!");
377 PruningFunctionCloner
PFC(NewFunc
, OldFunc
, ValueMap
, Returns
,
378 NameSuffix
, CodeInfo
, TD
);
380 // Clone the entry block, and anything recursively reachable from it.
381 std::vector
<const BasicBlock
*> CloneWorklist
;
382 CloneWorklist
.push_back(&OldFunc
->getEntryBlock());
383 while (!CloneWorklist
.empty()) {
384 const BasicBlock
*BB
= CloneWorklist
.back();
385 CloneWorklist
.pop_back();
386 PFC
.CloneBlock(BB
, CloneWorklist
);
389 // Loop over all of the basic blocks in the old function. If the block was
390 // reachable, we have cloned it and the old block is now in the value map:
391 // insert it into the new function in the right order. If not, ignore it.
393 // Defer PHI resolution until rest of function is resolved.
394 std::vector
<const PHINode
*> PHIToResolve
;
395 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
397 BasicBlock
*NewBB
= cast_or_null
<BasicBlock
>(ValueMap
[BI
]);
398 if (NewBB
== 0) continue; // Dead block.
400 // Add the new block to the new function.
401 NewFunc
->getBasicBlockList().push_back(NewBB
);
403 // Loop over all of the instructions in the block, fixing up operand
404 // references as we go. This uses ValueMap to do all the hard work.
406 BasicBlock::iterator I
= NewBB
->begin();
408 // Handle PHI nodes specially, as we have to remove references to dead
410 if (PHINode
*PN
= dyn_cast
<PHINode
>(I
)) {
411 // Skip over all PHI nodes, remembering them for later.
412 BasicBlock::const_iterator OldI
= BI
->begin();
413 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
, ++OldI
)
414 PHIToResolve
.push_back(cast
<PHINode
>(OldI
));
417 // Otherwise, remap the rest of the instructions normally.
418 for (; I
!= NewBB
->end(); ++I
)
419 RemapInstruction(I
, ValueMap
);
422 // Defer PHI resolution until rest of function is resolved, PHI resolution
423 // requires the CFG to be up-to-date.
424 for (unsigned phino
= 0, e
= PHIToResolve
.size(); phino
!= e
; ) {
425 const PHINode
*OPN
= PHIToResolve
[phino
];
426 unsigned NumPreds
= OPN
->getNumIncomingValues();
427 const BasicBlock
*OldBB
= OPN
->getParent();
428 BasicBlock
*NewBB
= cast
<BasicBlock
>(ValueMap
[OldBB
]);
430 // Map operands for blocks that are live and remove operands for blocks
432 for (; phino
!= PHIToResolve
.size() &&
433 PHIToResolve
[phino
]->getParent() == OldBB
; ++phino
) {
434 OPN
= PHIToResolve
[phino
];
435 PHINode
*PN
= cast
<PHINode
>(ValueMap
[OPN
]);
436 for (unsigned pred
= 0, e
= NumPreds
; pred
!= e
; ++pred
) {
437 if (BasicBlock
*MappedBlock
=
438 cast_or_null
<BasicBlock
>(ValueMap
[PN
->getIncomingBlock(pred
)])) {
439 Value
*InVal
= MapValue(PN
->getIncomingValue(pred
),
441 assert(InVal
&& "Unknown input value?");
442 PN
->setIncomingValue(pred
, InVal
);
443 PN
->setIncomingBlock(pred
, MappedBlock
);
445 PN
->removeIncomingValue(pred
, false);
446 --pred
, --e
; // Revisit the next entry.
451 // The loop above has removed PHI entries for those blocks that are dead
452 // and has updated others. However, if a block is live (i.e. copied over)
453 // but its terminator has been changed to not go to this block, then our
454 // phi nodes will have invalid entries. Update the PHI nodes in this
456 PHINode
*PN
= cast
<PHINode
>(NewBB
->begin());
457 NumPreds
= std::distance(pred_begin(NewBB
), pred_end(NewBB
));
458 if (NumPreds
!= PN
->getNumIncomingValues()) {
459 assert(NumPreds
< PN
->getNumIncomingValues());
460 // Count how many times each predecessor comes to this block.
461 std::map
<BasicBlock
*, unsigned> PredCount
;
462 for (pred_iterator PI
= pred_begin(NewBB
), E
= pred_end(NewBB
);
466 // Figure out how many entries to remove from each PHI.
467 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
468 ++PredCount
[PN
->getIncomingBlock(i
)];
470 // At this point, the excess predecessor entries are positive in the
471 // map. Loop over all of the PHIs and remove excess predecessor
473 BasicBlock::iterator I
= NewBB
->begin();
474 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
) {
475 for (std::map
<BasicBlock
*, unsigned>::iterator PCI
=PredCount
.begin(),
476 E
= PredCount
.end(); PCI
!= E
; ++PCI
) {
477 BasicBlock
*Pred
= PCI
->first
;
478 for (unsigned NumToRemove
= PCI
->second
; NumToRemove
; --NumToRemove
)
479 PN
->removeIncomingValue(Pred
, false);
484 // If the loops above have made these phi nodes have 0 or 1 operand,
485 // replace them with undef or the input value. We must do this for
486 // correctness, because 0-operand phis are not valid.
487 PN
= cast
<PHINode
>(NewBB
->begin());
488 if (PN
->getNumIncomingValues() == 0) {
489 BasicBlock::iterator I
= NewBB
->begin();
490 BasicBlock::const_iterator OldI
= OldBB
->begin();
491 while ((PN
= dyn_cast
<PHINode
>(I
++))) {
492 Value
*NV
= UndefValue::get(PN
->getType());
493 PN
->replaceAllUsesWith(NV
);
494 assert(ValueMap
[OldI
] == PN
&& "ValueMap mismatch");
496 PN
->eraseFromParent();
500 // NOTE: We cannot eliminate single entry phi nodes here, because of
501 // ValueMap. Single entry phi nodes can have multiple ValueMap entries
502 // pointing at them. Thus, deleting one would require scanning the ValueMap
503 // to update any entries in it that would require that. This would be
507 // Now that the inlined function body has been fully constructed, go through
508 // and zap unconditional fall-through branches. This happen all the time when
509 // specializing code: code specialization turns conditional branches into
510 // uncond branches, and this code folds them.
511 Function::iterator I
= cast
<BasicBlock
>(ValueMap
[&OldFunc
->getEntryBlock()]);
512 while (I
!= NewFunc
->end()) {
513 BranchInst
*BI
= dyn_cast
<BranchInst
>(I
->getTerminator());
514 if (!BI
|| BI
->isConditional()) { ++I
; continue; }
516 // Note that we can't eliminate uncond branches if the destination has
517 // single-entry PHI nodes. Eliminating the single-entry phi nodes would
518 // require scanning the ValueMap to update any entries that point to the phi
520 BasicBlock
*Dest
= BI
->getSuccessor(0);
521 if (!Dest
->getSinglePredecessor() || isa
<PHINode
>(Dest
->begin())) {
525 // We know all single-entry PHI nodes in the inlined function have been
526 // removed, so we just need to splice the blocks.
527 BI
->eraseFromParent();
529 // Move all the instructions in the succ to the pred.
530 I
->getInstList().splice(I
->end(), Dest
->getInstList());
532 // Make all PHI nodes that referred to Dest now refer to I as their source.
533 Dest
->replaceAllUsesWith(I
);
535 // Remove the dest block.
536 Dest
->eraseFromParent();
538 // Do not increment I, iteratively merge all things this block branches to.