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/Pass.h"
59 #include "llvm/Support/CallSite.h"
60 #include "llvm/Support/Debug.h"
61 #include "llvm/Support/ErrorHandling.h"
62 #include "llvm/Support/IRBuilder.h"
63 #include "llvm/Support/ValueHandle.h"
64 #include "llvm/Support/raw_ostream.h"
65 #include "llvm/Target/TargetData.h"
69 STATISTIC(NumFunctionsMerged
, "Number of functions merged");
70 STATISTIC(NumThunksWritten
, "Number of thunks generated");
71 STATISTIC(NumAliasesWritten
, "Number of aliases generated");
72 STATISTIC(NumDoubleWeak
, "Number of new functions created");
74 /// Creates a hash-code for the function which is the same for any two
75 /// functions that will compare equal, without looking at the instructions
76 /// inside the function.
77 static unsigned profileFunction(const Function
*F
) {
78 const FunctionType
*FTy
= F
->getFunctionType();
81 ID
.AddInteger(F
->size());
82 ID
.AddInteger(F
->getCallingConv());
83 ID
.AddBoolean(F
->hasGC());
84 ID
.AddBoolean(FTy
->isVarArg());
85 ID
.AddInteger(FTy
->getReturnType()->getTypeID());
86 for (unsigned i
= 0, e
= FTy
->getNumParams(); i
!= e
; ++i
)
87 ID
.AddInteger(FTy
->getParamType(i
)->getTypeID());
88 return ID
.ComputeHash();
93 /// ComparableFunction - A struct that pairs together functions with a
94 /// TargetData so that we can keep them together as elements in the DenseSet.
95 class ComparableFunction
{
97 static const ComparableFunction EmptyKey
;
98 static const ComparableFunction TombstoneKey
;
99 static TargetData
* const LookupOnly
;
101 ComparableFunction(Function
*Func
, TargetData
*TD
)
102 : Func(Func
), Hash(profileFunction(Func
)), TD(TD
) {}
104 Function
*getFunc() const { return Func
; }
105 unsigned getHash() const { return Hash
; }
106 TargetData
*getTD() const { return TD
; }
108 // Drops AssertingVH reference to the function. Outside of debug mode, this
112 "Attempted to release function twice, or release empty/tombstone!");
117 explicit ComparableFunction(unsigned Hash
)
118 : Func(NULL
), Hash(Hash
), TD(NULL
) {}
120 AssertingVH
<Function
> Func
;
125 const ComparableFunction
ComparableFunction::EmptyKey
= ComparableFunction(0);
126 const ComparableFunction
ComparableFunction::TombstoneKey
=
127 ComparableFunction(1);
128 TargetData
* const ComparableFunction::LookupOnly
= (TargetData
*)(-1);
134 struct DenseMapInfo
<ComparableFunction
> {
135 static ComparableFunction
getEmptyKey() {
136 return ComparableFunction::EmptyKey
;
138 static ComparableFunction
getTombstoneKey() {
139 return ComparableFunction::TombstoneKey
;
141 static unsigned getHashValue(const ComparableFunction
&CF
) {
144 static bool isEqual(const ComparableFunction
&LHS
,
145 const ComparableFunction
&RHS
);
151 /// FunctionComparator - Compares two functions to determine whether or not
152 /// they will generate machine code with the same behaviour. TargetData is
153 /// used if available. The comparator always fails conservatively (erring on the
154 /// side of claiming that two functions are different).
155 class FunctionComparator
{
157 FunctionComparator(const TargetData
*TD
, const Function
*F1
,
159 : F1(F1
), F2(F2
), TD(TD
), IDMap1Count(0), IDMap2Count(0) {}
161 /// Test whether the two functions have equivalent behaviour.
165 /// Test whether two basic blocks have equivalent behaviour.
166 bool compare(const BasicBlock
*BB1
, const BasicBlock
*BB2
);
168 /// Assign or look up previously assigned numbers for the two values, and
169 /// return whether the numbers are equal. Numbers are assigned in the order
171 bool enumerate(const Value
*V1
, const Value
*V2
);
173 /// Compare two Instructions for equivalence, similar to
174 /// Instruction::isSameOperationAs but with modifications to the type
176 bool isEquivalentOperation(const Instruction
*I1
,
177 const Instruction
*I2
) const;
179 /// Compare two GEPs for equivalent pointer arithmetic.
180 bool isEquivalentGEP(const GEPOperator
*GEP1
, const GEPOperator
*GEP2
);
181 bool isEquivalentGEP(const GetElementPtrInst
*GEP1
,
182 const GetElementPtrInst
*GEP2
) {
183 return isEquivalentGEP(cast
<GEPOperator
>(GEP1
), cast
<GEPOperator
>(GEP2
));
186 /// Compare two Types, treating all pointer types as equal.
187 bool isEquivalentType(const Type
*Ty1
, const Type
*Ty2
) const;
189 // The two functions undergoing comparison.
190 const Function
*F1
, *F2
;
192 const TargetData
*TD
;
194 typedef DenseMap
<const Value
*, unsigned long> IDMap
;
196 unsigned long IDMap1Count
, IDMap2Count
;
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 unsigned long &ID1
= Map1
[V1
];
404 unsigned long &ID2
= Map2
[V2
];
411 // Test whether two basic blocks have equivalent behaviour.
412 bool FunctionComparator::compare(const BasicBlock
*BB1
, const BasicBlock
*BB2
) {
413 BasicBlock::const_iterator F1I
= BB1
->begin(), F1E
= BB1
->end();
414 BasicBlock::const_iterator F2I
= BB2
->begin(), F2E
= BB2
->end();
417 if (!enumerate(F1I
, F2I
))
420 if (const GetElementPtrInst
*GEP1
= dyn_cast
<GetElementPtrInst
>(F1I
)) {
421 const GetElementPtrInst
*GEP2
= dyn_cast
<GetElementPtrInst
>(F2I
);
425 if (!enumerate(GEP1
->getPointerOperand(), GEP2
->getPointerOperand()))
428 if (!isEquivalentGEP(GEP1
, GEP2
))
431 if (!isEquivalentOperation(F1I
, F2I
))
434 assert(F1I
->getNumOperands() == F2I
->getNumOperands());
435 for (unsigned i
= 0, e
= F1I
->getNumOperands(); i
!= e
; ++i
) {
436 Value
*OpF1
= F1I
->getOperand(i
);
437 Value
*OpF2
= F2I
->getOperand(i
);
439 if (!enumerate(OpF1
, OpF2
))
442 if (OpF1
->getValueID() != OpF2
->getValueID() ||
443 !isEquivalentType(OpF1
->getType(), OpF2
->getType()))
449 } while (F1I
!= F1E
&& F2I
!= F2E
);
451 return F1I
== F1E
&& F2I
== F2E
;
454 // Test whether the two functions have equivalent behaviour.
455 bool FunctionComparator::compare() {
456 // We need to recheck everything, but check the things that weren't included
457 // in the hash first.
459 if (F1
->getAttributes() != F2
->getAttributes())
462 if (F1
->hasGC() != F2
->hasGC())
465 if (F1
->hasGC() && F1
->getGC() != F2
->getGC())
468 if (F1
->hasSection() != F2
->hasSection())
471 if (F1
->hasSection() && F1
->getSection() != F2
->getSection())
474 if (F1
->isVarArg() != F2
->isVarArg())
477 // TODO: if it's internal and only used in direct calls, we could handle this
479 if (F1
->getCallingConv() != F2
->getCallingConv())
482 if (!isEquivalentType(F1
->getFunctionType(), F2
->getFunctionType()))
485 assert(F1
->arg_size() == F2
->arg_size() &&
486 "Identically typed functions have different numbers of args!");
488 // Visit the arguments so that they get enumerated in the order they're
490 for (Function::const_arg_iterator f1i
= F1
->arg_begin(),
491 f2i
= F2
->arg_begin(), f1e
= F1
->arg_end(); f1i
!= f1e
; ++f1i
, ++f2i
) {
492 if (!enumerate(f1i
, f2i
))
493 llvm_unreachable("Arguments repeat!");
496 // We do a CFG-ordered walk since the actual ordering of the blocks in the
497 // linked list is immaterial. Our walk starts at the entry block for both
498 // functions, then takes each block from each terminator in order. As an
499 // artifact, this also means that unreachable blocks are ignored.
500 SmallVector
<const BasicBlock
*, 8> F1BBs
, F2BBs
;
501 SmallSet
<const BasicBlock
*, 128> VisitedBBs
; // in terms of F1.
503 F1BBs
.push_back(&F1
->getEntryBlock());
504 F2BBs
.push_back(&F2
->getEntryBlock());
506 VisitedBBs
.insert(F1BBs
[0]);
507 while (!F1BBs
.empty()) {
508 const BasicBlock
*F1BB
= F1BBs
.pop_back_val();
509 const BasicBlock
*F2BB
= F2BBs
.pop_back_val();
511 if (!enumerate(F1BB
, F2BB
) || !compare(F1BB
, F2BB
))
514 const TerminatorInst
*F1TI
= F1BB
->getTerminator();
515 const TerminatorInst
*F2TI
= F2BB
->getTerminator();
517 assert(F1TI
->getNumSuccessors() == F2TI
->getNumSuccessors());
518 for (unsigned i
= 0, e
= F1TI
->getNumSuccessors(); i
!= e
; ++i
) {
519 if (!VisitedBBs
.insert(F1TI
->getSuccessor(i
)))
522 F1BBs
.push_back(F1TI
->getSuccessor(i
));
523 F2BBs
.push_back(F2TI
->getSuccessor(i
));
531 /// MergeFunctions finds functions which will generate identical machine code,
532 /// by considering all pointer types to be equivalent. Once identified,
533 /// MergeFunctions will fold them by replacing a call to one to a call to a
534 /// bitcast of the other.
536 class MergeFunctions
: public ModulePass
{
540 : ModulePass(ID
), HasGlobalAliases(false) {
541 initializeMergeFunctionsPass(*PassRegistry::getPassRegistry());
544 bool runOnModule(Module
&M
);
547 typedef DenseSet
<ComparableFunction
> FnSetType
;
549 /// A work queue of functions that may have been modified and should be
551 std::vector
<WeakVH
> Deferred
;
553 /// Insert a ComparableFunction into the FnSet, or merge it away if it's
554 /// equal to one that's already present.
555 bool insert(ComparableFunction
&NewF
);
557 /// Remove a Function from the FnSet and queue it up for a second sweep of
559 void remove(Function
*F
);
561 /// Find the functions that use this Value and remove them from FnSet and
562 /// queue the functions.
563 void removeUsers(Value
*V
);
565 /// Replace all direct calls of Old with calls of New. Will bitcast New if
566 /// necessary to make types match.
567 void replaceDirectCallers(Function
*Old
, Function
*New
);
569 /// Merge two equivalent functions. Upon completion, G may be deleted, or may
570 /// be converted into a thunk. In either case, it should never be visited
572 void mergeTwoFunctions(Function
*F
, Function
*G
);
574 /// Replace G with a thunk or an alias to F. Deletes G.
575 void writeThunkOrAlias(Function
*F
, Function
*G
);
577 /// Replace G with a simple tail call to bitcast(F). Also replace direct uses
578 /// of G with bitcast(F). Deletes G.
579 void writeThunk(Function
*F
, Function
*G
);
581 /// Replace G with an alias to F. Deletes G.
582 void writeAlias(Function
*F
, Function
*G
);
584 /// The set of all distinct functions. Use the insert() and remove() methods
588 /// TargetData for more accurate GEP comparisons. May be NULL.
591 /// Whether or not the target supports global aliases.
592 bool HasGlobalAliases
;
595 } // end anonymous namespace
597 char MergeFunctions::ID
= 0;
598 INITIALIZE_PASS(MergeFunctions
, "mergefunc", "Merge Functions", false, false)
600 ModulePass
*llvm::createMergeFunctionsPass() {
601 return new MergeFunctions();
604 bool MergeFunctions::runOnModule(Module
&M
) {
605 bool Changed
= false;
606 TD
= getAnalysisIfAvailable
<TargetData
>();
608 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ++I
) {
609 if (!I
->isDeclaration() && !I
->hasAvailableExternallyLinkage())
610 Deferred
.push_back(WeakVH(I
));
612 FnSet
.resize(Deferred
.size());
615 std::vector
<WeakVH
> Worklist
;
616 Deferred
.swap(Worklist
);
618 DEBUG(dbgs() << "size of module: " << M
.size() << '\n');
619 DEBUG(dbgs() << "size of worklist: " << Worklist
.size() << '\n');
621 // Insert only strong functions and merge them. Strong function merging
622 // always deletes one of them.
623 for (std::vector
<WeakVH
>::iterator I
= Worklist
.begin(),
624 E
= Worklist
.end(); I
!= E
; ++I
) {
626 Function
*F
= cast
<Function
>(*I
);
627 if (!F
->isDeclaration() && !F
->hasAvailableExternallyLinkage() &&
628 !F
->mayBeOverridden()) {
629 ComparableFunction CF
= ComparableFunction(F
, TD
);
630 Changed
|= insert(CF
);
634 // Insert only weak functions and merge them. By doing these second we
635 // create thunks to the strong function when possible. When two weak
636 // functions are identical, we create a new strong function with two weak
637 // weak thunks to it which are identical but not mergable.
638 for (std::vector
<WeakVH
>::iterator I
= Worklist
.begin(),
639 E
= Worklist
.end(); I
!= E
; ++I
) {
641 Function
*F
= cast
<Function
>(*I
);
642 if (!F
->isDeclaration() && !F
->hasAvailableExternallyLinkage() &&
643 F
->mayBeOverridden()) {
644 ComparableFunction CF
= ComparableFunction(F
, TD
);
645 Changed
|= insert(CF
);
648 DEBUG(dbgs() << "size of FnSet: " << FnSet
.size() << '\n');
649 } while (!Deferred
.empty());
656 bool DenseMapInfo
<ComparableFunction
>::isEqual(const ComparableFunction
&LHS
,
657 const ComparableFunction
&RHS
) {
658 if (LHS
.getFunc() == RHS
.getFunc() &&
659 LHS
.getHash() == RHS
.getHash())
661 if (!LHS
.getFunc() || !RHS
.getFunc())
664 // One of these is a special "underlying pointer comparison only" object.
665 if (LHS
.getTD() == ComparableFunction::LookupOnly
||
666 RHS
.getTD() == ComparableFunction::LookupOnly
)
669 assert(LHS
.getTD() == RHS
.getTD() &&
670 "Comparing functions for different targets");
672 return FunctionComparator(LHS
.getTD(), LHS
.getFunc(),
673 RHS
.getFunc()).compare();
676 // Replace direct callers of Old with New.
677 void MergeFunctions::replaceDirectCallers(Function
*Old
, Function
*New
) {
678 Constant
*BitcastNew
= ConstantExpr::getBitCast(New
, Old
->getType());
679 for (Value::use_iterator UI
= Old
->use_begin(), UE
= Old
->use_end();
681 Value::use_iterator TheIter
= UI
;
683 CallSite
CS(*TheIter
);
684 if (CS
&& CS
.isCallee(TheIter
)) {
685 remove(CS
.getInstruction()->getParent()->getParent());
686 TheIter
.getUse().set(BitcastNew
);
691 // Replace G with an alias to F if possible, or else a thunk to F. Deletes G.
692 void MergeFunctions::writeThunkOrAlias(Function
*F
, Function
*G
) {
693 if (HasGlobalAliases
&& G
->hasUnnamedAddr()) {
694 if (G
->hasExternalLinkage() || G
->hasLocalLinkage() ||
695 G
->hasWeakLinkage()) {
704 // Replace G with a simple tail call to bitcast(F). Also replace direct uses
705 // of G with bitcast(F). Deletes G.
706 void MergeFunctions::writeThunk(Function
*F
, Function
*G
) {
707 if (!G
->mayBeOverridden()) {
708 // Redirect direct callers of G to F.
709 replaceDirectCallers(G
, F
);
712 // If G was internal then we may have replaced all uses of G with F. If so,
713 // stop here and delete G. There's no need for a thunk.
714 if (G
->hasLocalLinkage() && G
->use_empty()) {
715 G
->eraseFromParent();
719 Function
*NewG
= Function::Create(G
->getFunctionType(), G
->getLinkage(), "",
721 BasicBlock
*BB
= BasicBlock::Create(F
->getContext(), "", NewG
);
722 IRBuilder
<false> Builder(BB
);
724 SmallVector
<Value
*, 16> Args
;
726 const FunctionType
*FFTy
= F
->getFunctionType();
727 for (Function::arg_iterator AI
= NewG
->arg_begin(), AE
= NewG
->arg_end();
729 Args
.push_back(Builder
.CreateBitCast(AI
, FFTy
->getParamType(i
)));
733 CallInst
*CI
= Builder
.CreateCall(F
, Args
.begin(), Args
.end());
735 CI
->setCallingConv(F
->getCallingConv());
736 if (NewG
->getReturnType()->isVoidTy()) {
737 Builder
.CreateRetVoid();
739 Builder
.CreateRet(Builder
.CreateBitCast(CI
, NewG
->getReturnType()));
742 NewG
->copyAttributesFrom(G
);
745 G
->replaceAllUsesWith(NewG
);
746 G
->eraseFromParent();
748 DEBUG(dbgs() << "writeThunk: " << NewG
->getName() << '\n');
752 // Replace G with an alias to F and delete G.
753 void MergeFunctions::writeAlias(Function
*F
, Function
*G
) {
754 Constant
*BitcastF
= ConstantExpr::getBitCast(F
, G
->getType());
755 GlobalAlias
*GA
= new GlobalAlias(G
->getType(), G
->getLinkage(), "",
756 BitcastF
, G
->getParent());
757 F
->setAlignment(std::max(F
->getAlignment(), G
->getAlignment()));
759 GA
->setVisibility(G
->getVisibility());
761 G
->replaceAllUsesWith(GA
);
762 G
->eraseFromParent();
764 DEBUG(dbgs() << "writeAlias: " << GA
->getName() << '\n');
768 // Merge two equivalent functions. Upon completion, Function G is deleted.
769 void MergeFunctions::mergeTwoFunctions(Function
*F
, Function
*G
) {
770 if (F
->mayBeOverridden()) {
771 assert(G
->mayBeOverridden());
773 if (HasGlobalAliases
) {
774 // Make them both thunks to the same internal function.
775 Function
*H
= Function::Create(F
->getFunctionType(), F
->getLinkage(), "",
777 H
->copyAttributesFrom(F
);
780 F
->replaceAllUsesWith(H
);
782 unsigned MaxAlignment
= std::max(G
->getAlignment(), H
->getAlignment());
787 F
->setAlignment(MaxAlignment
);
788 F
->setLinkage(GlobalValue::PrivateLinkage
);
790 // We can't merge them. Instead, pick one and update all direct callers
791 // to call it and hope that we improve the instruction cache hit rate.
792 replaceDirectCallers(G
, F
);
797 writeThunkOrAlias(F
, G
);
800 ++NumFunctionsMerged
;
803 // Insert a ComparableFunction into the FnSet, or merge it away if equal to one
804 // that was already inserted.
805 bool MergeFunctions::insert(ComparableFunction
&NewF
) {
806 std::pair
<FnSetType::iterator
, bool> Result
= FnSet
.insert(NewF
);
808 DEBUG(dbgs() << "Inserting as unique: " << NewF
.getFunc()->getName() << '\n');
812 const ComparableFunction
&OldF
= *Result
.first
;
814 // Never thunk a strong function to a weak function.
815 assert(!OldF
.getFunc()->mayBeOverridden() ||
816 NewF
.getFunc()->mayBeOverridden());
818 DEBUG(dbgs() << " " << OldF
.getFunc()->getName() << " == "
819 << NewF
.getFunc()->getName() << '\n');
821 Function
*DeleteF
= NewF
.getFunc();
823 mergeTwoFunctions(OldF
.getFunc(), DeleteF
);
827 // Remove a function from FnSet. If it was already in FnSet, add it to Deferred
828 // so that we'll look at it in the next round.
829 void MergeFunctions::remove(Function
*F
) {
830 // We need to make sure we remove F, not a function "equal" to F per the
831 // function equality comparator.
833 // The special "lookup only" ComparableFunction bypasses the expensive
834 // function comparison in favour of a pointer comparison on the underlying
836 ComparableFunction CF
= ComparableFunction(F
, ComparableFunction::LookupOnly
);
837 if (FnSet
.erase(CF
)) {
838 DEBUG(dbgs() << "Removed " << F
->getName() << " from set and deferred it.\n");
839 Deferred
.push_back(F
);
843 // For each instruction used by the value, remove() the function that contains
844 // the instruction. This should happen right before a call to RAUW.
845 void MergeFunctions::removeUsers(Value
*V
) {
846 std::vector
<Value
*> Worklist
;
847 Worklist
.push_back(V
);
848 while (!Worklist
.empty()) {
849 Value
*V
= Worklist
.back();
852 for (Value::use_iterator UI
= V
->use_begin(), UE
= V
->use_end();
854 Use
&U
= UI
.getUse();
855 if (Instruction
*I
= dyn_cast
<Instruction
>(U
.getUser())) {
856 remove(I
->getParent()->getParent());
857 } else if (isa
<GlobalValue
>(U
.getUser())) {
859 } else if (Constant
*C
= dyn_cast
<Constant
>(U
.getUser())) {
860 for (Value::use_iterator CUI
= C
->use_begin(), CUE
= C
->use_end();
862 Worklist
.push_back(*CUI
);