1 //===- CloneFunction.cpp - Clone a function into another function ---------===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source 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/Function.h"
21 #include "llvm/Support/CFG.h"
22 #include "ValueMapper.h"
23 #include "llvm/Transforms/Utils/Local.h"
26 // CloneBasicBlock - See comments in Cloning.h
27 BasicBlock
*llvm::CloneBasicBlock(const BasicBlock
*BB
,
28 std::map
<const Value
*, Value
*> &ValueMap
,
29 const char *NameSuffix
, Function
*F
,
30 ClonedCodeInfo
*CodeInfo
) {
31 BasicBlock
*NewBB
= new BasicBlock("", F
);
32 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
34 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
36 // Loop over all instructions, and copy them over.
37 for (BasicBlock::const_iterator II
= BB
->begin(), IE
= BB
->end();
39 Instruction
*NewInst
= II
->clone();
41 NewInst
->setName(II
->getName()+NameSuffix
);
42 NewBB
->getInstList().push_back(NewInst
);
43 ValueMap
[II
] = NewInst
; // Add instruction map to value.
45 hasCalls
|= isa
<CallInst
>(II
);
46 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
47 if (isa
<ConstantInt
>(AI
->getArraySize()))
48 hasStaticAllocas
= true;
50 hasDynamicAllocas
= true;
55 CodeInfo
->ContainsCalls
|= hasCalls
;
56 CodeInfo
->ContainsUnwinds
|= isa
<UnwindInst
>(BB
->getTerminator());
57 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
58 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
59 BB
!= &BB
->getParent()->front();
64 // Clone OldFunc into NewFunc, transforming the old arguments into references to
67 void llvm::CloneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
68 std::map
<const Value
*, Value
*> &ValueMap
,
69 std::vector
<ReturnInst
*> &Returns
,
70 const char *NameSuffix
, ClonedCodeInfo
*CodeInfo
) {
71 assert(NameSuffix
&& "NameSuffix cannot be null!");
74 for (Function::const_arg_iterator I
= OldFunc
->arg_begin(),
75 E
= OldFunc
->arg_end(); I
!= E
; ++I
)
76 assert(ValueMap
.count(I
) && "No mapping from source argument specified!");
79 // Loop over all of the basic blocks in the function, cloning them as
80 // appropriate. Note that we save BE this way in order to handle cloning of
81 // recursive functions into themselves.
83 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
85 const BasicBlock
&BB
= *BI
;
87 // Create a new basic block and copy instructions into it!
88 BasicBlock
*CBB
= CloneBasicBlock(&BB
, ValueMap
, NameSuffix
, NewFunc
,
90 ValueMap
[&BB
] = CBB
; // Add basic block mapping.
92 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(CBB
->getTerminator()))
93 Returns
.push_back(RI
);
96 // Loop over all of the instructions in the function, fixing up operand
97 // references as we go. This uses ValueMap to do all the hard work.
99 for (Function::iterator BB
= cast
<BasicBlock
>(ValueMap
[OldFunc
->begin()]),
100 BE
= NewFunc
->end(); BB
!= BE
; ++BB
)
101 // Loop over all instructions, fixing each one as we find it...
102 for (BasicBlock::iterator II
= BB
->begin(); II
!= BB
->end(); ++II
)
103 RemapInstruction(II
, ValueMap
);
106 /// CloneFunction - Return a copy of the specified function, but without
107 /// embedding the function into another module. Also, any references specified
108 /// in the ValueMap are changed to refer to their mapped value instead of the
109 /// original one. If any of the arguments to the function are in the ValueMap,
110 /// the arguments are deleted from the resultant function. The ValueMap is
111 /// updated to include mappings from all of the instructions and basicblocks in
112 /// the function from their old to new values.
114 Function
*llvm::CloneFunction(const Function
*F
,
115 std::map
<const Value
*, Value
*> &ValueMap
,
116 ClonedCodeInfo
*CodeInfo
) {
117 std::vector
<const Type
*> ArgTypes
;
119 // The user might be deleting arguments to the function by specifying them in
120 // the ValueMap. If so, we need to not add the arguments to the arg ty vector
122 for (Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
124 if (ValueMap
.count(I
) == 0) // Haven't mapped the argument to anything yet?
125 ArgTypes
.push_back(I
->getType());
127 // Create a new function type...
128 FunctionType
*FTy
= FunctionType::get(F
->getFunctionType()->getReturnType(),
129 ArgTypes
, F
->getFunctionType()->isVarArg());
131 // Create the new function...
132 Function
*NewF
= new Function(FTy
, F
->getLinkage(), F
->getName());
134 // Loop over the arguments, copying the names of the mapped arguments over...
135 Function::arg_iterator DestI
= NewF
->arg_begin();
136 for (Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
138 if (ValueMap
.count(I
) == 0) { // Is this argument preserved?
139 DestI
->setName(I
->getName()); // Copy the name over...
140 ValueMap
[I
] = DestI
++; // Add mapping to ValueMap
143 std::vector
<ReturnInst
*> Returns
; // Ignore returns cloned...
144 CloneFunctionInto(NewF
, F
, ValueMap
, Returns
, "", CodeInfo
);
151 /// PruningFunctionCloner - This class is a private class used to implement
152 /// the CloneAndPruneFunctionInto method.
153 struct PruningFunctionCloner
{
155 const Function
*OldFunc
;
156 std::map
<const Value
*, Value
*> &ValueMap
;
157 std::vector
<ReturnInst
*> &Returns
;
158 const char *NameSuffix
;
159 ClonedCodeInfo
*CodeInfo
;
162 PruningFunctionCloner(Function
*newFunc
, const Function
*oldFunc
,
163 std::map
<const Value
*, Value
*> &valueMap
,
164 std::vector
<ReturnInst
*> &returns
,
165 const char *nameSuffix
,
166 ClonedCodeInfo
*codeInfo
)
167 : NewFunc(newFunc
), OldFunc(oldFunc
), ValueMap(valueMap
), Returns(returns
),
168 NameSuffix(nameSuffix
), CodeInfo(codeInfo
) {
171 /// CloneBlock - The specified block is found to be reachable, clone it and
172 /// anything that it can reach.
173 void CloneBlock(const BasicBlock
*BB
);
176 /// ConstantFoldMappedInstruction - Constant fold the specified instruction,
177 /// mapping its operands through ValueMap if they are available.
178 Constant
*ConstantFoldMappedInstruction(const Instruction
*I
);
182 /// CloneBlock - The specified block is found to be reachable, clone it and
183 /// anything that it can reach.
184 void PruningFunctionCloner::CloneBlock(const BasicBlock
*BB
) {
185 Value
*&BBEntry
= ValueMap
[BB
];
187 // Have we already cloned this block?
190 // Nope, clone it now.
192 BBEntry
= NewBB
= new BasicBlock();
193 if (BB
->hasName()) NewBB
->setName(BB
->getName()+NameSuffix
);
195 bool hasCalls
= false, hasDynamicAllocas
= false, hasStaticAllocas
= false;
197 // Loop over all instructions, and copy them over, DCE'ing as we go. This
198 // loop doesn't include the terminator.
199 for (BasicBlock::const_iterator II
= BB
->begin(), IE
= --BB
->end();
201 // If this instruction constant folds, don't bother cloning the instruction,
202 // instead, just add the constant to the value map.
203 if (Constant
*C
= ConstantFoldMappedInstruction(II
)) {
208 Instruction
*NewInst
= II
->clone();
210 NewInst
->setName(II
->getName()+NameSuffix
);
211 NewBB
->getInstList().push_back(NewInst
);
212 ValueMap
[II
] = NewInst
; // Add instruction map to value.
214 hasCalls
|= isa
<CallInst
>(II
);
215 if (const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(II
)) {
216 if (isa
<ConstantInt
>(AI
->getArraySize()))
217 hasStaticAllocas
= true;
219 hasDynamicAllocas
= true;
223 // Finally, clone over the terminator.
224 const TerminatorInst
*OldTI
= BB
->getTerminator();
225 bool TerminatorDone
= false;
226 if (const BranchInst
*BI
= dyn_cast
<BranchInst
>(OldTI
)) {
227 if (BI
->isConditional()) {
228 // If the condition was a known constant in the callee...
229 ConstantBool
*Cond
= dyn_cast
<ConstantBool
>(BI
->getCondition());
230 if (Cond
== 0) // Or is a known constant in the caller...
231 Cond
= dyn_cast_or_null
<ConstantBool
>(ValueMap
[BI
->getCondition()]);
232 if (Cond
) { // Constant fold to uncond branch!
233 BasicBlock
*Dest
= BI
->getSuccessor(!Cond
->getValue());
234 ValueMap
[OldTI
] = new BranchInst(Dest
, NewBB
);
236 TerminatorDone
= true;
239 } else if (const SwitchInst
*SI
= dyn_cast
<SwitchInst
>(OldTI
)) {
240 // If switching on a value known constant in the caller.
241 ConstantInt
*Cond
= dyn_cast
<ConstantInt
>(SI
->getCondition());
242 if (Cond
== 0) // Or known constant after constant prop in the callee...
243 Cond
= dyn_cast_or_null
<ConstantInt
>(ValueMap
[SI
->getCondition()]);
244 if (Cond
) { // Constant fold to uncond branch!
245 BasicBlock
*Dest
= SI
->getSuccessor(SI
->findCaseValue(Cond
));
246 ValueMap
[OldTI
] = new BranchInst(Dest
, NewBB
);
248 TerminatorDone
= true;
252 if (!TerminatorDone
) {
253 Instruction
*NewInst
= OldTI
->clone();
254 if (OldTI
->hasName())
255 NewInst
->setName(OldTI
->getName()+NameSuffix
);
256 NewBB
->getInstList().push_back(NewInst
);
257 ValueMap
[OldTI
] = NewInst
; // Add instruction map to value.
259 // Recursively clone any reachable successor blocks.
260 const TerminatorInst
*TI
= BB
->getTerminator();
261 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
)
262 CloneBlock(TI
->getSuccessor(i
));
266 CodeInfo
->ContainsCalls
|= hasCalls
;
267 CodeInfo
->ContainsUnwinds
|= isa
<UnwindInst
>(OldTI
);
268 CodeInfo
->ContainsDynamicAllocas
|= hasDynamicAllocas
;
269 CodeInfo
->ContainsDynamicAllocas
|= hasStaticAllocas
&&
270 BB
!= &BB
->getParent()->front();
273 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(NewBB
->getTerminator()))
274 Returns
.push_back(RI
);
277 /// ConstantFoldMappedInstruction - Constant fold the specified instruction,
278 /// mapping its operands through ValueMap if they are available.
279 Constant
*PruningFunctionCloner::
280 ConstantFoldMappedInstruction(const Instruction
*I
) {
281 if (isa
<BinaryOperator
>(I
) || isa
<ShiftInst
>(I
)) {
282 if (Constant
*Op0
= dyn_cast_or_null
<Constant
>(MapValue(I
->getOperand(0),
284 if (Constant
*Op1
= dyn_cast_or_null
<Constant
>(MapValue(I
->getOperand(1),
286 return ConstantExpr::get(I
->getOpcode(), Op0
, Op1
);
290 std::vector
<Constant
*> Ops
;
291 for (unsigned i
= 0, e
= I
->getNumOperands(); i
!= e
; ++i
)
292 if (Constant
*Op
= dyn_cast_or_null
<Constant
>(MapValue(I
->getOperand(i
),
296 return 0; // All operands not constant!
298 return ConstantFoldInstOperands(I
->getOpcode(), I
->getType(), Ops
);
301 /// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto,
302 /// except that it does some simple constant prop and DCE on the fly. The
303 /// effect of this is to copy significantly less code in cases where (for
304 /// example) a function call with constant arguments is inlined, and those
305 /// constant arguments cause a significant amount of code in the callee to be
306 /// dead. Since this doesn't produce an exactly copy of the input, it can't be
307 /// used for things like CloneFunction or CloneModule.
308 void llvm::CloneAndPruneFunctionInto(Function
*NewFunc
, const Function
*OldFunc
,
309 std::map
<const Value
*, Value
*> &ValueMap
,
310 std::vector
<ReturnInst
*> &Returns
,
311 const char *NameSuffix
,
312 ClonedCodeInfo
*CodeInfo
) {
313 assert(NameSuffix
&& "NameSuffix cannot be null!");
316 for (Function::const_arg_iterator I
= OldFunc
->arg_begin(),
317 E
= OldFunc
->arg_end(); I
!= E
; ++I
)
318 assert(ValueMap
.count(I
) && "No mapping from source argument specified!");
321 PruningFunctionCloner
PFC(NewFunc
, OldFunc
, ValueMap
, Returns
,
322 NameSuffix
, CodeInfo
);
324 // Clone the entry block, and anything recursively reachable from it.
325 PFC
.CloneBlock(&OldFunc
->getEntryBlock());
327 // Loop over all of the basic blocks in the old function. If the block was
328 // reachable, we have cloned it and the old block is now in the value map:
329 // insert it into the new function in the right order. If not, ignore it.
331 // Defer PHI resolution until rest of function is resolved.
332 std::vector
<const PHINode
*> PHIToResolve
;
333 for (Function::const_iterator BI
= OldFunc
->begin(), BE
= OldFunc
->end();
335 BasicBlock
*NewBB
= cast_or_null
<BasicBlock
>(ValueMap
[BI
]);
336 if (NewBB
== 0) continue; // Dead block.
338 // Add the new block to the new function.
339 NewFunc
->getBasicBlockList().push_back(NewBB
);
341 // Loop over all of the instructions in the block, fixing up operand
342 // references as we go. This uses ValueMap to do all the hard work.
344 BasicBlock::iterator I
= NewBB
->begin();
346 // Handle PHI nodes specially, as we have to remove references to dead
348 if (PHINode
*PN
= dyn_cast
<PHINode
>(I
)) {
349 // Skip over all PHI nodes, remembering them for later.
350 BasicBlock::const_iterator OldI
= BI
->begin();
351 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
, ++OldI
)
352 PHIToResolve
.push_back(cast
<PHINode
>(OldI
));
355 // Otherwise, remap the rest of the instructions normally.
356 for (; I
!= NewBB
->end(); ++I
)
357 RemapInstruction(I
, ValueMap
);
360 // Defer PHI resolution until rest of function is resolved, PHI resolution
361 // requires the CFG to be up-to-date.
362 for (unsigned phino
= 0, e
= PHIToResolve
.size(); phino
!= e
; ) {
363 const PHINode
*OPN
= PHIToResolve
[phino
];
365 unsigned NumPreds
= OPN
->getNumIncomingValues();
367 unsigned BBPHIStart
= phino
;
368 const BasicBlock
*OldBB
= OPN
->getParent();
369 BasicBlock
*NewBB
= cast
<BasicBlock
>(ValueMap
[OldBB
]);
371 // Map operands for blocks that are live and remove operands for blocks
373 for (; phino
!= PHIToResolve
.size() &&
374 PHIToResolve
[phino
]->getParent() == OldBB
; ++phino
) {
375 OPN
= PHIToResolve
[phino
];
376 PHINode
*PN
= cast
<PHINode
>(ValueMap
[OPN
]);
377 for (unsigned pred
= 0, e
= NumPreds
; pred
!= e
; ++pred
) {
378 if (BasicBlock
*MappedBlock
=
379 cast_or_null
<BasicBlock
>(ValueMap
[PN
->getIncomingBlock(pred
)])) {
380 Value
*InVal
= MapValue(PN
->getIncomingValue(pred
), ValueMap
);
381 assert(InVal
&& "Unknown input value?");
382 PN
->setIncomingValue(pred
, InVal
);
383 PN
->setIncomingBlock(pred
, MappedBlock
);
385 PN
->removeIncomingValue(pred
, false);
386 --pred
, --e
; // Revisit the next entry.
391 // The loop above has removed PHI entries for those blocks that are dead
392 // and has updated others. However, if a block is live (i.e. copied over)
393 // but its terminator has been changed to not go to this block, then our
394 // phi nodes will have invalid entries. Update the PHI nodes in this
396 PHINode
*PN
= cast
<PHINode
>(NewBB
->begin());
397 NumPreds
= std::distance(pred_begin(NewBB
), pred_end(NewBB
));
398 if (NumPreds
!= PN
->getNumIncomingValues()) {
399 assert(NumPreds
< PN
->getNumIncomingValues());
400 // Count how many times each predecessor comes to this block.
401 std::map
<BasicBlock
*, unsigned> PredCount
;
402 for (pred_iterator PI
= pred_begin(NewBB
), E
= pred_end(NewBB
);
406 // Figure out how many entries to remove from each PHI.
407 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
408 ++PredCount
[PN
->getIncomingBlock(i
)];
410 // At this point, the excess predecessor entries are positive in the
411 // map. Loop over all of the PHIs and remove excess predecessor
413 BasicBlock::iterator I
= NewBB
->begin();
414 for (; (PN
= dyn_cast
<PHINode
>(I
)); ++I
) {
415 for (std::map
<BasicBlock
*, unsigned>::iterator PCI
=PredCount
.begin(),
416 E
= PredCount
.end(); PCI
!= E
; ++PCI
) {
417 BasicBlock
*Pred
= PCI
->first
;
418 for (unsigned NumToRemove
= PCI
->second
; NumToRemove
; --NumToRemove
)
419 PN
->removeIncomingValue(Pred
, false);
424 // If the loops above have made these phi nodes have 0 or 1 operand,
425 // replace them with undef or the input value. We must do this for
426 // correctness, because 0-operand phis are not valid.
427 PN
= cast
<PHINode
>(NewBB
->begin());
428 if (PN
->getNumIncomingValues() == 0) {
429 BasicBlock::iterator I
= NewBB
->begin();
430 BasicBlock::const_iterator OldI
= OldBB
->begin();
431 while ((PN
= dyn_cast
<PHINode
>(I
++))) {
432 Value
*NV
= UndefValue::get(PN
->getType());
433 PN
->replaceAllUsesWith(NV
);
434 assert(ValueMap
[OldI
] == PN
&& "ValueMap mismatch");
436 PN
->eraseFromParent();
439 } else if (PN
->getNumIncomingValues() == 1) {
440 BasicBlock::iterator I
= NewBB
->begin();
441 BasicBlock::const_iterator OldI
= OldBB
->begin();
442 while ((PN
= dyn_cast
<PHINode
>(I
++))) {
443 Value
*NV
= PN
->getIncomingValue(0);
444 PN
->replaceAllUsesWith(NV
);
445 assert(ValueMap
[OldI
] == PN
&& "ValueMap mismatch");
447 PN
->eraseFromParent();