1 //===- MergeFunctions.cpp - Merge identical functions ---------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This pass looks for equivalent functions that are mergable and folds them.
12 // A hash is computed from the function, based on its type and number of
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.
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.
24 //===----------------------------------------------------------------------===//
28 // * virtual functions.
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.
34 // * switch from n^2 pair-wise comparisons to an n-way comparison for each
37 // * be smarter about bitcasts.
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.
44 //===----------------------------------------------------------------------===//
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"
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");
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 const FunctionType
*FTy
= F
->getFunctionType();
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();
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
{
98 static const ComparableFunction EmptyKey
;
99 static const ComparableFunction TombstoneKey
;
100 static TargetData
* const LookupOnly
;
102 ComparableFunction(Function
*Func
, TargetData
*TD
)
103 : Func(Func
), Hash(profileFunction(Func
)), TD(TD
) {}
105 Function
*getFunc() const { return Func
; }
106 unsigned getHash() const { return Hash
; }
107 TargetData
*getTD() const { return TD
; }
109 // Drops AssertingVH reference to the function. Outside of debug mode, this
113 "Attempted to release function twice, or release empty/tombstone!");
118 explicit ComparableFunction(unsigned Hash
)
119 : Func(NULL
), Hash(Hash
), TD(NULL
) {}
121 AssertingVH
<Function
> Func
;
126 const ComparableFunction
ComparableFunction::EmptyKey
= ComparableFunction(0);
127 const ComparableFunction
ComparableFunction::TombstoneKey
=
128 ComparableFunction(1);
129 TargetData
*const ComparableFunction::LookupOnly
= (TargetData
*)(-1);
135 struct DenseMapInfo
<ComparableFunction
> {
136 static ComparableFunction
getEmptyKey() {
137 return ComparableFunction::EmptyKey
;
139 static ComparableFunction
getTombstoneKey() {
140 return ComparableFunction::TombstoneKey
;
142 static unsigned getHashValue(const ComparableFunction
&CF
) {
145 static bool isEqual(const ComparableFunction
&LHS
,
146 const ComparableFunction
&RHS
);
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
{
158 FunctionComparator(const TargetData
*TD
, const Function
*F1
,
160 : F1(F1
), F2(F2
), TD(TD
) {}
162 /// Test whether the two functions have equivalent behaviour.
166 /// Test whether two basic blocks have equivalent behaviour.
167 bool compare(const BasicBlock
*BB1
, const BasicBlock
*BB2
);
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
172 bool enumerate(const Value
*V1
, const Value
*V2
);
174 /// Compare two Instructions for equivalence, similar to
175 /// Instruction::isSameOperationAs but with modifications to the type
177 bool isEquivalentOperation(const Instruction
*I1
,
178 const Instruction
*I2
) const;
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
));
187 /// Compare two Types, treating all pointer types as equal.
188 bool isEquivalentType(const Type
*Ty1
, const Type
*Ty2
) const;
190 // The two functions undergoing comparison.
191 const Function
*F1
, *F2
;
193 const TargetData
*TD
;
195 DenseMap
<const Value
*, const Value
*> id_map
;
196 DenseSet
<const Value
*> seen_values
;
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(const Type
*Ty1
,
204 const Type
*Ty2
) const {
207 if (Ty1
->getTypeID() != Ty2
->getTypeID()) {
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;
216 switch (Ty1
->getTypeID()) {
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.
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
:
235 case Type::PointerTyID
: {
236 const PointerType
*PTy1
= cast
<PointerType
>(Ty1
);
237 const PointerType
*PTy2
= cast
<PointerType
>(Ty2
);
238 return PTy1
->getAddressSpace() == PTy2
->getAddressSpace();
241 case Type::StructTyID
: {
242 const StructType
*STy1
= cast
<StructType
>(Ty1
);
243 const StructType
*STy2
= cast
<StructType
>(Ty2
);
244 if (STy1
->getNumElements() != STy2
->getNumElements())
247 if (STy1
->isPacked() != STy2
->isPacked())
250 for (unsigned i
= 0, e
= STy1
->getNumElements(); i
!= e
; ++i
) {
251 if (!isEquivalentType(STy1
->getElementType(i
), STy2
->getElementType(i
)))
257 case Type::FunctionTyID
: {
258 const FunctionType
*FTy1
= cast
<FunctionType
>(Ty1
);
259 const FunctionType
*FTy2
= cast
<FunctionType
>(Ty2
);
260 if (FTy1
->getNumParams() != FTy2
->getNumParams() ||
261 FTy1
->isVarArg() != FTy2
->isVarArg())
264 if (!isEquivalentType(FTy1
->getReturnType(), FTy2
->getReturnType()))
267 for (unsigned i
= 0, e
= FTy1
->getNumParams(); i
!= e
; ++i
) {
268 if (!isEquivalentType(FTy1
->getParamType(i
), FTy2
->getParamType(i
)))
274 case Type::ArrayTyID
: {
275 const ArrayType
*ATy1
= cast
<ArrayType
>(Ty1
);
276 const ArrayType
*ATy2
= cast
<ArrayType
>(Ty2
);
277 return ATy1
->getNumElements() == ATy2
->getNumElements() &&
278 isEquivalentType(ATy1
->getElementType(), ATy2
->getElementType());
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
))
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()))
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 if (const StoreInst
*SI
= dyn_cast
<StoreInst
>(I1
))
310 return SI
->isVolatile() == cast
<StoreInst
>(I2
)->isVolatile() &&
311 SI
->getAlignment() == cast
<StoreInst
>(I2
)->getAlignment();
312 if (const CmpInst
*CI
= dyn_cast
<CmpInst
>(I1
))
313 return CI
->getPredicate() == cast
<CmpInst
>(I2
)->getPredicate();
314 if (const CallInst
*CI
= dyn_cast
<CallInst
>(I1
))
315 return CI
->getCallingConv() == cast
<CallInst
>(I2
)->getCallingConv() &&
316 CI
->getAttributes() == cast
<CallInst
>(I2
)->getAttributes();
317 if (const InvokeInst
*CI
= dyn_cast
<InvokeInst
>(I1
))
318 return CI
->getCallingConv() == cast
<InvokeInst
>(I2
)->getCallingConv() &&
319 CI
->getAttributes() == cast
<InvokeInst
>(I2
)->getAttributes();
320 if (const InsertValueInst
*IVI
= dyn_cast
<InsertValueInst
>(I1
)) {
321 if (IVI
->getNumIndices() != cast
<InsertValueInst
>(I2
)->getNumIndices())
323 for (unsigned i
= 0, e
= IVI
->getNumIndices(); i
!= e
; ++i
)
324 if (IVI
->idx_begin()[i
] != cast
<InsertValueInst
>(I2
)->idx_begin()[i
])
328 if (const ExtractValueInst
*EVI
= dyn_cast
<ExtractValueInst
>(I1
)) {
329 if (EVI
->getNumIndices() != cast
<ExtractValueInst
>(I2
)->getNumIndices())
331 for (unsigned i
= 0, e
= EVI
->getNumIndices(); i
!= e
; ++i
)
332 if (EVI
->idx_begin()[i
] != cast
<ExtractValueInst
>(I2
)->idx_begin()[i
])
340 // Determine whether two GEP operations perform the same underlying arithmetic.
341 bool FunctionComparator::isEquivalentGEP(const GEPOperator
*GEP1
,
342 const GEPOperator
*GEP2
) {
343 // When we have target data, we can reduce the GEP down to the value in bytes
344 // added to the address.
345 if (TD
&& GEP1
->hasAllConstantIndices() && GEP2
->hasAllConstantIndices()) {
346 SmallVector
<Value
*, 8> Indices1(GEP1
->idx_begin(), GEP1
->idx_end());
347 SmallVector
<Value
*, 8> Indices2(GEP2
->idx_begin(), GEP2
->idx_end());
348 uint64_t Offset1
= TD
->getIndexedOffset(GEP1
->getPointerOperandType(),
349 Indices1
.data(), Indices1
.size());
350 uint64_t Offset2
= TD
->getIndexedOffset(GEP2
->getPointerOperandType(),
351 Indices2
.data(), Indices2
.size());
352 return Offset1
== Offset2
;
355 if (GEP1
->getPointerOperand()->getType() !=
356 GEP2
->getPointerOperand()->getType())
359 if (GEP1
->getNumOperands() != GEP2
->getNumOperands())
362 for (unsigned i
= 0, e
= GEP1
->getNumOperands(); i
!= e
; ++i
) {
363 if (!enumerate(GEP1
->getOperand(i
), GEP2
->getOperand(i
)))
370 // Compare two values used by the two functions under pair-wise comparison. If
371 // this is the first time the values are seen, they're added to the mapping so
372 // that we will detect mismatches on next use.
373 bool FunctionComparator::enumerate(const Value
*V1
, const Value
*V2
) {
374 // Check for function @f1 referring to itself and function @f2 referring to
375 // itself, or referring to each other, or both referring to either of them.
376 // They're all equivalent if the two functions are otherwise equivalent.
377 if (V1
== F1
&& V2
== F2
)
379 if (V1
== F2
&& V2
== F1
)
382 if (const Constant
*C1
= dyn_cast
<Constant
>(V1
)) {
383 if (V1
== V2
) return true;
384 const Constant
*C2
= dyn_cast
<Constant
>(V2
);
385 if (!C2
) return false;
386 // TODO: constant expressions with GEP or references to F1 or F2.
387 if (C1
->isNullValue() && C2
->isNullValue() &&
388 isEquivalentType(C1
->getType(), C2
->getType()))
390 // Try bitcasting C2 to C1's type. If the bitcast is legal and returns C1
391 // then they must have equal bit patterns.
392 return C1
->getType()->canLosslesslyBitCastTo(C2
->getType()) &&
393 C1
== ConstantExpr::getBitCast(const_cast<Constant
*>(C2
), C1
->getType());
396 if (isa
<InlineAsm
>(V1
) || isa
<InlineAsm
>(V2
))
399 // Check that V1 maps to V2. If we find a value that V1 maps to then we simply
400 // check whether it's equal to V2. When there is no mapping then we need to
401 // ensure that V2 isn't already equivalent to something else. For this
402 // purpose, we track the V2 values in a set.
404 const Value
*&map_elem
= id_map
[V1
];
406 return map_elem
== V2
;
407 if (!seen_values
.insert(V2
).second
)
413 // Test whether two basic blocks have equivalent behaviour.
414 bool FunctionComparator::compare(const BasicBlock
*BB1
, const BasicBlock
*BB2
) {
415 BasicBlock::const_iterator F1I
= BB1
->begin(), F1E
= BB1
->end();
416 BasicBlock::const_iterator F2I
= BB2
->begin(), F2E
= BB2
->end();
419 if (!enumerate(F1I
, F2I
))
422 if (const GetElementPtrInst
*GEP1
= dyn_cast
<GetElementPtrInst
>(F1I
)) {
423 const GetElementPtrInst
*GEP2
= dyn_cast
<GetElementPtrInst
>(F2I
);
427 if (!enumerate(GEP1
->getPointerOperand(), GEP2
->getPointerOperand()))
430 if (!isEquivalentGEP(GEP1
, GEP2
))
433 if (!isEquivalentOperation(F1I
, F2I
))
436 assert(F1I
->getNumOperands() == F2I
->getNumOperands());
437 for (unsigned i
= 0, e
= F1I
->getNumOperands(); i
!= e
; ++i
) {
438 Value
*OpF1
= F1I
->getOperand(i
);
439 Value
*OpF2
= F2I
->getOperand(i
);
441 if (!enumerate(OpF1
, OpF2
))
444 if (OpF1
->getValueID() != OpF2
->getValueID() ||
445 !isEquivalentType(OpF1
->getType(), OpF2
->getType()))
451 } while (F1I
!= F1E
&& F2I
!= F2E
);
453 return F1I
== F1E
&& F2I
== F2E
;
456 // Test whether the two functions have equivalent behaviour.
457 bool FunctionComparator::compare() {
458 // We need to recheck everything, but check the things that weren't included
459 // in the hash first.
461 if (F1
->getAttributes() != F2
->getAttributes())
464 if (F1
->hasGC() != F2
->hasGC())
467 if (F1
->hasGC() && F1
->getGC() != F2
->getGC())
470 if (F1
->hasSection() != F2
->hasSection())
473 if (F1
->hasSection() && F1
->getSection() != F2
->getSection())
476 if (F1
->isVarArg() != F2
->isVarArg())
479 // TODO: if it's internal and only used in direct calls, we could handle this
481 if (F1
->getCallingConv() != F2
->getCallingConv())
484 if (!isEquivalentType(F1
->getFunctionType(), F2
->getFunctionType()))
487 assert(F1
->arg_size() == F2
->arg_size() &&
488 "Identically typed functions have different numbers of args!");
490 // Visit the arguments so that they get enumerated in the order they're
492 for (Function::const_arg_iterator f1i
= F1
->arg_begin(),
493 f2i
= F2
->arg_begin(), f1e
= F1
->arg_end(); f1i
!= f1e
; ++f1i
, ++f2i
) {
494 if (!enumerate(f1i
, f2i
))
495 llvm_unreachable("Arguments repeat!");
498 // We do a CFG-ordered walk since the actual ordering of the blocks in the
499 // linked list is immaterial. Our walk starts at the entry block for both
500 // functions, then takes each block from each terminator in order. As an
501 // artifact, this also means that unreachable blocks are ignored.
502 SmallVector
<const BasicBlock
*, 8> F1BBs
, F2BBs
;
503 SmallSet
<const BasicBlock
*, 128> VisitedBBs
; // in terms of F1.
505 F1BBs
.push_back(&F1
->getEntryBlock());
506 F2BBs
.push_back(&F2
->getEntryBlock());
508 VisitedBBs
.insert(F1BBs
[0]);
509 while (!F1BBs
.empty()) {
510 const BasicBlock
*F1BB
= F1BBs
.pop_back_val();
511 const BasicBlock
*F2BB
= F2BBs
.pop_back_val();
513 if (!enumerate(F1BB
, F2BB
) || !compare(F1BB
, F2BB
))
516 const TerminatorInst
*F1TI
= F1BB
->getTerminator();
517 const TerminatorInst
*F2TI
= F2BB
->getTerminator();
519 assert(F1TI
->getNumSuccessors() == F2TI
->getNumSuccessors());
520 for (unsigned i
= 0, e
= F1TI
->getNumSuccessors(); i
!= e
; ++i
) {
521 if (!VisitedBBs
.insert(F1TI
->getSuccessor(i
)))
524 F1BBs
.push_back(F1TI
->getSuccessor(i
));
525 F2BBs
.push_back(F2TI
->getSuccessor(i
));
533 /// MergeFunctions finds functions which will generate identical machine code,
534 /// by considering all pointer types to be equivalent. Once identified,
535 /// MergeFunctions will fold them by replacing a call to one to a call to a
536 /// bitcast of the other.
538 class MergeFunctions
: public ModulePass
{
542 : ModulePass(ID
), HasGlobalAliases(false) {
543 initializeMergeFunctionsPass(*PassRegistry::getPassRegistry());
546 bool runOnModule(Module
&M
);
549 typedef DenseSet
<ComparableFunction
> FnSetType
;
551 /// A work queue of functions that may have been modified and should be
553 std::vector
<WeakVH
> Deferred
;
555 /// Insert a ComparableFunction into the FnSet, or merge it away if it's
556 /// equal to one that's already present.
557 bool insert(ComparableFunction
&NewF
);
559 /// Remove a Function from the FnSet and queue it up for a second sweep of
561 void remove(Function
*F
);
563 /// Find the functions that use this Value and remove them from FnSet and
564 /// queue the functions.
565 void removeUsers(Value
*V
);
567 /// Replace all direct calls of Old with calls of New. Will bitcast New if
568 /// necessary to make types match.
569 void replaceDirectCallers(Function
*Old
, Function
*New
);
571 /// Merge two equivalent functions. Upon completion, G may be deleted, or may
572 /// be converted into a thunk. In either case, it should never be visited
574 void mergeTwoFunctions(Function
*F
, Function
*G
);
576 /// Replace G with a thunk or an alias to F. Deletes G.
577 void writeThunkOrAlias(Function
*F
, Function
*G
);
579 /// Replace G with a simple tail call to bitcast(F). Also replace direct uses
580 /// of G with bitcast(F). Deletes G.
581 void writeThunk(Function
*F
, Function
*G
);
583 /// Replace G with an alias to F. Deletes G.
584 void writeAlias(Function
*F
, Function
*G
);
586 /// The set of all distinct functions. Use the insert() and remove() methods
590 /// TargetData for more accurate GEP comparisons. May be NULL.
593 /// Whether or not the target supports global aliases.
594 bool HasGlobalAliases
;
597 } // end anonymous namespace
599 char MergeFunctions::ID
= 0;
600 INITIALIZE_PASS(MergeFunctions
, "mergefunc", "Merge Functions", false, false)
602 ModulePass
*llvm::createMergeFunctionsPass() {
603 return new MergeFunctions();
606 bool MergeFunctions::runOnModule(Module
&M
) {
607 bool Changed
= false;
608 TD
= getAnalysisIfAvailable
<TargetData
>();
610 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ++I
) {
611 if (!I
->isDeclaration() && !I
->hasAvailableExternallyLinkage())
612 Deferred
.push_back(WeakVH(I
));
614 FnSet
.resize(Deferred
.size());
617 std::vector
<WeakVH
> Worklist
;
618 Deferred
.swap(Worklist
);
620 DEBUG(dbgs() << "size of module: " << M
.size() << '\n');
621 DEBUG(dbgs() << "size of worklist: " << Worklist
.size() << '\n');
623 // Insert only strong functions and merge them. Strong function merging
624 // always deletes one of them.
625 for (std::vector
<WeakVH
>::iterator I
= Worklist
.begin(),
626 E
= Worklist
.end(); I
!= E
; ++I
) {
628 Function
*F
= cast
<Function
>(*I
);
629 if (!F
->isDeclaration() && !F
->hasAvailableExternallyLinkage() &&
630 !F
->mayBeOverridden()) {
631 ComparableFunction CF
= ComparableFunction(F
, TD
);
632 Changed
|= insert(CF
);
636 // Insert only weak functions and merge them. By doing these second we
637 // create thunks to the strong function when possible. When two weak
638 // functions are identical, we create a new strong function with two weak
639 // weak thunks to it which are identical but not mergable.
640 for (std::vector
<WeakVH
>::iterator I
= Worklist
.begin(),
641 E
= Worklist
.end(); I
!= E
; ++I
) {
643 Function
*F
= cast
<Function
>(*I
);
644 if (!F
->isDeclaration() && !F
->hasAvailableExternallyLinkage() &&
645 F
->mayBeOverridden()) {
646 ComparableFunction CF
= ComparableFunction(F
, TD
);
647 Changed
|= insert(CF
);
650 DEBUG(dbgs() << "size of FnSet: " << FnSet
.size() << '\n');
651 } while (!Deferred
.empty());
658 bool DenseMapInfo
<ComparableFunction
>::isEqual(const ComparableFunction
&LHS
,
659 const ComparableFunction
&RHS
) {
660 if (LHS
.getFunc() == RHS
.getFunc() &&
661 LHS
.getHash() == RHS
.getHash())
663 if (!LHS
.getFunc() || !RHS
.getFunc())
666 // One of these is a special "underlying pointer comparison only" object.
667 if (LHS
.getTD() == ComparableFunction::LookupOnly
||
668 RHS
.getTD() == ComparableFunction::LookupOnly
)
671 assert(LHS
.getTD() == RHS
.getTD() &&
672 "Comparing functions for different targets");
674 return FunctionComparator(LHS
.getTD(), LHS
.getFunc(),
675 RHS
.getFunc()).compare();
678 // Replace direct callers of Old with New.
679 void MergeFunctions::replaceDirectCallers(Function
*Old
, Function
*New
) {
680 Constant
*BitcastNew
= ConstantExpr::getBitCast(New
, Old
->getType());
681 for (Value::use_iterator UI
= Old
->use_begin(), UE
= Old
->use_end();
683 Value::use_iterator TheIter
= UI
;
685 CallSite
CS(*TheIter
);
686 if (CS
&& CS
.isCallee(TheIter
)) {
687 remove(CS
.getInstruction()->getParent()->getParent());
688 TheIter
.getUse().set(BitcastNew
);
693 // Replace G with an alias to F if possible, or else a thunk to F. Deletes G.
694 void MergeFunctions::writeThunkOrAlias(Function
*F
, Function
*G
) {
695 if (HasGlobalAliases
&& G
->hasUnnamedAddr()) {
696 if (G
->hasExternalLinkage() || G
->hasLocalLinkage() ||
697 G
->hasWeakLinkage()) {
706 // Replace G with a simple tail call to bitcast(F). Also replace direct uses
707 // of G with bitcast(F). Deletes G.
708 void MergeFunctions::writeThunk(Function
*F
, Function
*G
) {
709 if (!G
->mayBeOverridden()) {
710 // Redirect direct callers of G to F.
711 replaceDirectCallers(G
, F
);
714 // If G was internal then we may have replaced all uses of G with F. If so,
715 // stop here and delete G. There's no need for a thunk.
716 if (G
->hasLocalLinkage() && G
->use_empty()) {
717 G
->eraseFromParent();
721 Function
*NewG
= Function::Create(G
->getFunctionType(), G
->getLinkage(), "",
723 BasicBlock
*BB
= BasicBlock::Create(F
->getContext(), "", NewG
);
724 IRBuilder
<false> Builder(BB
);
726 SmallVector
<Value
*, 16> Args
;
728 const FunctionType
*FFTy
= F
->getFunctionType();
729 for (Function::arg_iterator AI
= NewG
->arg_begin(), AE
= NewG
->arg_end();
731 Args
.push_back(Builder
.CreateBitCast(AI
, FFTy
->getParamType(i
)));
735 CallInst
*CI
= Builder
.CreateCall(F
, Args
.begin(), Args
.end());
737 CI
->setCallingConv(F
->getCallingConv());
738 if (NewG
->getReturnType()->isVoidTy()) {
739 Builder
.CreateRetVoid();
741 Builder
.CreateRet(Builder
.CreateBitCast(CI
, NewG
->getReturnType()));
744 NewG
->copyAttributesFrom(G
);
747 G
->replaceAllUsesWith(NewG
);
748 G
->eraseFromParent();
750 DEBUG(dbgs() << "writeThunk: " << NewG
->getName() << '\n');
754 // Replace G with an alias to F and delete G.
755 void MergeFunctions::writeAlias(Function
*F
, Function
*G
) {
756 Constant
*BitcastF
= ConstantExpr::getBitCast(F
, G
->getType());
757 GlobalAlias
*GA
= new GlobalAlias(G
->getType(), G
->getLinkage(), "",
758 BitcastF
, G
->getParent());
759 F
->setAlignment(std::max(F
->getAlignment(), G
->getAlignment()));
761 GA
->setVisibility(G
->getVisibility());
763 G
->replaceAllUsesWith(GA
);
764 G
->eraseFromParent();
766 DEBUG(dbgs() << "writeAlias: " << GA
->getName() << '\n');
770 // Merge two equivalent functions. Upon completion, Function G is deleted.
771 void MergeFunctions::mergeTwoFunctions(Function
*F
, Function
*G
) {
772 if (F
->mayBeOverridden()) {
773 assert(G
->mayBeOverridden());
775 if (HasGlobalAliases
) {
776 // Make them both thunks to the same internal function.
777 Function
*H
= Function::Create(F
->getFunctionType(), F
->getLinkage(), "",
779 H
->copyAttributesFrom(F
);
782 F
->replaceAllUsesWith(H
);
784 unsigned MaxAlignment
= std::max(G
->getAlignment(), H
->getAlignment());
789 F
->setAlignment(MaxAlignment
);
790 F
->setLinkage(GlobalValue::PrivateLinkage
);
792 // We can't merge them. Instead, pick one and update all direct callers
793 // to call it and hope that we improve the instruction cache hit rate.
794 replaceDirectCallers(G
, F
);
799 writeThunkOrAlias(F
, G
);
802 ++NumFunctionsMerged
;
805 // Insert a ComparableFunction into the FnSet, or merge it away if equal to one
806 // that was already inserted.
807 bool MergeFunctions::insert(ComparableFunction
&NewF
) {
808 std::pair
<FnSetType::iterator
, bool> Result
= FnSet
.insert(NewF
);
810 DEBUG(dbgs() << "Inserting as unique: " << NewF
.getFunc()->getName() << '\n');
814 const ComparableFunction
&OldF
= *Result
.first
;
816 // Never thunk a strong function to a weak function.
817 assert(!OldF
.getFunc()->mayBeOverridden() ||
818 NewF
.getFunc()->mayBeOverridden());
820 DEBUG(dbgs() << " " << OldF
.getFunc()->getName() << " == "
821 << NewF
.getFunc()->getName() << '\n');
823 Function
*DeleteF
= NewF
.getFunc();
825 mergeTwoFunctions(OldF
.getFunc(), DeleteF
);
829 // Remove a function from FnSet. If it was already in FnSet, add it to Deferred
830 // so that we'll look at it in the next round.
831 void MergeFunctions::remove(Function
*F
) {
832 // We need to make sure we remove F, not a function "equal" to F per the
833 // function equality comparator.
835 // The special "lookup only" ComparableFunction bypasses the expensive
836 // function comparison in favour of a pointer comparison on the underlying
838 ComparableFunction CF
= ComparableFunction(F
, ComparableFunction::LookupOnly
);
839 if (FnSet
.erase(CF
)) {
840 DEBUG(dbgs() << "Removed " << F
->getName() << " from set and deferred it.\n");
841 Deferred
.push_back(F
);
845 // For each instruction used by the value, remove() the function that contains
846 // the instruction. This should happen right before a call to RAUW.
847 void MergeFunctions::removeUsers(Value
*V
) {
848 std::vector
<Value
*> Worklist
;
849 Worklist
.push_back(V
);
850 while (!Worklist
.empty()) {
851 Value
*V
= Worklist
.back();
854 for (Value::use_iterator UI
= V
->use_begin(), UE
= V
->use_end();
856 Use
&U
= UI
.getUse();
857 if (Instruction
*I
= dyn_cast
<Instruction
>(U
.getUser())) {
858 remove(I
->getParent()->getParent());
859 } else if (isa
<GlobalValue
>(U
.getUser())) {
861 } else if (Constant
*C
= dyn_cast
<Constant
>(U
.getUser())) {
862 for (Value::use_iterator CUI
= C
->use_begin(), CUE
= C
->use_end();
864 Worklist
.push_back(*CUI
);