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