Lines Matching refs:G

186   void replaceBy(Function *G) const {  in replaceBy()
187 F = G; in replaceBy()
255 void mergeTwoFunctions(Function *F, Function *G);
266 void eraseTail(Function *G);
279 void writeThunk(Function *F, Function *G);
282 void writeAlias(Function *F, Function *G);
286 bool writeThunkOrAlias(Function *F, Function *G);
289 void replaceFunctionInTree(const FunctionNode &FN, Function *G);
545 void MergeFunctions::eraseTail(Function *G) { in eraseTail() argument
547 for (BasicBlock &BB : drop_begin(*G)) { in eraseTail()
732 void MergeFunctions::writeThunk(Function *F, Function *G) { in writeThunk() argument
741 << G->getName() << "()\n"); in writeThunk()
742 GEntryBlock = &G->getEntryBlock(); in writeThunk()
746 << G->getName() << "() {\n"); in writeThunk()
751 NewG = Function::Create(G->getFunctionType(), G->getLinkage(), in writeThunk()
752 G->getAddressSpace(), "", G->getParent()); in writeThunk()
753 NewG->setComdat(G->getComdat()); in writeThunk()
754 NewG->IsNewDbgInfoFormat = G->IsNewDbgInfoFormat; in writeThunk()
759 Function *H = MergeFunctionsPDI ? G : NewG; in writeThunk()
771 G->getCallingConv() == CallingConv::SwiftTail; in writeThunk()
783 DISubprogram *DIS = G->getSubprogram(); in writeThunk()
794 << G->getName() << "()\n"); in writeThunk()
796 eraseTail(G); in writeThunk()
800 << G->getName() << "()\n"); in writeThunk()
802 NewG->copyAttributesFrom(G); in writeThunk()
803 NewG->takeName(G); in writeThunk()
805 copyMetadataIfPresent(G, NewG, "type"); in writeThunk()
806 copyMetadataIfPresent(G, NewG, "kcfi_type"); in writeThunk()
807 removeUsers(G); in writeThunk()
808 G->replaceAllUsesWith(NewG); in writeThunk()
809 G->eraseFromParent(); in writeThunk()
828 void MergeFunctions::writeAlias(Function *F, Function *G) { in writeAlias() argument
829 PointerType *PtrType = G->getType(); in writeAlias()
830 auto *GA = GlobalAlias::create(G->getValueType(), PtrType->getAddressSpace(), in writeAlias()
831 G->getLinkage(), "", F, G->getParent()); in writeAlias()
834 const MaybeAlign GAlign = G->getAlign(); in writeAlias()
839 GA->takeName(G); in writeAlias()
840 GA->setVisibility(G->getVisibility()); in writeAlias()
843 removeUsers(G); in writeAlias()
844 G->replaceAllUsesWith(GA); in writeAlias()
845 G->eraseFromParent(); in writeAlias()
853 bool MergeFunctions::writeThunkOrAlias(Function *F, Function *G) { in writeThunkOrAlias() argument
854 if (canCreateAliasFor(G)) { in writeThunkOrAlias()
855 writeAlias(F, G); in writeThunkOrAlias()
859 writeThunk(F, G); in writeThunkOrAlias()
866 void MergeFunctions::mergeTwoFunctions(Function *F, Function *G) { in mergeTwoFunctions() argument
868 assert(G->isInterposable()); in mergeTwoFunctions()
874 (!canCreateAliasFor(F) || !canCreateAliasFor(G))) in mergeTwoFunctions()
892 const MaybeAlign GAlign = G->getAlign(); in mergeTwoFunctions()
894 writeThunkOrAlias(F, G); in mergeTwoFunctions()
907 if (!G->isInterposable() && !MergeFunctionsPDI) { in mergeTwoFunctions()
911 if (G->hasGlobalUnnamedAddr() && !Used.contains(G)) { in mergeTwoFunctions()
914 GlobalNumbers.erase(G); in mergeTwoFunctions()
916 removeUsers(G); in mergeTwoFunctions()
917 G->replaceAllUsesWith(F); in mergeTwoFunctions()
921 replaceDirectCallers(G, F); in mergeTwoFunctions()
928 if (G->isDiscardableIfUnused() && G->use_empty() && !MergeFunctionsPDI) { in mergeTwoFunctions()
929 G->eraseFromParent(); in mergeTwoFunctions()
934 if (writeThunkOrAlias(F, G)) { in mergeTwoFunctions()
942 Function *G) { in replaceFunctionInTree() argument
944 assert(FunctionComparator(F, G, &GlobalNumbers).compare() == 0 && in replaceFunctionInTree()
949 assert(FNodesInTree.count(G) == 0 && "FNodesInTree should not contain G"); in replaceFunctionInTree()
955 FNodesInTree.insert({G, IterToFNInFnTree}); in replaceFunctionInTree()
957 FN.replaceBy(G); in replaceFunctionInTree()
961 static bool isFuncOrderCorrect(const Function *F, const Function *G) { in isFuncOrderCorrect() argument
962 if (F->isInterposable() != G->isInterposable()) { in isFuncOrderCorrect()
967 if (F->hasLocalLinkage() != G->hasLocalLinkage()) { in isFuncOrderCorrect()
975 return F->getName() <= G->getName(); in isFuncOrderCorrect()