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::OpaqueTyID
:
222 case Type::VectorTyID
:
223 // Ty1 == Ty2 would have returned true earlier.
227 case Type::FloatTyID
:
228 case Type::DoubleTyID
:
229 case Type::X86_FP80TyID
:
230 case Type::FP128TyID
:
231 case Type::PPC_FP128TyID
:
232 case Type::LabelTyID
:
233 case Type::MetadataTyID
:
236 case Type::PointerTyID
: {
237 const PointerType
*PTy1
= cast
<PointerType
>(Ty1
);
238 const PointerType
*PTy2
= cast
<PointerType
>(Ty2
);
239 return PTy1
->getAddressSpace() == PTy2
->getAddressSpace();
242 case Type::StructTyID
: {
243 const StructType
*STy1
= cast
<StructType
>(Ty1
);
244 const StructType
*STy2
= cast
<StructType
>(Ty2
);
245 if (STy1
->getNumElements() != STy2
->getNumElements())
248 if (STy1
->isPacked() != STy2
->isPacked())
251 for (unsigned i
= 0, e
= STy1
->getNumElements(); i
!= e
; ++i
) {
252 if (!isEquivalentType(STy1
->getElementType(i
), STy2
->getElementType(i
)))
258 case Type::FunctionTyID
: {
259 const FunctionType
*FTy1
= cast
<FunctionType
>(Ty1
);
260 const FunctionType
*FTy2
= cast
<FunctionType
>(Ty2
);
261 if (FTy1
->getNumParams() != FTy2
->getNumParams() ||
262 FTy1
->isVarArg() != FTy2
->isVarArg())
265 if (!isEquivalentType(FTy1
->getReturnType(), FTy2
->getReturnType()))
268 for (unsigned i
= 0, e
= FTy1
->getNumParams(); i
!= e
; ++i
) {
269 if (!isEquivalentType(FTy1
->getParamType(i
), FTy2
->getParamType(i
)))
275 case Type::ArrayTyID
: {
276 const ArrayType
*ATy1
= cast
<ArrayType
>(Ty1
);
277 const ArrayType
*ATy2
= cast
<ArrayType
>(Ty2
);
278 return ATy1
->getNumElements() == ATy2
->getNumElements() &&
279 isEquivalentType(ATy1
->getElementType(), ATy2
->getElementType());
284 // Determine whether the two operations are the same except that pointer-to-A
285 // and pointer-to-B are equivalent. This should be kept in sync with
286 // Instruction::isSameOperationAs.
287 bool FunctionComparator::isEquivalentOperation(const Instruction
*I1
,
288 const Instruction
*I2
) const {
289 // Differences from Instruction::isSameOperationAs:
290 // * replace type comparison with calls to isEquivalentType.
291 // * we test for I->hasSameSubclassOptionalData (nuw/nsw/tail) at the top
292 // * because of the above, we don't test for the tail bit on calls later on
293 if (I1
->getOpcode() != I2
->getOpcode() ||
294 I1
->getNumOperands() != I2
->getNumOperands() ||
295 !isEquivalentType(I1
->getType(), I2
->getType()) ||
296 !I1
->hasSameSubclassOptionalData(I2
))
299 // We have two instructions of identical opcode and #operands. Check to see
300 // if all operands are the same type
301 for (unsigned i
= 0, e
= I1
->getNumOperands(); i
!= e
; ++i
)
302 if (!isEquivalentType(I1
->getOperand(i
)->getType(),
303 I2
->getOperand(i
)->getType()))
306 // Check special state that is a part of some instructions.
307 if (const LoadInst
*LI
= dyn_cast
<LoadInst
>(I1
))
308 return LI
->isVolatile() == cast
<LoadInst
>(I2
)->isVolatile() &&
309 LI
->getAlignment() == cast
<LoadInst
>(I2
)->getAlignment();
310 if (const StoreInst
*SI
= dyn_cast
<StoreInst
>(I1
))
311 return SI
->isVolatile() == cast
<StoreInst
>(I2
)->isVolatile() &&
312 SI
->getAlignment() == cast
<StoreInst
>(I2
)->getAlignment();
313 if (const CmpInst
*CI
= dyn_cast
<CmpInst
>(I1
))
314 return CI
->getPredicate() == cast
<CmpInst
>(I2
)->getPredicate();
315 if (const CallInst
*CI
= dyn_cast
<CallInst
>(I1
))
316 return CI
->getCallingConv() == cast
<CallInst
>(I2
)->getCallingConv() &&
317 CI
->getAttributes() == cast
<CallInst
>(I2
)->getAttributes();
318 if (const InvokeInst
*CI
= dyn_cast
<InvokeInst
>(I1
))
319 return CI
->getCallingConv() == cast
<InvokeInst
>(I2
)->getCallingConv() &&
320 CI
->getAttributes() == cast
<InvokeInst
>(I2
)->getAttributes();
321 if (const InsertValueInst
*IVI
= dyn_cast
<InsertValueInst
>(I1
)) {
322 if (IVI
->getNumIndices() != cast
<InsertValueInst
>(I2
)->getNumIndices())
324 for (unsigned i
= 0, e
= IVI
->getNumIndices(); i
!= e
; ++i
)
325 if (IVI
->idx_begin()[i
] != cast
<InsertValueInst
>(I2
)->idx_begin()[i
])
329 if (const ExtractValueInst
*EVI
= dyn_cast
<ExtractValueInst
>(I1
)) {
330 if (EVI
->getNumIndices() != cast
<ExtractValueInst
>(I2
)->getNumIndices())
332 for (unsigned i
= 0, e
= EVI
->getNumIndices(); i
!= e
; ++i
)
333 if (EVI
->idx_begin()[i
] != cast
<ExtractValueInst
>(I2
)->idx_begin()[i
])
341 // Determine whether two GEP operations perform the same underlying arithmetic.
342 bool FunctionComparator::isEquivalentGEP(const GEPOperator
*GEP1
,
343 const GEPOperator
*GEP2
) {
344 // When we have target data, we can reduce the GEP down to the value in bytes
345 // added to the address.
346 if (TD
&& GEP1
->hasAllConstantIndices() && GEP2
->hasAllConstantIndices()) {
347 SmallVector
<Value
*, 8> Indices1(GEP1
->idx_begin(), GEP1
->idx_end());
348 SmallVector
<Value
*, 8> Indices2(GEP2
->idx_begin(), GEP2
->idx_end());
349 uint64_t Offset1
= TD
->getIndexedOffset(GEP1
->getPointerOperandType(),
350 Indices1
.data(), Indices1
.size());
351 uint64_t Offset2
= TD
->getIndexedOffset(GEP2
->getPointerOperandType(),
352 Indices2
.data(), Indices2
.size());
353 return Offset1
== Offset2
;
356 if (GEP1
->getPointerOperand()->getType() !=
357 GEP2
->getPointerOperand()->getType())
360 if (GEP1
->getNumOperands() != GEP2
->getNumOperands())
363 for (unsigned i
= 0, e
= GEP1
->getNumOperands(); i
!= e
; ++i
) {
364 if (!enumerate(GEP1
->getOperand(i
), GEP2
->getOperand(i
)))
371 // Compare two values used by the two functions under pair-wise comparison. If
372 // this is the first time the values are seen, they're added to the mapping so
373 // that we will detect mismatches on next use.
374 bool FunctionComparator::enumerate(const Value
*V1
, const Value
*V2
) {
375 // Check for function @f1 referring to itself and function @f2 referring to
376 // itself, or referring to each other, or both referring to either of them.
377 // They're all equivalent if the two functions are otherwise equivalent.
378 if (V1
== F1
&& V2
== F2
)
380 if (V1
== F2
&& V2
== F1
)
383 if (const Constant
*C1
= dyn_cast
<Constant
>(V1
)) {
384 if (V1
== V2
) return true;
385 const Constant
*C2
= dyn_cast
<Constant
>(V2
);
386 if (!C2
) return false;
387 // TODO: constant expressions with GEP or references to F1 or F2.
388 if (C1
->isNullValue() && C2
->isNullValue() &&
389 isEquivalentType(C1
->getType(), C2
->getType()))
391 // Try bitcasting C2 to C1's type. If the bitcast is legal and returns C1
392 // then they must have equal bit patterns.
393 return C1
->getType()->canLosslesslyBitCastTo(C2
->getType()) &&
394 C1
== ConstantExpr::getBitCast(const_cast<Constant
*>(C2
), C1
->getType());
397 if (isa
<InlineAsm
>(V1
) || isa
<InlineAsm
>(V2
))
400 // Check that V1 maps to V2. If we find a value that V1 maps to then we simply
401 // check whether it's equal to V2. When there is no mapping then we need to
402 // ensure that V2 isn't already equivalent to something else. For this
403 // purpose, we track the V2 values in a set.
405 const Value
*&map_elem
= id_map
[V1
];
407 return map_elem
== V2
;
408 if (!seen_values
.insert(V2
).second
)
414 // Test whether two basic blocks have equivalent behaviour.
415 bool FunctionComparator::compare(const BasicBlock
*BB1
, const BasicBlock
*BB2
) {
416 BasicBlock::const_iterator F1I
= BB1
->begin(), F1E
= BB1
->end();
417 BasicBlock::const_iterator F2I
= BB2
->begin(), F2E
= BB2
->end();
420 if (!enumerate(F1I
, F2I
))
423 if (const GetElementPtrInst
*GEP1
= dyn_cast
<GetElementPtrInst
>(F1I
)) {
424 const GetElementPtrInst
*GEP2
= dyn_cast
<GetElementPtrInst
>(F2I
);
428 if (!enumerate(GEP1
->getPointerOperand(), GEP2
->getPointerOperand()))
431 if (!isEquivalentGEP(GEP1
, GEP2
))
434 if (!isEquivalentOperation(F1I
, F2I
))
437 assert(F1I
->getNumOperands() == F2I
->getNumOperands());
438 for (unsigned i
= 0, e
= F1I
->getNumOperands(); i
!= e
; ++i
) {
439 Value
*OpF1
= F1I
->getOperand(i
);
440 Value
*OpF2
= F2I
->getOperand(i
);
442 if (!enumerate(OpF1
, OpF2
))
445 if (OpF1
->getValueID() != OpF2
->getValueID() ||
446 !isEquivalentType(OpF1
->getType(), OpF2
->getType()))
452 } while (F1I
!= F1E
&& F2I
!= F2E
);
454 return F1I
== F1E
&& F2I
== F2E
;
457 // Test whether the two functions have equivalent behaviour.
458 bool FunctionComparator::compare() {
459 // We need to recheck everything, but check the things that weren't included
460 // in the hash first.
462 if (F1
->getAttributes() != F2
->getAttributes())
465 if (F1
->hasGC() != F2
->hasGC())
468 if (F1
->hasGC() && F1
->getGC() != F2
->getGC())
471 if (F1
->hasSection() != F2
->hasSection())
474 if (F1
->hasSection() && F1
->getSection() != F2
->getSection())
477 if (F1
->isVarArg() != F2
->isVarArg())
480 // TODO: if it's internal and only used in direct calls, we could handle this
482 if (F1
->getCallingConv() != F2
->getCallingConv())
485 if (!isEquivalentType(F1
->getFunctionType(), F2
->getFunctionType()))
488 assert(F1
->arg_size() == F2
->arg_size() &&
489 "Identically typed functions have different numbers of args!");
491 // Visit the arguments so that they get enumerated in the order they're
493 for (Function::const_arg_iterator f1i
= F1
->arg_begin(),
494 f2i
= F2
->arg_begin(), f1e
= F1
->arg_end(); f1i
!= f1e
; ++f1i
, ++f2i
) {
495 if (!enumerate(f1i
, f2i
))
496 llvm_unreachable("Arguments repeat!");
499 // We do a CFG-ordered walk since the actual ordering of the blocks in the
500 // linked list is immaterial. Our walk starts at the entry block for both
501 // functions, then takes each block from each terminator in order. As an
502 // artifact, this also means that unreachable blocks are ignored.
503 SmallVector
<const BasicBlock
*, 8> F1BBs
, F2BBs
;
504 SmallSet
<const BasicBlock
*, 128> VisitedBBs
; // in terms of F1.
506 F1BBs
.push_back(&F1
->getEntryBlock());
507 F2BBs
.push_back(&F2
->getEntryBlock());
509 VisitedBBs
.insert(F1BBs
[0]);
510 while (!F1BBs
.empty()) {
511 const BasicBlock
*F1BB
= F1BBs
.pop_back_val();
512 const BasicBlock
*F2BB
= F2BBs
.pop_back_val();
514 if (!enumerate(F1BB
, F2BB
) || !compare(F1BB
, F2BB
))
517 const TerminatorInst
*F1TI
= F1BB
->getTerminator();
518 const TerminatorInst
*F2TI
= F2BB
->getTerminator();
520 assert(F1TI
->getNumSuccessors() == F2TI
->getNumSuccessors());
521 for (unsigned i
= 0, e
= F1TI
->getNumSuccessors(); i
!= e
; ++i
) {
522 if (!VisitedBBs
.insert(F1TI
->getSuccessor(i
)))
525 F1BBs
.push_back(F1TI
->getSuccessor(i
));
526 F2BBs
.push_back(F2TI
->getSuccessor(i
));
534 /// MergeFunctions finds functions which will generate identical machine code,
535 /// by considering all pointer types to be equivalent. Once identified,
536 /// MergeFunctions will fold them by replacing a call to one to a call to a
537 /// bitcast of the other.
539 class MergeFunctions
: public ModulePass
{
543 : ModulePass(ID
), HasGlobalAliases(false) {
544 initializeMergeFunctionsPass(*PassRegistry::getPassRegistry());
547 bool runOnModule(Module
&M
);
550 typedef DenseSet
<ComparableFunction
> FnSetType
;
552 /// A work queue of functions that may have been modified and should be
554 std::vector
<WeakVH
> Deferred
;
556 /// Insert a ComparableFunction into the FnSet, or merge it away if it's
557 /// equal to one that's already present.
558 bool insert(ComparableFunction
&NewF
);
560 /// Remove a Function from the FnSet and queue it up for a second sweep of
562 void remove(Function
*F
);
564 /// Find the functions that use this Value and remove them from FnSet and
565 /// queue the functions.
566 void removeUsers(Value
*V
);
568 /// Replace all direct calls of Old with calls of New. Will bitcast New if
569 /// necessary to make types match.
570 void replaceDirectCallers(Function
*Old
, Function
*New
);
572 /// Merge two equivalent functions. Upon completion, G may be deleted, or may
573 /// be converted into a thunk. In either case, it should never be visited
575 void mergeTwoFunctions(Function
*F
, Function
*G
);
577 /// Replace G with a thunk or an alias to F. Deletes G.
578 void writeThunkOrAlias(Function
*F
, Function
*G
);
580 /// Replace G with a simple tail call to bitcast(F). Also replace direct uses
581 /// of G with bitcast(F). Deletes G.
582 void writeThunk(Function
*F
, Function
*G
);
584 /// Replace G with an alias to F. Deletes G.
585 void writeAlias(Function
*F
, Function
*G
);
587 /// The set of all distinct functions. Use the insert() and remove() methods
591 /// TargetData for more accurate GEP comparisons. May be NULL.
594 /// Whether or not the target supports global aliases.
595 bool HasGlobalAliases
;
598 } // end anonymous namespace
600 char MergeFunctions::ID
= 0;
601 INITIALIZE_PASS(MergeFunctions
, "mergefunc", "Merge Functions", false, false)
603 ModulePass
*llvm::createMergeFunctionsPass() {
604 return new MergeFunctions();
607 bool MergeFunctions::runOnModule(Module
&M
) {
608 bool Changed
= false;
609 TD
= getAnalysisIfAvailable
<TargetData
>();
611 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ++I
) {
612 if (!I
->isDeclaration() && !I
->hasAvailableExternallyLinkage())
613 Deferred
.push_back(WeakVH(I
));
615 FnSet
.resize(Deferred
.size());
618 std::vector
<WeakVH
> Worklist
;
619 Deferred
.swap(Worklist
);
621 DEBUG(dbgs() << "size of module: " << M
.size() << '\n');
622 DEBUG(dbgs() << "size of worklist: " << Worklist
.size() << '\n');
624 // Insert only strong functions and merge them. Strong function merging
625 // always deletes one of them.
626 for (std::vector
<WeakVH
>::iterator I
= Worklist
.begin(),
627 E
= Worklist
.end(); I
!= E
; ++I
) {
629 Function
*F
= cast
<Function
>(*I
);
630 if (!F
->isDeclaration() && !F
->hasAvailableExternallyLinkage() &&
631 !F
->mayBeOverridden()) {
632 ComparableFunction CF
= ComparableFunction(F
, TD
);
633 Changed
|= insert(CF
);
637 // Insert only weak functions and merge them. By doing these second we
638 // create thunks to the strong function when possible. When two weak
639 // functions are identical, we create a new strong function with two weak
640 // weak thunks to it which are identical but not mergable.
641 for (std::vector
<WeakVH
>::iterator I
= Worklist
.begin(),
642 E
= Worklist
.end(); I
!= E
; ++I
) {
644 Function
*F
= cast
<Function
>(*I
);
645 if (!F
->isDeclaration() && !F
->hasAvailableExternallyLinkage() &&
646 F
->mayBeOverridden()) {
647 ComparableFunction CF
= ComparableFunction(F
, TD
);
648 Changed
|= insert(CF
);
651 DEBUG(dbgs() << "size of FnSet: " << FnSet
.size() << '\n');
652 } while (!Deferred
.empty());
659 bool DenseMapInfo
<ComparableFunction
>::isEqual(const ComparableFunction
&LHS
,
660 const ComparableFunction
&RHS
) {
661 if (LHS
.getFunc() == RHS
.getFunc() &&
662 LHS
.getHash() == RHS
.getHash())
664 if (!LHS
.getFunc() || !RHS
.getFunc())
667 // One of these is a special "underlying pointer comparison only" object.
668 if (LHS
.getTD() == ComparableFunction::LookupOnly
||
669 RHS
.getTD() == ComparableFunction::LookupOnly
)
672 assert(LHS
.getTD() == RHS
.getTD() &&
673 "Comparing functions for different targets");
675 return FunctionComparator(LHS
.getTD(), LHS
.getFunc(),
676 RHS
.getFunc()).compare();
679 // Replace direct callers of Old with New.
680 void MergeFunctions::replaceDirectCallers(Function
*Old
, Function
*New
) {
681 Constant
*BitcastNew
= ConstantExpr::getBitCast(New
, Old
->getType());
682 for (Value::use_iterator UI
= Old
->use_begin(), UE
= Old
->use_end();
684 Value::use_iterator TheIter
= UI
;
686 CallSite
CS(*TheIter
);
687 if (CS
&& CS
.isCallee(TheIter
)) {
688 remove(CS
.getInstruction()->getParent()->getParent());
689 TheIter
.getUse().set(BitcastNew
);
694 // Replace G with an alias to F if possible, or else a thunk to F. Deletes G.
695 void MergeFunctions::writeThunkOrAlias(Function
*F
, Function
*G
) {
696 if (HasGlobalAliases
&& G
->hasUnnamedAddr()) {
697 if (G
->hasExternalLinkage() || G
->hasLocalLinkage() ||
698 G
->hasWeakLinkage()) {
707 // Replace G with a simple tail call to bitcast(F). Also replace direct uses
708 // of G with bitcast(F). Deletes G.
709 void MergeFunctions::writeThunk(Function
*F
, Function
*G
) {
710 if (!G
->mayBeOverridden()) {
711 // Redirect direct callers of G to F.
712 replaceDirectCallers(G
, F
);
715 // If G was internal then we may have replaced all uses of G with F. If so,
716 // stop here and delete G. There's no need for a thunk.
717 if (G
->hasLocalLinkage() && G
->use_empty()) {
718 G
->eraseFromParent();
722 Function
*NewG
= Function::Create(G
->getFunctionType(), G
->getLinkage(), "",
724 BasicBlock
*BB
= BasicBlock::Create(F
->getContext(), "", NewG
);
725 IRBuilder
<false> Builder(BB
);
727 SmallVector
<Value
*, 16> Args
;
729 const FunctionType
*FFTy
= F
->getFunctionType();
730 for (Function::arg_iterator AI
= NewG
->arg_begin(), AE
= NewG
->arg_end();
732 Args
.push_back(Builder
.CreateBitCast(AI
, FFTy
->getParamType(i
)));
736 CallInst
*CI
= Builder
.CreateCall(F
, Args
.begin(), Args
.end());
738 CI
->setCallingConv(F
->getCallingConv());
739 if (NewG
->getReturnType()->isVoidTy()) {
740 Builder
.CreateRetVoid();
742 Builder
.CreateRet(Builder
.CreateBitCast(CI
, NewG
->getReturnType()));
745 NewG
->copyAttributesFrom(G
);
748 G
->replaceAllUsesWith(NewG
);
749 G
->eraseFromParent();
751 DEBUG(dbgs() << "writeThunk: " << NewG
->getName() << '\n');
755 // Replace G with an alias to F and delete G.
756 void MergeFunctions::writeAlias(Function
*F
, Function
*G
) {
757 Constant
*BitcastF
= ConstantExpr::getBitCast(F
, G
->getType());
758 GlobalAlias
*GA
= new GlobalAlias(G
->getType(), G
->getLinkage(), "",
759 BitcastF
, G
->getParent());
760 F
->setAlignment(std::max(F
->getAlignment(), G
->getAlignment()));
762 GA
->setVisibility(G
->getVisibility());
764 G
->replaceAllUsesWith(GA
);
765 G
->eraseFromParent();
767 DEBUG(dbgs() << "writeAlias: " << GA
->getName() << '\n');
771 // Merge two equivalent functions. Upon completion, Function G is deleted.
772 void MergeFunctions::mergeTwoFunctions(Function
*F
, Function
*G
) {
773 if (F
->mayBeOverridden()) {
774 assert(G
->mayBeOverridden());
776 if (HasGlobalAliases
) {
777 // Make them both thunks to the same internal function.
778 Function
*H
= Function::Create(F
->getFunctionType(), F
->getLinkage(), "",
780 H
->copyAttributesFrom(F
);
783 F
->replaceAllUsesWith(H
);
785 unsigned MaxAlignment
= std::max(G
->getAlignment(), H
->getAlignment());
790 F
->setAlignment(MaxAlignment
);
791 F
->setLinkage(GlobalValue::PrivateLinkage
);
793 // We can't merge them. Instead, pick one and update all direct callers
794 // to call it and hope that we improve the instruction cache hit rate.
795 replaceDirectCallers(G
, F
);
800 writeThunkOrAlias(F
, G
);
803 ++NumFunctionsMerged
;
806 // Insert a ComparableFunction into the FnSet, or merge it away if equal to one
807 // that was already inserted.
808 bool MergeFunctions::insert(ComparableFunction
&NewF
) {
809 std::pair
<FnSetType::iterator
, bool> Result
= FnSet
.insert(NewF
);
811 DEBUG(dbgs() << "Inserting as unique: " << NewF
.getFunc()->getName() << '\n');
815 const ComparableFunction
&OldF
= *Result
.first
;
817 // Never thunk a strong function to a weak function.
818 assert(!OldF
.getFunc()->mayBeOverridden() ||
819 NewF
.getFunc()->mayBeOverridden());
821 DEBUG(dbgs() << " " << OldF
.getFunc()->getName() << " == "
822 << NewF
.getFunc()->getName() << '\n');
824 Function
*DeleteF
= NewF
.getFunc();
826 mergeTwoFunctions(OldF
.getFunc(), DeleteF
);
830 // Remove a function from FnSet. If it was already in FnSet, add it to Deferred
831 // so that we'll look at it in the next round.
832 void MergeFunctions::remove(Function
*F
) {
833 // We need to make sure we remove F, not a function "equal" to F per the
834 // function equality comparator.
836 // The special "lookup only" ComparableFunction bypasses the expensive
837 // function comparison in favour of a pointer comparison on the underlying
839 ComparableFunction CF
= ComparableFunction(F
, ComparableFunction::LookupOnly
);
840 if (FnSet
.erase(CF
)) {
841 DEBUG(dbgs() << "Removed " << F
->getName() << " from set and deferred it.\n");
842 Deferred
.push_back(F
);
846 // For each instruction used by the value, remove() the function that contains
847 // the instruction. This should happen right before a call to RAUW.
848 void MergeFunctions::removeUsers(Value
*V
) {
849 std::vector
<Value
*> Worklist
;
850 Worklist
.push_back(V
);
851 while (!Worklist
.empty()) {
852 Value
*V
= Worklist
.back();
855 for (Value::use_iterator UI
= V
->use_begin(), UE
= V
->use_end();
857 Use
&U
= UI
.getUse();
858 if (Instruction
*I
= dyn_cast
<Instruction
>(U
.getUser())) {
859 remove(I
->getParent()->getParent());
860 } else if (isa
<GlobalValue
>(U
.getUser())) {
862 } else if (Constant
*C
= dyn_cast
<Constant
>(U
.getUser())) {
863 for (Value::use_iterator CUI
= C
->use_begin(), CUE
= C
->use_end();
865 Worklist
.push_back(*CUI
);