1 //===- CloneFunction.cpp - Clone a function into another function ---------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 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. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #include "llvm/Transforms/Utils/Cloning.h" 17 #include "llvm/ADT/SmallVector.h" 18 #include "llvm/Analysis/ConstantFolding.h" 19 #include "llvm/Analysis/InstructionSimplify.h" 20 #include "llvm/IR/CFG.h" 21 #include "llvm/IR/Constants.h" 22 #include "llvm/IR/DebugInfo.h" 23 #include "llvm/IR/DerivedTypes.h" 24 #include "llvm/IR/Function.h" 25 #include "llvm/IR/GlobalVariable.h" 26 #include "llvm/IR/Instructions.h" 27 #include "llvm/IR/IntrinsicInst.h" 28 #include "llvm/IR/LLVMContext.h" 29 #include "llvm/IR/Metadata.h" 30 #include "llvm/IR/Module.h" 31 #include "llvm/Transforms/Utils/BasicBlockUtils.h" 32 #include "llvm/Transforms/Utils/Local.h" 33 #include "llvm/Transforms/Utils/ValueMapper.h" 34 #include <map> 35 using namespace llvm; 36 37 // CloneBasicBlock - See comments in Cloning.h 38 BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB, 39 ValueToValueMapTy &VMap, 40 const Twine &NameSuffix, Function *F, 41 ClonedCodeInfo *CodeInfo) { 42 BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "", F); 43 if (BB->hasName()) NewBB->setName(BB->getName()+NameSuffix); 44 45 bool hasCalls = false, hasDynamicAllocas = false, hasStaticAllocas = false; 46 47 // Loop over all instructions, and copy them over. 48 for (BasicBlock::const_iterator II = BB->begin(), IE = BB->end(); 49 II != IE; ++II) { 50 Instruction *NewInst = II->clone(); 51 if (II->hasName()) 52 NewInst->setName(II->getName()+NameSuffix); 53 NewBB->getInstList().push_back(NewInst); 54 VMap[II] = NewInst; // Add instruction map to value. 55 56 hasCalls |= (isa<CallInst>(II) && !isa<DbgInfoIntrinsic>(II)); 57 if (const AllocaInst *AI = dyn_cast<AllocaInst>(II)) { 58 if (isa<ConstantInt>(AI->getArraySize())) 59 hasStaticAllocas = true; 60 else 61 hasDynamicAllocas = true; 62 } 63 } 64 65 if (CodeInfo) { 66 CodeInfo->ContainsCalls |= hasCalls; 67 CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas; 68 CodeInfo->ContainsDynamicAllocas |= hasStaticAllocas && 69 BB != &BB->getParent()->getEntryBlock(); 70 } 71 return NewBB; 72 } 73 74 // Clone OldFunc into NewFunc, transforming the old arguments into references to 75 // VMap values. 76 // 77 void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc, 78 ValueToValueMapTy &VMap, 79 bool ModuleLevelChanges, 80 SmallVectorImpl<ReturnInst*> &Returns, 81 const char *NameSuffix, ClonedCodeInfo *CodeInfo, 82 ValueMapTypeRemapper *TypeMapper, 83 ValueMaterializer *Materializer) { 84 assert(NameSuffix && "NameSuffix cannot be null!"); 85 86 #ifndef NDEBUG 87 for (Function::const_arg_iterator I = OldFunc->arg_begin(), 88 E = OldFunc->arg_end(); I != E; ++I) 89 assert(VMap.count(I) && "No mapping from source argument specified!"); 90 #endif 91 92 AttributeSet OldAttrs = OldFunc->getAttributes(); 93 // Clone any argument attributes that are present in the VMap. 94 for (Function::const_arg_iterator I = OldFunc->arg_begin(), 95 E = OldFunc->arg_end(); 96 I != E; ++I) 97 if (Argument *Anew = dyn_cast<Argument>(VMap[I])) { 98 AttributeSet attrs = 99 OldAttrs.getParamAttributes(I->getArgNo() + 1); 100 if (attrs.getNumSlots() > 0) 101 Anew->addAttr(attrs); 102 } 103 104 NewFunc->setAttributes(NewFunc->getAttributes() 105 .addAttributes(NewFunc->getContext(), 106 AttributeSet::ReturnIndex, 107 OldAttrs.getRetAttributes())); 108 NewFunc->setAttributes(NewFunc->getAttributes() 109 .addAttributes(NewFunc->getContext(), 110 AttributeSet::FunctionIndex, 111 OldAttrs.getFnAttributes())); 112 113 // Loop over all of the basic blocks in the function, cloning them as 114 // appropriate. Note that we save BE this way in order to handle cloning of 115 // recursive functions into themselves. 116 // 117 for (Function::const_iterator BI = OldFunc->begin(), BE = OldFunc->end(); 118 BI != BE; ++BI) { 119 const BasicBlock &BB = *BI; 120 121 // Create a new basic block and copy instructions into it! 122 BasicBlock *CBB = CloneBasicBlock(&BB, VMap, NameSuffix, NewFunc, CodeInfo); 123 124 // Add basic block mapping. 125 VMap[&BB] = CBB; 126 127 // It is only legal to clone a function if a block address within that 128 // function is never referenced outside of the function. Given that, we 129 // want to map block addresses from the old function to block addresses in 130 // the clone. (This is different from the generic ValueMapper 131 // implementation, which generates an invalid blockaddress when 132 // cloning a function.) 133 if (BB.hasAddressTaken()) { 134 Constant *OldBBAddr = BlockAddress::get(const_cast<Function*>(OldFunc), 135 const_cast<BasicBlock*>(&BB)); 136 VMap[OldBBAddr] = BlockAddress::get(NewFunc, CBB); 137 } 138 139 // Note return instructions for the caller. 140 if (ReturnInst *RI = dyn_cast<ReturnInst>(CBB->getTerminator())) 141 Returns.push_back(RI); 142 } 143 144 // Loop over all of the instructions in the function, fixing up operand 145 // references as we go. This uses VMap to do all the hard work. 146 for (Function::iterator BB = cast<BasicBlock>(VMap[OldFunc->begin()]), 147 BE = NewFunc->end(); BB != BE; ++BB) 148 // Loop over all instructions, fixing each one as we find it... 149 for (BasicBlock::iterator II = BB->begin(); II != BB->end(); ++II) 150 RemapInstruction(II, VMap, 151 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges, 152 TypeMapper, Materializer); 153 } 154 155 // Find the MDNode which corresponds to the DISubprogram data that described F. 156 static MDNode* FindSubprogram(const Function *F, DebugInfoFinder &Finder) { 157 for (DISubprogram Subprogram : Finder.subprograms()) { 158 if (Subprogram.describes(F)) return Subprogram; 159 } 160 return NULL; 161 } 162 163 // Add an operand to an existing MDNode. The new operand will be added at the 164 // back of the operand list. 165 static void AddOperand(MDNode *Node, Value *Operand) { 166 SmallVector<Value*, 16> Operands; 167 for (unsigned i = 0; i < Node->getNumOperands(); i++) { 168 Operands.push_back(Node->getOperand(i)); 169 } 170 Operands.push_back(Operand); 171 MDNode *NewNode = MDNode::get(Node->getContext(), Operands); 172 Node->replaceAllUsesWith(NewNode); 173 } 174 175 // Clone the module-level debug info associated with OldFunc. The cloned data 176 // will point to NewFunc instead. 177 static void CloneDebugInfoMetadata(Function *NewFunc, const Function *OldFunc, 178 ValueToValueMapTy &VMap) { 179 DebugInfoFinder Finder; 180 Finder.processModule(*OldFunc->getParent()); 181 182 const MDNode *OldSubprogramMDNode = FindSubprogram(OldFunc, Finder); 183 if (!OldSubprogramMDNode) return; 184 185 // Ensure that OldFunc appears in the map. 186 // (if it's already there it must point to NewFunc anyway) 187 VMap[OldFunc] = NewFunc; 188 DISubprogram NewSubprogram(MapValue(OldSubprogramMDNode, VMap)); 189 190 for (DICompileUnit CU : Finder.compile_units()) { 191 DIArray Subprograms(CU.getSubprograms()); 192 193 // If the compile unit's function list contains the old function, it should 194 // also contain the new one. 195 for (unsigned i = 0; i < Subprograms.getNumElements(); i++) { 196 if ((MDNode*)Subprograms.getElement(i) == OldSubprogramMDNode) { 197 AddOperand(Subprograms, NewSubprogram); 198 } 199 } 200 } 201 } 202 203 /// CloneFunction - Return a copy of the specified function, but without 204 /// embedding the function into another module. Also, any references specified 205 /// in the VMap are changed to refer to their mapped value instead of the 206 /// original one. If any of the arguments to the function are in the VMap, 207 /// the arguments are deleted from the resultant function. The VMap is 208 /// updated to include mappings from all of the instructions and basicblocks in 209 /// the function from their old to new values. 210 /// 211 Function *llvm::CloneFunction(const Function *F, ValueToValueMapTy &VMap, 212 bool ModuleLevelChanges, 213 ClonedCodeInfo *CodeInfo) { 214 std::vector<Type*> ArgTypes; 215 216 // The user might be deleting arguments to the function by specifying them in 217 // the VMap. If so, we need to not add the arguments to the arg ty vector 218 // 219 for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end(); 220 I != E; ++I) 221 if (VMap.count(I) == 0) // Haven't mapped the argument to anything yet? 222 ArgTypes.push_back(I->getType()); 223 224 // Create a new function type... 225 FunctionType *FTy = FunctionType::get(F->getFunctionType()->getReturnType(), 226 ArgTypes, F->getFunctionType()->isVarArg()); 227 228 // Create the new function... 229 Function *NewF = Function::Create(FTy, F->getLinkage(), F->getName()); 230 231 // Loop over the arguments, copying the names of the mapped arguments over... 232 Function::arg_iterator DestI = NewF->arg_begin(); 233 for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end(); 234 I != E; ++I) 235 if (VMap.count(I) == 0) { // Is this argument preserved? 236 DestI->setName(I->getName()); // Copy the name over... 237 VMap[I] = DestI++; // Add mapping to VMap 238 } 239 240 if (ModuleLevelChanges) 241 CloneDebugInfoMetadata(NewF, F, VMap); 242 243 SmallVector<ReturnInst*, 8> Returns; // Ignore returns cloned. 244 CloneFunctionInto(NewF, F, VMap, ModuleLevelChanges, Returns, "", CodeInfo); 245 return NewF; 246 } 247 248 249 250 namespace { 251 /// PruningFunctionCloner - This class is a private class used to implement 252 /// the CloneAndPruneFunctionInto method. 253 struct PruningFunctionCloner { 254 Function *NewFunc; 255 const Function *OldFunc; 256 ValueToValueMapTy &VMap; 257 bool ModuleLevelChanges; 258 const char *NameSuffix; 259 ClonedCodeInfo *CodeInfo; 260 const DataLayout *DL; 261 public: 262 PruningFunctionCloner(Function *newFunc, const Function *oldFunc, 263 ValueToValueMapTy &valueMap, 264 bool moduleLevelChanges, 265 const char *nameSuffix, 266 ClonedCodeInfo *codeInfo, 267 const DataLayout *DL) 268 : NewFunc(newFunc), OldFunc(oldFunc), 269 VMap(valueMap), ModuleLevelChanges(moduleLevelChanges), 270 NameSuffix(nameSuffix), CodeInfo(codeInfo), DL(DL) { 271 } 272 273 /// CloneBlock - The specified block is found to be reachable, clone it and 274 /// anything that it can reach. 275 void CloneBlock(const BasicBlock *BB, 276 std::vector<const BasicBlock*> &ToClone); 277 }; 278 } 279 280 /// CloneBlock - The specified block is found to be reachable, clone it and 281 /// anything that it can reach. 282 void PruningFunctionCloner::CloneBlock(const BasicBlock *BB, 283 std::vector<const BasicBlock*> &ToClone){ 284 WeakVH &BBEntry = VMap[BB]; 285 286 // Have we already cloned this block? 287 if (BBEntry) return; 288 289 // Nope, clone it now. 290 BasicBlock *NewBB; 291 BBEntry = NewBB = BasicBlock::Create(BB->getContext()); 292 if (BB->hasName()) NewBB->setName(BB->getName()+NameSuffix); 293 294 // It is only legal to clone a function if a block address within that 295 // function is never referenced outside of the function. Given that, we 296 // want to map block addresses from the old function to block addresses in 297 // the clone. (This is different from the generic ValueMapper 298 // implementation, which generates an invalid blockaddress when 299 // cloning a function.) 300 // 301 // Note that we don't need to fix the mapping for unreachable blocks; 302 // the default mapping there is safe. 303 if (BB->hasAddressTaken()) { 304 Constant *OldBBAddr = BlockAddress::get(const_cast<Function*>(OldFunc), 305 const_cast<BasicBlock*>(BB)); 306 VMap[OldBBAddr] = BlockAddress::get(NewFunc, NewBB); 307 } 308 309 310 bool hasCalls = false, hasDynamicAllocas = false, hasStaticAllocas = false; 311 312 // Loop over all instructions, and copy them over, DCE'ing as we go. This 313 // loop doesn't include the terminator. 314 for (BasicBlock::const_iterator II = BB->begin(), IE = --BB->end(); 315 II != IE; ++II) { 316 Instruction *NewInst = II->clone(); 317 318 // Eagerly remap operands to the newly cloned instruction, except for PHI 319 // nodes for which we defer processing until we update the CFG. 320 if (!isa<PHINode>(NewInst)) { 321 RemapInstruction(NewInst, VMap, 322 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges); 323 324 // If we can simplify this instruction to some other value, simply add 325 // a mapping to that value rather than inserting a new instruction into 326 // the basic block. 327 if (Value *V = SimplifyInstruction(NewInst, DL)) { 328 // On the off-chance that this simplifies to an instruction in the old 329 // function, map it back into the new function. 330 if (Value *MappedV = VMap.lookup(V)) 331 V = MappedV; 332 333 VMap[II] = V; 334 delete NewInst; 335 continue; 336 } 337 } 338 339 if (II->hasName()) 340 NewInst->setName(II->getName()+NameSuffix); 341 VMap[II] = NewInst; // Add instruction map to value. 342 NewBB->getInstList().push_back(NewInst); 343 hasCalls |= (isa<CallInst>(II) && !isa<DbgInfoIntrinsic>(II)); 344 if (const AllocaInst *AI = dyn_cast<AllocaInst>(II)) { 345 if (isa<ConstantInt>(AI->getArraySize())) 346 hasStaticAllocas = true; 347 else 348 hasDynamicAllocas = true; 349 } 350 } 351 352 // Finally, clone over the terminator. 353 const TerminatorInst *OldTI = BB->getTerminator(); 354 bool TerminatorDone = false; 355 if (const BranchInst *BI = dyn_cast<BranchInst>(OldTI)) { 356 if (BI->isConditional()) { 357 // If the condition was a known constant in the callee... 358 ConstantInt *Cond = dyn_cast<ConstantInt>(BI->getCondition()); 359 // Or is a known constant in the caller... 360 if (Cond == 0) { 361 Value *V = VMap[BI->getCondition()]; 362 Cond = dyn_cast_or_null<ConstantInt>(V); 363 } 364 365 // Constant fold to uncond branch! 366 if (Cond) { 367 BasicBlock *Dest = BI->getSuccessor(!Cond->getZExtValue()); 368 VMap[OldTI] = BranchInst::Create(Dest, NewBB); 369 ToClone.push_back(Dest); 370 TerminatorDone = true; 371 } 372 } 373 } else if (const SwitchInst *SI = dyn_cast<SwitchInst>(OldTI)) { 374 // If switching on a value known constant in the caller. 375 ConstantInt *Cond = dyn_cast<ConstantInt>(SI->getCondition()); 376 if (Cond == 0) { // Or known constant after constant prop in the callee... 377 Value *V = VMap[SI->getCondition()]; 378 Cond = dyn_cast_or_null<ConstantInt>(V); 379 } 380 if (Cond) { // Constant fold to uncond branch! 381 SwitchInst::ConstCaseIt Case = SI->findCaseValue(Cond); 382 BasicBlock *Dest = const_cast<BasicBlock*>(Case.getCaseSuccessor()); 383 VMap[OldTI] = BranchInst::Create(Dest, NewBB); 384 ToClone.push_back(Dest); 385 TerminatorDone = true; 386 } 387 } 388 389 if (!TerminatorDone) { 390 Instruction *NewInst = OldTI->clone(); 391 if (OldTI->hasName()) 392 NewInst->setName(OldTI->getName()+NameSuffix); 393 NewBB->getInstList().push_back(NewInst); 394 VMap[OldTI] = NewInst; // Add instruction map to value. 395 396 // Recursively clone any reachable successor blocks. 397 const TerminatorInst *TI = BB->getTerminator(); 398 for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) 399 ToClone.push_back(TI->getSuccessor(i)); 400 } 401 402 if (CodeInfo) { 403 CodeInfo->ContainsCalls |= hasCalls; 404 CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas; 405 CodeInfo->ContainsDynamicAllocas |= hasStaticAllocas && 406 BB != &BB->getParent()->front(); 407 } 408 } 409 410 /// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto, 411 /// except that it does some simple constant prop and DCE on the fly. The 412 /// effect of this is to copy significantly less code in cases where (for 413 /// example) a function call with constant arguments is inlined, and those 414 /// constant arguments cause a significant amount of code in the callee to be 415 /// dead. Since this doesn't produce an exact copy of the input, it can't be 416 /// used for things like CloneFunction or CloneModule. 417 void llvm::CloneAndPruneFunctionInto(Function *NewFunc, const Function *OldFunc, 418 ValueToValueMapTy &VMap, 419 bool ModuleLevelChanges, 420 SmallVectorImpl<ReturnInst*> &Returns, 421 const char *NameSuffix, 422 ClonedCodeInfo *CodeInfo, 423 const DataLayout *DL, 424 Instruction *TheCall) { 425 assert(NameSuffix && "NameSuffix cannot be null!"); 426 427 #ifndef NDEBUG 428 for (Function::const_arg_iterator II = OldFunc->arg_begin(), 429 E = OldFunc->arg_end(); II != E; ++II) 430 assert(VMap.count(II) && "No mapping from source argument specified!"); 431 #endif 432 433 PruningFunctionCloner PFC(NewFunc, OldFunc, VMap, ModuleLevelChanges, 434 NameSuffix, CodeInfo, DL); 435 436 // Clone the entry block, and anything recursively reachable from it. 437 std::vector<const BasicBlock*> CloneWorklist; 438 CloneWorklist.push_back(&OldFunc->getEntryBlock()); 439 while (!CloneWorklist.empty()) { 440 const BasicBlock *BB = CloneWorklist.back(); 441 CloneWorklist.pop_back(); 442 PFC.CloneBlock(BB, CloneWorklist); 443 } 444 445 // Loop over all of the basic blocks in the old function. If the block was 446 // reachable, we have cloned it and the old block is now in the value map: 447 // insert it into the new function in the right order. If not, ignore it. 448 // 449 // Defer PHI resolution until rest of function is resolved. 450 SmallVector<const PHINode*, 16> PHIToResolve; 451 for (Function::const_iterator BI = OldFunc->begin(), BE = OldFunc->end(); 452 BI != BE; ++BI) { 453 Value *V = VMap[BI]; 454 BasicBlock *NewBB = cast_or_null<BasicBlock>(V); 455 if (NewBB == 0) continue; // Dead block. 456 457 // Add the new block to the new function. 458 NewFunc->getBasicBlockList().push_back(NewBB); 459 460 // Handle PHI nodes specially, as we have to remove references to dead 461 // blocks. 462 for (BasicBlock::const_iterator I = BI->begin(), E = BI->end(); I != E; ++I) 463 if (const PHINode *PN = dyn_cast<PHINode>(I)) 464 PHIToResolve.push_back(PN); 465 else 466 break; 467 468 // Finally, remap the terminator instructions, as those can't be remapped 469 // until all BBs are mapped. 470 RemapInstruction(NewBB->getTerminator(), VMap, 471 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges); 472 } 473 474 // Defer PHI resolution until rest of function is resolved, PHI resolution 475 // requires the CFG to be up-to-date. 476 for (unsigned phino = 0, e = PHIToResolve.size(); phino != e; ) { 477 const PHINode *OPN = PHIToResolve[phino]; 478 unsigned NumPreds = OPN->getNumIncomingValues(); 479 const BasicBlock *OldBB = OPN->getParent(); 480 BasicBlock *NewBB = cast<BasicBlock>(VMap[OldBB]); 481 482 // Map operands for blocks that are live and remove operands for blocks 483 // that are dead. 484 for (; phino != PHIToResolve.size() && 485 PHIToResolve[phino]->getParent() == OldBB; ++phino) { 486 OPN = PHIToResolve[phino]; 487 PHINode *PN = cast<PHINode>(VMap[OPN]); 488 for (unsigned pred = 0, e = NumPreds; pred != e; ++pred) { 489 Value *V = VMap[PN->getIncomingBlock(pred)]; 490 if (BasicBlock *MappedBlock = cast_or_null<BasicBlock>(V)) { 491 Value *InVal = MapValue(PN->getIncomingValue(pred), 492 VMap, 493 ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges); 494 assert(InVal && "Unknown input value?"); 495 PN->setIncomingValue(pred, InVal); 496 PN->setIncomingBlock(pred, MappedBlock); 497 } else { 498 PN->removeIncomingValue(pred, false); 499 --pred, --e; // Revisit the next entry. 500 } 501 } 502 } 503 504 // The loop above has removed PHI entries for those blocks that are dead 505 // and has updated others. However, if a block is live (i.e. copied over) 506 // but its terminator has been changed to not go to this block, then our 507 // phi nodes will have invalid entries. Update the PHI nodes in this 508 // case. 509 PHINode *PN = cast<PHINode>(NewBB->begin()); 510 NumPreds = std::distance(pred_begin(NewBB), pred_end(NewBB)); 511 if (NumPreds != PN->getNumIncomingValues()) { 512 assert(NumPreds < PN->getNumIncomingValues()); 513 // Count how many times each predecessor comes to this block. 514 std::map<BasicBlock*, unsigned> PredCount; 515 for (pred_iterator PI = pred_begin(NewBB), E = pred_end(NewBB); 516 PI != E; ++PI) 517 --PredCount[*PI]; 518 519 // Figure out how many entries to remove from each PHI. 520 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) 521 ++PredCount[PN->getIncomingBlock(i)]; 522 523 // At this point, the excess predecessor entries are positive in the 524 // map. Loop over all of the PHIs and remove excess predecessor 525 // entries. 526 BasicBlock::iterator I = NewBB->begin(); 527 for (; (PN = dyn_cast<PHINode>(I)); ++I) { 528 for (std::map<BasicBlock*, unsigned>::iterator PCI =PredCount.begin(), 529 E = PredCount.end(); PCI != E; ++PCI) { 530 BasicBlock *Pred = PCI->first; 531 for (unsigned NumToRemove = PCI->second; NumToRemove; --NumToRemove) 532 PN->removeIncomingValue(Pred, false); 533 } 534 } 535 } 536 537 // If the loops above have made these phi nodes have 0 or 1 operand, 538 // replace them with undef or the input value. We must do this for 539 // correctness, because 0-operand phis are not valid. 540 PN = cast<PHINode>(NewBB->begin()); 541 if (PN->getNumIncomingValues() == 0) { 542 BasicBlock::iterator I = NewBB->begin(); 543 BasicBlock::const_iterator OldI = OldBB->begin(); 544 while ((PN = dyn_cast<PHINode>(I++))) { 545 Value *NV = UndefValue::get(PN->getType()); 546 PN->replaceAllUsesWith(NV); 547 assert(VMap[OldI] == PN && "VMap mismatch"); 548 VMap[OldI] = NV; 549 PN->eraseFromParent(); 550 ++OldI; 551 } 552 } 553 } 554 555 // Make a second pass over the PHINodes now that all of them have been 556 // remapped into the new function, simplifying the PHINode and performing any 557 // recursive simplifications exposed. This will transparently update the 558 // WeakVH in the VMap. Notably, we rely on that so that if we coalesce 559 // two PHINodes, the iteration over the old PHIs remains valid, and the 560 // mapping will just map us to the new node (which may not even be a PHI 561 // node). 562 for (unsigned Idx = 0, Size = PHIToResolve.size(); Idx != Size; ++Idx) 563 if (PHINode *PN = dyn_cast<PHINode>(VMap[PHIToResolve[Idx]])) 564 recursivelySimplifyInstruction(PN, DL); 565 566 // Now that the inlined function body has been fully constructed, go through 567 // and zap unconditional fall-through branches. This happen all the time when 568 // specializing code: code specialization turns conditional branches into 569 // uncond branches, and this code folds them. 570 Function::iterator Begin = cast<BasicBlock>(VMap[&OldFunc->getEntryBlock()]); 571 Function::iterator I = Begin; 572 while (I != NewFunc->end()) { 573 // Check if this block has become dead during inlining or other 574 // simplifications. Note that the first block will appear dead, as it has 575 // not yet been wired up properly. 576 if (I != Begin && (pred_begin(I) == pred_end(I) || 577 I->getSinglePredecessor() == I)) { 578 BasicBlock *DeadBB = I++; 579 DeleteDeadBlock(DeadBB); 580 continue; 581 } 582 583 // We need to simplify conditional branches and switches with a constant 584 // operand. We try to prune these out when cloning, but if the 585 // simplification required looking through PHI nodes, those are only 586 // available after forming the full basic block. That may leave some here, 587 // and we still want to prune the dead code as early as possible. 588 ConstantFoldTerminator(I); 589 590 BranchInst *BI = dyn_cast<BranchInst>(I->getTerminator()); 591 if (!BI || BI->isConditional()) { ++I; continue; } 592 593 BasicBlock *Dest = BI->getSuccessor(0); 594 if (!Dest->getSinglePredecessor()) { 595 ++I; continue; 596 } 597 598 // We shouldn't be able to get single-entry PHI nodes here, as instsimplify 599 // above should have zapped all of them.. 600 assert(!isa<PHINode>(Dest->begin())); 601 602 // We know all single-entry PHI nodes in the inlined function have been 603 // removed, so we just need to splice the blocks. 604 BI->eraseFromParent(); 605 606 // Make all PHI nodes that referred to Dest now refer to I as their source. 607 Dest->replaceAllUsesWith(I); 608 609 // Move all the instructions in the succ to the pred. 610 I->getInstList().splice(I->end(), Dest->getInstList()); 611 612 // Remove the dest block. 613 Dest->eraseFromParent(); 614 615 // Do not increment I, iteratively merge all things this block branches to. 616 } 617 618 // Make a final pass over the basic blocks from theh old function to gather 619 // any return instructions which survived folding. We have to do this here 620 // because we can iteratively remove and merge returns above. 621 for (Function::iterator I = cast<BasicBlock>(VMap[&OldFunc->getEntryBlock()]), 622 E = NewFunc->end(); 623 I != E; ++I) 624 if (ReturnInst *RI = dyn_cast<ReturnInst>(I->getTerminator())) 625 Returns.push_back(RI); 626 } 627