1 //===- MergeFunctions.cpp - Merge identical functions ---------------------===// 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 pass looks for equivalent functions that are mergable and folds them. 11 // 12 // A hash is computed from the function, based on its type and number of 13 // basic blocks. 14 // 15 // Once all hashes are computed, we perform an expensive equality comparison 16 // on each function pair. This takes n^2/2 comparisons per bucket, so it's 17 // important that the hash function be high quality. The equality comparison 18 // iterates through each instruction in each basic block. 19 // 20 // When a match is found the functions are folded. If both functions are 21 // overridable, we move the functionality into a new internal function and 22 // leave two overridable thunks to it. 23 // 24 //===----------------------------------------------------------------------===// 25 // 26 // Future work: 27 // 28 // * virtual functions. 29 // 30 // Many functions have their address taken by the virtual function table for 31 // the object they belong to. However, as long as it's only used for a lookup 32 // and call, this is irrelevant, and we'd like to fold such functions. 33 // 34 // * switch from n^2 pair-wise comparisons to an n-way comparison for each 35 // bucket. 36 // 37 // * be smarter about bitcasts. 38 // 39 // In order to fold functions, we will sometimes add either bitcast instructions 40 // or bitcast constant expressions. Unfortunately, this can confound further 41 // analysis since the two functions differ where one has a bitcast and the 42 // other doesn't. We should learn to look through bitcasts. 43 // 44 //===----------------------------------------------------------------------===// 45 46 #define DEBUG_TYPE "mergefunc" 47 #include "llvm/Transforms/IPO.h" 48 #include "llvm/ADT/DenseSet.h" 49 #include "llvm/ADT/FoldingSet.h" 50 #include "llvm/ADT/SmallSet.h" 51 #include "llvm/ADT/Statistic.h" 52 #include "llvm/ADT/STLExtras.h" 53 #include "llvm/Constants.h" 54 #include "llvm/InlineAsm.h" 55 #include "llvm/Instructions.h" 56 #include "llvm/LLVMContext.h" 57 #include "llvm/Module.h" 58 #include "llvm/Operator.h" 59 #include "llvm/Pass.h" 60 #include "llvm/Support/CallSite.h" 61 #include "llvm/Support/Debug.h" 62 #include "llvm/Support/ErrorHandling.h" 63 #include "llvm/Support/IRBuilder.h" 64 #include "llvm/Support/ValueHandle.h" 65 #include "llvm/Support/raw_ostream.h" 66 #include "llvm/Target/TargetData.h" 67 #include <vector> 68 using namespace llvm; 69 70 STATISTIC(NumFunctionsMerged, "Number of functions merged"); 71 STATISTIC(NumThunksWritten, "Number of thunks generated"); 72 STATISTIC(NumAliasesWritten, "Number of aliases generated"); 73 STATISTIC(NumDoubleWeak, "Number of new functions created"); 74 75 /// Creates a hash-code for the function which is the same for any two 76 /// functions that will compare equal, without looking at the instructions 77 /// inside the function. 78 static unsigned profileFunction(const Function *F) { 79 FunctionType *FTy = F->getFunctionType(); 80 81 FoldingSetNodeID ID; 82 ID.AddInteger(F->size()); 83 ID.AddInteger(F->getCallingConv()); 84 ID.AddBoolean(F->hasGC()); 85 ID.AddBoolean(FTy->isVarArg()); 86 ID.AddInteger(FTy->getReturnType()->getTypeID()); 87 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) 88 ID.AddInteger(FTy->getParamType(i)->getTypeID()); 89 return ID.ComputeHash(); 90 } 91 92 namespace { 93 94 /// ComparableFunction - A struct that pairs together functions with a 95 /// TargetData so that we can keep them together as elements in the DenseSet. 96 class ComparableFunction { 97 public: 98 static const ComparableFunction EmptyKey; 99 static const ComparableFunction TombstoneKey; 100 static TargetData * const LookupOnly; 101 102 ComparableFunction(Function *Func, TargetData *TD) 103 : Func(Func), Hash(profileFunction(Func)), TD(TD) {} 104 105 Function *getFunc() const { return Func; } 106 unsigned getHash() const { return Hash; } 107 TargetData *getTD() const { return TD; } 108 109 // Drops AssertingVH reference to the function. Outside of debug mode, this 110 // does nothing. 111 void release() { 112 assert(Func && 113 "Attempted to release function twice, or release empty/tombstone!"); 114 Func = NULL; 115 } 116 117 private: 118 explicit ComparableFunction(unsigned Hash) 119 : Func(NULL), Hash(Hash), TD(NULL) {} 120 121 AssertingVH<Function> Func; 122 unsigned Hash; 123 TargetData *TD; 124 }; 125 126 const ComparableFunction ComparableFunction::EmptyKey = ComparableFunction(0); 127 const ComparableFunction ComparableFunction::TombstoneKey = 128 ComparableFunction(1); 129 TargetData *const ComparableFunction::LookupOnly = (TargetData*)(-1); 130 131 } 132 133 namespace llvm { 134 template <> 135 struct DenseMapInfo<ComparableFunction> { 136 static ComparableFunction getEmptyKey() { 137 return ComparableFunction::EmptyKey; 138 } 139 static ComparableFunction getTombstoneKey() { 140 return ComparableFunction::TombstoneKey; 141 } 142 static unsigned getHashValue(const ComparableFunction &CF) { 143 return CF.getHash(); 144 } 145 static bool isEqual(const ComparableFunction &LHS, 146 const ComparableFunction &RHS); 147 }; 148 } 149 150 namespace { 151 152 /// FunctionComparator - Compares two functions to determine whether or not 153 /// they will generate machine code with the same behaviour. TargetData is 154 /// used if available. The comparator always fails conservatively (erring on the 155 /// side of claiming that two functions are different). 156 class FunctionComparator { 157 public: 158 FunctionComparator(const TargetData *TD, const Function *F1, 159 const Function *F2) 160 : F1(F1), F2(F2), TD(TD) {} 161 162 /// Test whether the two functions have equivalent behaviour. 163 bool compare(); 164 165 private: 166 /// Test whether two basic blocks have equivalent behaviour. 167 bool compare(const BasicBlock *BB1, const BasicBlock *BB2); 168 169 /// Assign or look up previously assigned numbers for the two values, and 170 /// return whether the numbers are equal. Numbers are assigned in the order 171 /// visited. 172 bool enumerate(const Value *V1, const Value *V2); 173 174 /// Compare two Instructions for equivalence, similar to 175 /// Instruction::isSameOperationAs but with modifications to the type 176 /// comparison. 177 bool isEquivalentOperation(const Instruction *I1, 178 const Instruction *I2) const; 179 180 /// Compare two GEPs for equivalent pointer arithmetic. 181 bool isEquivalentGEP(const GEPOperator *GEP1, const GEPOperator *GEP2); 182 bool isEquivalentGEP(const GetElementPtrInst *GEP1, 183 const GetElementPtrInst *GEP2) { 184 return isEquivalentGEP(cast<GEPOperator>(GEP1), cast<GEPOperator>(GEP2)); 185 } 186 187 /// Compare two Types, treating all pointer types as equal. 188 bool isEquivalentType(Type *Ty1, Type *Ty2) const; 189 190 // The two functions undergoing comparison. 191 const Function *F1, *F2; 192 193 const TargetData *TD; 194 195 DenseMap<const Value *, const Value *> id_map; 196 DenseSet<const Value *> seen_values; 197 }; 198 199 } 200 201 // Any two pointers in the same address space are equivalent, intptr_t and 202 // pointers are equivalent. Otherwise, standard type equivalence rules apply. 203 bool FunctionComparator::isEquivalentType(Type *Ty1, 204 Type *Ty2) const { 205 if (Ty1 == Ty2) 206 return true; 207 if (Ty1->getTypeID() != Ty2->getTypeID()) { 208 if (TD) { 209 LLVMContext &Ctx = Ty1->getContext(); 210 if (isa<PointerType>(Ty1) && Ty2 == TD->getIntPtrType(Ctx)) return true; 211 if (isa<PointerType>(Ty2) && Ty1 == TD->getIntPtrType(Ctx)) return true; 212 } 213 return false; 214 } 215 216 switch (Ty1->getTypeID()) { 217 default: 218 llvm_unreachable("Unknown type!"); 219 // Fall through in Release mode. 220 case Type::IntegerTyID: 221 case Type::VectorTyID: 222 // Ty1 == Ty2 would have returned true earlier. 223 return false; 224 225 case Type::VoidTyID: 226 case Type::FloatTyID: 227 case Type::DoubleTyID: 228 case Type::X86_FP80TyID: 229 case Type::FP128TyID: 230 case Type::PPC_FP128TyID: 231 case Type::LabelTyID: 232 case Type::MetadataTyID: 233 return true; 234 235 case Type::PointerTyID: { 236 PointerType *PTy1 = cast<PointerType>(Ty1); 237 PointerType *PTy2 = cast<PointerType>(Ty2); 238 return PTy1->getAddressSpace() == PTy2->getAddressSpace(); 239 } 240 241 case Type::StructTyID: { 242 StructType *STy1 = cast<StructType>(Ty1); 243 StructType *STy2 = cast<StructType>(Ty2); 244 if (STy1->getNumElements() != STy2->getNumElements()) 245 return false; 246 247 if (STy1->isPacked() != STy2->isPacked()) 248 return false; 249 250 for (unsigned i = 0, e = STy1->getNumElements(); i != e; ++i) { 251 if (!isEquivalentType(STy1->getElementType(i), STy2->getElementType(i))) 252 return false; 253 } 254 return true; 255 } 256 257 case Type::FunctionTyID: { 258 FunctionType *FTy1 = cast<FunctionType>(Ty1); 259 FunctionType *FTy2 = cast<FunctionType>(Ty2); 260 if (FTy1->getNumParams() != FTy2->getNumParams() || 261 FTy1->isVarArg() != FTy2->isVarArg()) 262 return false; 263 264 if (!isEquivalentType(FTy1->getReturnType(), FTy2->getReturnType())) 265 return false; 266 267 for (unsigned i = 0, e = FTy1->getNumParams(); i != e; ++i) { 268 if (!isEquivalentType(FTy1->getParamType(i), FTy2->getParamType(i))) 269 return false; 270 } 271 return true; 272 } 273 274 case Type::ArrayTyID: { 275 ArrayType *ATy1 = cast<ArrayType>(Ty1); 276 ArrayType *ATy2 = cast<ArrayType>(Ty2); 277 return ATy1->getNumElements() == ATy2->getNumElements() && 278 isEquivalentType(ATy1->getElementType(), ATy2->getElementType()); 279 } 280 } 281 } 282 283 // Determine whether the two operations are the same except that pointer-to-A 284 // and pointer-to-B are equivalent. This should be kept in sync with 285 // Instruction::isSameOperationAs. 286 bool FunctionComparator::isEquivalentOperation(const Instruction *I1, 287 const Instruction *I2) const { 288 // Differences from Instruction::isSameOperationAs: 289 // * replace type comparison with calls to isEquivalentType. 290 // * we test for I->hasSameSubclassOptionalData (nuw/nsw/tail) at the top 291 // * because of the above, we don't test for the tail bit on calls later on 292 if (I1->getOpcode() != I2->getOpcode() || 293 I1->getNumOperands() != I2->getNumOperands() || 294 !isEquivalentType(I1->getType(), I2->getType()) || 295 !I1->hasSameSubclassOptionalData(I2)) 296 return false; 297 298 // We have two instructions of identical opcode and #operands. Check to see 299 // if all operands are the same type 300 for (unsigned i = 0, e = I1->getNumOperands(); i != e; ++i) 301 if (!isEquivalentType(I1->getOperand(i)->getType(), 302 I2->getOperand(i)->getType())) 303 return false; 304 305 // Check special state that is a part of some instructions. 306 if (const LoadInst *LI = dyn_cast<LoadInst>(I1)) 307 return LI->isVolatile() == cast<LoadInst>(I2)->isVolatile() && 308 LI->getAlignment() == cast<LoadInst>(I2)->getAlignment() && 309 LI->getOrdering() == cast<LoadInst>(I2)->getOrdering() && 310 LI->getSynchScope() == cast<LoadInst>(I2)->getSynchScope(); 311 if (const StoreInst *SI = dyn_cast<StoreInst>(I1)) 312 return SI->isVolatile() == cast<StoreInst>(I2)->isVolatile() && 313 SI->getAlignment() == cast<StoreInst>(I2)->getAlignment() && 314 SI->getOrdering() == cast<StoreInst>(I2)->getOrdering() && 315 SI->getSynchScope() == cast<StoreInst>(I2)->getSynchScope(); 316 if (const CmpInst *CI = dyn_cast<CmpInst>(I1)) 317 return CI->getPredicate() == cast<CmpInst>(I2)->getPredicate(); 318 if (const CallInst *CI = dyn_cast<CallInst>(I1)) 319 return CI->getCallingConv() == cast<CallInst>(I2)->getCallingConv() && 320 CI->getAttributes() == cast<CallInst>(I2)->getAttributes(); 321 if (const InvokeInst *CI = dyn_cast<InvokeInst>(I1)) 322 return CI->getCallingConv() == cast<InvokeInst>(I2)->getCallingConv() && 323 CI->getAttributes() == cast<InvokeInst>(I2)->getAttributes(); 324 if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(I1)) 325 return IVI->getIndices() == cast<InsertValueInst>(I2)->getIndices(); 326 if (const ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(I1)) 327 return EVI->getIndices() == cast<ExtractValueInst>(I2)->getIndices(); 328 if (const FenceInst *FI = dyn_cast<FenceInst>(I1)) 329 return FI->getOrdering() == cast<FenceInst>(I2)->getOrdering() && 330 FI->getSynchScope() == cast<FenceInst>(I2)->getSynchScope(); 331 if (const AtomicCmpXchgInst *CXI = dyn_cast<AtomicCmpXchgInst>(I1)) 332 return CXI->isVolatile() == cast<AtomicCmpXchgInst>(I2)->isVolatile() && 333 CXI->getOrdering() == cast<AtomicCmpXchgInst>(I2)->getOrdering() && 334 CXI->getSynchScope() == cast<AtomicCmpXchgInst>(I2)->getSynchScope(); 335 if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(I1)) 336 return RMWI->getOperation() == cast<AtomicRMWInst>(I2)->getOperation() && 337 RMWI->isVolatile() == cast<AtomicRMWInst>(I2)->isVolatile() && 338 RMWI->getOrdering() == cast<AtomicRMWInst>(I2)->getOrdering() && 339 RMWI->getSynchScope() == cast<AtomicRMWInst>(I2)->getSynchScope(); 340 341 return true; 342 } 343 344 // Determine whether two GEP operations perform the same underlying arithmetic. 345 bool FunctionComparator::isEquivalentGEP(const GEPOperator *GEP1, 346 const GEPOperator *GEP2) { 347 // When we have target data, we can reduce the GEP down to the value in bytes 348 // added to the address. 349 if (TD && GEP1->hasAllConstantIndices() && GEP2->hasAllConstantIndices()) { 350 SmallVector<Value *, 8> Indices1(GEP1->idx_begin(), GEP1->idx_end()); 351 SmallVector<Value *, 8> Indices2(GEP2->idx_begin(), GEP2->idx_end()); 352 uint64_t Offset1 = TD->getIndexedOffset(GEP1->getPointerOperandType(), 353 Indices1); 354 uint64_t Offset2 = TD->getIndexedOffset(GEP2->getPointerOperandType(), 355 Indices2); 356 return Offset1 == Offset2; 357 } 358 359 if (GEP1->getPointerOperand()->getType() != 360 GEP2->getPointerOperand()->getType()) 361 return false; 362 363 if (GEP1->getNumOperands() != GEP2->getNumOperands()) 364 return false; 365 366 for (unsigned i = 0, e = GEP1->getNumOperands(); i != e; ++i) { 367 if (!enumerate(GEP1->getOperand(i), GEP2->getOperand(i))) 368 return false; 369 } 370 371 return true; 372 } 373 374 // Compare two values used by the two functions under pair-wise comparison. If 375 // this is the first time the values are seen, they're added to the mapping so 376 // that we will detect mismatches on next use. 377 bool FunctionComparator::enumerate(const Value *V1, const Value *V2) { 378 // Check for function @f1 referring to itself and function @f2 referring to 379 // itself, or referring to each other, or both referring to either of them. 380 // They're all equivalent if the two functions are otherwise equivalent. 381 if (V1 == F1 && V2 == F2) 382 return true; 383 if (V1 == F2 && V2 == F1) 384 return true; 385 386 if (const Constant *C1 = dyn_cast<Constant>(V1)) { 387 if (V1 == V2) return true; 388 const Constant *C2 = dyn_cast<Constant>(V2); 389 if (!C2) return false; 390 // TODO: constant expressions with GEP or references to F1 or F2. 391 if (C1->isNullValue() && C2->isNullValue() && 392 isEquivalentType(C1->getType(), C2->getType())) 393 return true; 394 // Try bitcasting C2 to C1's type. If the bitcast is legal and returns C1 395 // then they must have equal bit patterns. 396 return C1->getType()->canLosslesslyBitCastTo(C2->getType()) && 397 C1 == ConstantExpr::getBitCast(const_cast<Constant*>(C2), C1->getType()); 398 } 399 400 if (isa<InlineAsm>(V1) || isa<InlineAsm>(V2)) 401 return V1 == V2; 402 403 // Check that V1 maps to V2. If we find a value that V1 maps to then we simply 404 // check whether it's equal to V2. When there is no mapping then we need to 405 // ensure that V2 isn't already equivalent to something else. For this 406 // purpose, we track the V2 values in a set. 407 408 const Value *&map_elem = id_map[V1]; 409 if (map_elem) 410 return map_elem == V2; 411 if (!seen_values.insert(V2).second) 412 return false; 413 map_elem = V2; 414 return true; 415 } 416 417 // Test whether two basic blocks have equivalent behaviour. 418 bool FunctionComparator::compare(const BasicBlock *BB1, const BasicBlock *BB2) { 419 BasicBlock::const_iterator F1I = BB1->begin(), F1E = BB1->end(); 420 BasicBlock::const_iterator F2I = BB2->begin(), F2E = BB2->end(); 421 422 do { 423 if (!enumerate(F1I, F2I)) 424 return false; 425 426 if (const GetElementPtrInst *GEP1 = dyn_cast<GetElementPtrInst>(F1I)) { 427 const GetElementPtrInst *GEP2 = dyn_cast<GetElementPtrInst>(F2I); 428 if (!GEP2) 429 return false; 430 431 if (!enumerate(GEP1->getPointerOperand(), GEP2->getPointerOperand())) 432 return false; 433 434 if (!isEquivalentGEP(GEP1, GEP2)) 435 return false; 436 } else { 437 if (!isEquivalentOperation(F1I, F2I)) 438 return false; 439 440 assert(F1I->getNumOperands() == F2I->getNumOperands()); 441 for (unsigned i = 0, e = F1I->getNumOperands(); i != e; ++i) { 442 Value *OpF1 = F1I->getOperand(i); 443 Value *OpF2 = F2I->getOperand(i); 444 445 if (!enumerate(OpF1, OpF2)) 446 return false; 447 448 if (OpF1->getValueID() != OpF2->getValueID() || 449 !isEquivalentType(OpF1->getType(), OpF2->getType())) 450 return false; 451 } 452 } 453 454 ++F1I, ++F2I; 455 } while (F1I != F1E && F2I != F2E); 456 457 return F1I == F1E && F2I == F2E; 458 } 459 460 // Test whether the two functions have equivalent behaviour. 461 bool FunctionComparator::compare() { 462 // We need to recheck everything, but check the things that weren't included 463 // in the hash first. 464 465 if (F1->getAttributes() != F2->getAttributes()) 466 return false; 467 468 if (F1->hasGC() != F2->hasGC()) 469 return false; 470 471 if (F1->hasGC() && F1->getGC() != F2->getGC()) 472 return false; 473 474 if (F1->hasSection() != F2->hasSection()) 475 return false; 476 477 if (F1->hasSection() && F1->getSection() != F2->getSection()) 478 return false; 479 480 if (F1->isVarArg() != F2->isVarArg()) 481 return false; 482 483 // TODO: if it's internal and only used in direct calls, we could handle this 484 // case too. 485 if (F1->getCallingConv() != F2->getCallingConv()) 486 return false; 487 488 if (!isEquivalentType(F1->getFunctionType(), F2->getFunctionType())) 489 return false; 490 491 assert(F1->arg_size() == F2->arg_size() && 492 "Identically typed functions have different numbers of args!"); 493 494 // Visit the arguments so that they get enumerated in the order they're 495 // passed in. 496 for (Function::const_arg_iterator f1i = F1->arg_begin(), 497 f2i = F2->arg_begin(), f1e = F1->arg_end(); f1i != f1e; ++f1i, ++f2i) { 498 if (!enumerate(f1i, f2i)) 499 llvm_unreachable("Arguments repeat!"); 500 } 501 502 // We do a CFG-ordered walk since the actual ordering of the blocks in the 503 // linked list is immaterial. Our walk starts at the entry block for both 504 // functions, then takes each block from each terminator in order. As an 505 // artifact, this also means that unreachable blocks are ignored. 506 SmallVector<const BasicBlock *, 8> F1BBs, F2BBs; 507 SmallSet<const BasicBlock *, 128> VisitedBBs; // in terms of F1. 508 509 F1BBs.push_back(&F1->getEntryBlock()); 510 F2BBs.push_back(&F2->getEntryBlock()); 511 512 VisitedBBs.insert(F1BBs[0]); 513 while (!F1BBs.empty()) { 514 const BasicBlock *F1BB = F1BBs.pop_back_val(); 515 const BasicBlock *F2BB = F2BBs.pop_back_val(); 516 517 if (!enumerate(F1BB, F2BB) || !compare(F1BB, F2BB)) 518 return false; 519 520 const TerminatorInst *F1TI = F1BB->getTerminator(); 521 const TerminatorInst *F2TI = F2BB->getTerminator(); 522 523 assert(F1TI->getNumSuccessors() == F2TI->getNumSuccessors()); 524 for (unsigned i = 0, e = F1TI->getNumSuccessors(); i != e; ++i) { 525 if (!VisitedBBs.insert(F1TI->getSuccessor(i))) 526 continue; 527 528 F1BBs.push_back(F1TI->getSuccessor(i)); 529 F2BBs.push_back(F2TI->getSuccessor(i)); 530 } 531 } 532 return true; 533 } 534 535 namespace { 536 537 /// MergeFunctions finds functions which will generate identical machine code, 538 /// by considering all pointer types to be equivalent. Once identified, 539 /// MergeFunctions will fold them by replacing a call to one to a call to a 540 /// bitcast of the other. 541 /// 542 class MergeFunctions : public ModulePass { 543 public: 544 static char ID; 545 MergeFunctions() 546 : ModulePass(ID), HasGlobalAliases(false) { 547 initializeMergeFunctionsPass(*PassRegistry::getPassRegistry()); 548 } 549 550 bool runOnModule(Module &M); 551 552 private: 553 typedef DenseSet<ComparableFunction> FnSetType; 554 555 /// A work queue of functions that may have been modified and should be 556 /// analyzed again. 557 std::vector<WeakVH> Deferred; 558 559 /// Insert a ComparableFunction into the FnSet, or merge it away if it's 560 /// equal to one that's already present. 561 bool insert(ComparableFunction &NewF); 562 563 /// Remove a Function from the FnSet and queue it up for a second sweep of 564 /// analysis. 565 void remove(Function *F); 566 567 /// Find the functions that use this Value and remove them from FnSet and 568 /// queue the functions. 569 void removeUsers(Value *V); 570 571 /// Replace all direct calls of Old with calls of New. Will bitcast New if 572 /// necessary to make types match. 573 void replaceDirectCallers(Function *Old, Function *New); 574 575 /// Merge two equivalent functions. Upon completion, G may be deleted, or may 576 /// be converted into a thunk. In either case, it should never be visited 577 /// again. 578 void mergeTwoFunctions(Function *F, Function *G); 579 580 /// Replace G with a thunk or an alias to F. Deletes G. 581 void writeThunkOrAlias(Function *F, Function *G); 582 583 /// Replace G with a simple tail call to bitcast(F). Also replace direct uses 584 /// of G with bitcast(F). Deletes G. 585 void writeThunk(Function *F, Function *G); 586 587 /// Replace G with an alias to F. Deletes G. 588 void writeAlias(Function *F, Function *G); 589 590 /// The set of all distinct functions. Use the insert() and remove() methods 591 /// to modify it. 592 FnSetType FnSet; 593 594 /// TargetData for more accurate GEP comparisons. May be NULL. 595 TargetData *TD; 596 597 /// Whether or not the target supports global aliases. 598 bool HasGlobalAliases; 599 }; 600 601 } // end anonymous namespace 602 603 char MergeFunctions::ID = 0; 604 INITIALIZE_PASS(MergeFunctions, "mergefunc", "Merge Functions", false, false) 605 606 ModulePass *llvm::createMergeFunctionsPass() { 607 return new MergeFunctions(); 608 } 609 610 bool MergeFunctions::runOnModule(Module &M) { 611 bool Changed = false; 612 TD = getAnalysisIfAvailable<TargetData>(); 613 614 for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) { 615 if (!I->isDeclaration() && !I->hasAvailableExternallyLinkage()) 616 Deferred.push_back(WeakVH(I)); 617 } 618 FnSet.resize(Deferred.size()); 619 620 do { 621 std::vector<WeakVH> Worklist; 622 Deferred.swap(Worklist); 623 624 DEBUG(dbgs() << "size of module: " << M.size() << '\n'); 625 DEBUG(dbgs() << "size of worklist: " << Worklist.size() << '\n'); 626 627 // Insert only strong functions and merge them. Strong function merging 628 // always deletes one of them. 629 for (std::vector<WeakVH>::iterator I = Worklist.begin(), 630 E = Worklist.end(); I != E; ++I) { 631 if (!*I) continue; 632 Function *F = cast<Function>(*I); 633 if (!F->isDeclaration() && !F->hasAvailableExternallyLinkage() && 634 !F->mayBeOverridden()) { 635 ComparableFunction CF = ComparableFunction(F, TD); 636 Changed |= insert(CF); 637 } 638 } 639 640 // Insert only weak functions and merge them. By doing these second we 641 // create thunks to the strong function when possible. When two weak 642 // functions are identical, we create a new strong function with two weak 643 // weak thunks to it which are identical but not mergable. 644 for (std::vector<WeakVH>::iterator I = Worklist.begin(), 645 E = Worklist.end(); I != E; ++I) { 646 if (!*I) continue; 647 Function *F = cast<Function>(*I); 648 if (!F->isDeclaration() && !F->hasAvailableExternallyLinkage() && 649 F->mayBeOverridden()) { 650 ComparableFunction CF = ComparableFunction(F, TD); 651 Changed |= insert(CF); 652 } 653 } 654 DEBUG(dbgs() << "size of FnSet: " << FnSet.size() << '\n'); 655 } while (!Deferred.empty()); 656 657 FnSet.clear(); 658 659 return Changed; 660 } 661 662 bool DenseMapInfo<ComparableFunction>::isEqual(const ComparableFunction &LHS, 663 const ComparableFunction &RHS) { 664 if (LHS.getFunc() == RHS.getFunc() && 665 LHS.getHash() == RHS.getHash()) 666 return true; 667 if (!LHS.getFunc() || !RHS.getFunc()) 668 return false; 669 670 // One of these is a special "underlying pointer comparison only" object. 671 if (LHS.getTD() == ComparableFunction::LookupOnly || 672 RHS.getTD() == ComparableFunction::LookupOnly) 673 return false; 674 675 assert(LHS.getTD() == RHS.getTD() && 676 "Comparing functions for different targets"); 677 678 return FunctionComparator(LHS.getTD(), LHS.getFunc(), 679 RHS.getFunc()).compare(); 680 } 681 682 // Replace direct callers of Old with New. 683 void MergeFunctions::replaceDirectCallers(Function *Old, Function *New) { 684 Constant *BitcastNew = ConstantExpr::getBitCast(New, Old->getType()); 685 for (Value::use_iterator UI = Old->use_begin(), UE = Old->use_end(); 686 UI != UE;) { 687 Value::use_iterator TheIter = UI; 688 ++UI; 689 CallSite CS(*TheIter); 690 if (CS && CS.isCallee(TheIter)) { 691 remove(CS.getInstruction()->getParent()->getParent()); 692 TheIter.getUse().set(BitcastNew); 693 } 694 } 695 } 696 697 // Replace G with an alias to F if possible, or else a thunk to F. Deletes G. 698 void MergeFunctions::writeThunkOrAlias(Function *F, Function *G) { 699 if (HasGlobalAliases && G->hasUnnamedAddr()) { 700 if (G->hasExternalLinkage() || G->hasLocalLinkage() || 701 G->hasWeakLinkage()) { 702 writeAlias(F, G); 703 return; 704 } 705 } 706 707 writeThunk(F, G); 708 } 709 710 // Replace G with a simple tail call to bitcast(F). Also replace direct uses 711 // of G with bitcast(F). Deletes G. 712 void MergeFunctions::writeThunk(Function *F, Function *G) { 713 if (!G->mayBeOverridden()) { 714 // Redirect direct callers of G to F. 715 replaceDirectCallers(G, F); 716 } 717 718 // If G was internal then we may have replaced all uses of G with F. If so, 719 // stop here and delete G. There's no need for a thunk. 720 if (G->hasLocalLinkage() && G->use_empty()) { 721 G->eraseFromParent(); 722 return; 723 } 724 725 Function *NewG = Function::Create(G->getFunctionType(), G->getLinkage(), "", 726 G->getParent()); 727 BasicBlock *BB = BasicBlock::Create(F->getContext(), "", NewG); 728 IRBuilder<false> Builder(BB); 729 730 SmallVector<Value *, 16> Args; 731 unsigned i = 0; 732 FunctionType *FFTy = F->getFunctionType(); 733 for (Function::arg_iterator AI = NewG->arg_begin(), AE = NewG->arg_end(); 734 AI != AE; ++AI) { 735 Args.push_back(Builder.CreateBitCast(AI, FFTy->getParamType(i))); 736 ++i; 737 } 738 739 CallInst *CI = Builder.CreateCall(F, Args); 740 CI->setTailCall(); 741 CI->setCallingConv(F->getCallingConv()); 742 if (NewG->getReturnType()->isVoidTy()) { 743 Builder.CreateRetVoid(); 744 } else { 745 Builder.CreateRet(Builder.CreateBitCast(CI, NewG->getReturnType())); 746 } 747 748 NewG->copyAttributesFrom(G); 749 NewG->takeName(G); 750 removeUsers(G); 751 G->replaceAllUsesWith(NewG); 752 G->eraseFromParent(); 753 754 DEBUG(dbgs() << "writeThunk: " << NewG->getName() << '\n'); 755 ++NumThunksWritten; 756 } 757 758 // Replace G with an alias to F and delete G. 759 void MergeFunctions::writeAlias(Function *F, Function *G) { 760 Constant *BitcastF = ConstantExpr::getBitCast(F, G->getType()); 761 GlobalAlias *GA = new GlobalAlias(G->getType(), G->getLinkage(), "", 762 BitcastF, G->getParent()); 763 F->setAlignment(std::max(F->getAlignment(), G->getAlignment())); 764 GA->takeName(G); 765 GA->setVisibility(G->getVisibility()); 766 removeUsers(G); 767 G->replaceAllUsesWith(GA); 768 G->eraseFromParent(); 769 770 DEBUG(dbgs() << "writeAlias: " << GA->getName() << '\n'); 771 ++NumAliasesWritten; 772 } 773 774 // Merge two equivalent functions. Upon completion, Function G is deleted. 775 void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) { 776 if (F->mayBeOverridden()) { 777 assert(G->mayBeOverridden()); 778 779 if (HasGlobalAliases) { 780 // Make them both thunks to the same internal function. 781 Function *H = Function::Create(F->getFunctionType(), F->getLinkage(), "", 782 F->getParent()); 783 H->copyAttributesFrom(F); 784 H->takeName(F); 785 removeUsers(F); 786 F->replaceAllUsesWith(H); 787 788 unsigned MaxAlignment = std::max(G->getAlignment(), H->getAlignment()); 789 790 writeAlias(F, G); 791 writeAlias(F, H); 792 793 F->setAlignment(MaxAlignment); 794 F->setLinkage(GlobalValue::PrivateLinkage); 795 } else { 796 // We can't merge them. Instead, pick one and update all direct callers 797 // to call it and hope that we improve the instruction cache hit rate. 798 replaceDirectCallers(G, F); 799 } 800 801 ++NumDoubleWeak; 802 } else { 803 writeThunkOrAlias(F, G); 804 } 805 806 ++NumFunctionsMerged; 807 } 808 809 // Insert a ComparableFunction into the FnSet, or merge it away if equal to one 810 // that was already inserted. 811 bool MergeFunctions::insert(ComparableFunction &NewF) { 812 std::pair<FnSetType::iterator, bool> Result = FnSet.insert(NewF); 813 if (Result.second) { 814 DEBUG(dbgs() << "Inserting as unique: " << NewF.getFunc()->getName() << '\n'); 815 return false; 816 } 817 818 const ComparableFunction &OldF = *Result.first; 819 820 // Never thunk a strong function to a weak function. 821 assert(!OldF.getFunc()->mayBeOverridden() || 822 NewF.getFunc()->mayBeOverridden()); 823 824 DEBUG(dbgs() << " " << OldF.getFunc()->getName() << " == " 825 << NewF.getFunc()->getName() << '\n'); 826 827 Function *DeleteF = NewF.getFunc(); 828 NewF.release(); 829 mergeTwoFunctions(OldF.getFunc(), DeleteF); 830 return true; 831 } 832 833 // Remove a function from FnSet. If it was already in FnSet, add it to Deferred 834 // so that we'll look at it in the next round. 835 void MergeFunctions::remove(Function *F) { 836 // We need to make sure we remove F, not a function "equal" to F per the 837 // function equality comparator. 838 // 839 // The special "lookup only" ComparableFunction bypasses the expensive 840 // function comparison in favour of a pointer comparison on the underlying 841 // Function*'s. 842 ComparableFunction CF = ComparableFunction(F, ComparableFunction::LookupOnly); 843 if (FnSet.erase(CF)) { 844 DEBUG(dbgs() << "Removed " << F->getName() << " from set and deferred it.\n"); 845 Deferred.push_back(F); 846 } 847 } 848 849 // For each instruction used by the value, remove() the function that contains 850 // the instruction. This should happen right before a call to RAUW. 851 void MergeFunctions::removeUsers(Value *V) { 852 std::vector<Value *> Worklist; 853 Worklist.push_back(V); 854 while (!Worklist.empty()) { 855 Value *V = Worklist.back(); 856 Worklist.pop_back(); 857 858 for (Value::use_iterator UI = V->use_begin(), UE = V->use_end(); 859 UI != UE; ++UI) { 860 Use &U = UI.getUse(); 861 if (Instruction *I = dyn_cast<Instruction>(U.getUser())) { 862 remove(I->getParent()->getParent()); 863 } else if (isa<GlobalValue>(U.getUser())) { 864 // do nothing 865 } else if (Constant *C = dyn_cast<Constant>(U.getUser())) { 866 for (Value::use_iterator CUI = C->use_begin(), CUE = C->use_end(); 867 CUI != CUE; ++CUI) 868 Worklist.push_back(*CUI); 869 } 870 } 871 } 872 } 873