Lines Matching refs:F

177   mutable AssertingVH<Function> F;  member in __anonf77405620111::FunctionNode
182 FunctionNode(Function *F) in FunctionNode() argument
183 : F(F), Hash(FunctionComparator::functionHash(*F)) {} in FunctionNode()
185 Function *getFunc() const { return F; } in getFunc()
191 F = G; in replaceBy()
243 void remove(Function *F);
256 void mergeTwoFunctions(Function *F, Function *G);
273 void writeThunk(Function *F, Function *G);
276 void writeAlias(Function *F, Function *G);
280 bool writeThunkOrAlias(Function *F, Function *G);
406 static bool isEligibleForMerging(Function &F) { in isEligibleForMerging() argument
407 return !F.isDeclaration() && !F.hasAvailableExternallyLinkage(); in isEligibleForMerging()
448 Function *F = cast<Function>(I); in runOnModule() local
449 if (!F->isDeclaration() && !F->hasAvailableExternallyLinkage()) { in runOnModule()
450 Changed |= insert(F); in runOnModule()
652 static bool canCreateThunkFor(Function *F) { in canCreateThunkFor() argument
653 if (F->isVarArg()) in canCreateThunkFor()
658 if (F->size() == 1) { in canCreateThunkFor()
659 if (F->front().size() <= 2) { in canCreateThunkFor()
660 LLVM_DEBUG(dbgs() << "canCreateThunkFor: " << F->getName() in canCreateThunkFor()
676 void MergeFunctions::writeThunk(Function *F, Function *G) { in writeThunk() argument
697 BB = BasicBlock::Create(F->getContext(), "", NewG); in writeThunk()
704 FunctionType *FFTy = F->getFunctionType(); in writeThunk()
710 CallInst *CI = Builder.CreateCall(F, Args); in writeThunk()
712 bool isSwiftTailCall = F->getCallingConv() == CallingConv::SwiftTail && in writeThunk()
716 CI->setCallingConv(F->getCallingConv()); in writeThunk()
717 CI->setAttributes(F->getAttributes()); in writeThunk()
756 static bool canCreateAliasFor(Function *F) { in canCreateAliasFor() argument
757 if (!MergeFunctionsAliases || !F->hasGlobalUnnamedAddr()) in canCreateAliasFor()
761 assert(F->hasLocalLinkage() || F->hasExternalLinkage() in canCreateAliasFor()
762 || F->hasWeakLinkage() || F->hasLinkOnceLinkage()); in canCreateAliasFor()
767 void MergeFunctions::writeAlias(Function *F, Function *G) { in writeAlias() argument
768 Constant *BitcastF = ConstantExpr::getBitCast(F, G->getType()); in writeAlias()
773 F->setAlignment(MaybeAlign(std::max(F->getAlignment(), G->getAlignment()))); in writeAlias()
788 bool MergeFunctions::writeThunkOrAlias(Function *F, Function *G) { in writeThunkOrAlias() argument
790 writeAlias(F, G); in writeThunkOrAlias()
793 if (canCreateThunkFor(F)) { in writeThunkOrAlias()
794 writeThunk(F, G); in writeThunkOrAlias()
801 void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) { in mergeTwoFunctions() argument
802 if (F->isInterposable()) { in mergeTwoFunctions()
808 if (!canCreateThunkFor(F) && in mergeTwoFunctions()
809 (!canCreateAliasFor(F) || !canCreateAliasFor(G))) in mergeTwoFunctions()
813 Function *NewF = Function::Create(F->getFunctionType(), F->getLinkage(), in mergeTwoFunctions()
814 F->getAddressSpace(), "", F->getParent()); in mergeTwoFunctions()
815 NewF->copyAttributesFrom(F); in mergeTwoFunctions()
816 NewF->takeName(F); in mergeTwoFunctions()
817 removeUsers(F); in mergeTwoFunctions()
818 F->replaceAllUsesWith(NewF); in mergeTwoFunctions()
822 writeThunkOrAlias(F, G); in mergeTwoFunctions()
823 writeThunkOrAlias(F, NewF); in mergeTwoFunctions()
825 F->setAlignment(MaxAlignment); in mergeTwoFunctions()
826 F->setLinkage(GlobalValue::PrivateLinkage); in mergeTwoFunctions()
838 Constant *BitcastF = ConstantExpr::getBitCast(F, G->getType()); in mergeTwoFunctions()
844 replaceDirectCallers(G, F); in mergeTwoFunctions()
857 if (writeThunkOrAlias(F, G)) { in mergeTwoFunctions()
866 Function *F = FN.getFunc(); in replaceFunctionInTree() local
867 assert(FunctionComparator(F, G, &GlobalNumbers).compare() == 0 && in replaceFunctionInTree()
870 auto I = FNodesInTree.find(F); in replaceFunctionInTree()
884 static bool isFuncOrderCorrect(const Function *F, const Function *G) { in isFuncOrderCorrect() argument
885 if (F->isInterposable() != G->isInterposable()) { in isFuncOrderCorrect()
888 return !F->isInterposable(); in isFuncOrderCorrect()
890 if (F->hasLocalLinkage() != G->hasLocalLinkage()) { in isFuncOrderCorrect()
893 return !F->hasLocalLinkage(); in isFuncOrderCorrect()
898 return F->getName() <= G->getName(); in isFuncOrderCorrect()
919 Function *F = OldF.getFunc(); in insert() local
921 NewFunction = F; in insert()
922 assert(OldF.getFunc() != F && "Must have swapped the functions."); in insert()
935 void MergeFunctions::remove(Function *F) { in remove() argument
936 auto I = FNodesInTree.find(F); in remove()
938 LLVM_DEBUG(dbgs() << "Deferred " << F->getName() << ".\n"); in remove()
943 Deferred.emplace_back(F); in remove()