Lines Matching refs:F

328 static unsigned NumRetVals(const Function *F) {  in NumRetVals()  argument
329 Type *RetTy = F->getReturnType(); in NumRetVals()
343 static Type *getRetComponentType(const Function *F, unsigned Idx) { in getRetComponentType() argument
344 Type *RetTy = F->getReturnType(); in getRetComponentType()
362 if (LiveFunctions.count(Use.F) || LiveValues.count(Use)) in MarkIfNotLive()
387 const Function *F = RI->getParent()->getParent(); in SurveyUse() local
389 RetOrArg Use = CreateRet(F, RetValNum); in SurveyUse()
394 for (unsigned i = 0; i < NumRetVals(F); ++i) { in SurveyUse()
395 RetOrArg Use = CreateRet(F, i); in SurveyUse()
428 const Function *F = CS.getCalledFunction(); in SurveyUse() local
429 if (F) { in SurveyUse()
442 if (ArgNo >= F->getFunctionType()->getNumParams()) in SurveyUse()
452 RetOrArg Use = CreateArg(F, ArgNo); in SurveyUse()
487 void DeadArgumentEliminationPass::SurveyFunction(const Function &F) { in SurveyFunction() argument
490 if (F.getAttributes().hasAttrSomewhere(Attribute::InAlloca)) { in SurveyFunction()
491 MarkLive(F); in SurveyFunction()
498 if (F.hasFnAttribute(Attribute::Naked)) { in SurveyFunction()
499 MarkLive(F); in SurveyFunction()
503 unsigned RetCount = NumRetVals(&F); in SurveyFunction()
519 for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { in SurveyFunction()
522 != F.getFunctionType()->getReturnType()) { in SurveyFunction()
524 MarkLive(F); in SurveyFunction()
536 LLVM_DEBUG(dbgs() << "DeadArgumentEliminationPass - " << F.getName() in SurveyFunction()
540 if (!F.hasLocalLinkage() && (!ShouldHackArguments || F.isIntrinsic())) { in SurveyFunction()
541 MarkLive(F); in SurveyFunction()
547 << F.getName() << "\n"); in SurveyFunction()
555 for (const Use &U : F.uses()) { in SurveyFunction()
560 MarkLive(F); in SurveyFunction()
572 MarkLive(F); in SurveyFunction()
614 LLVM_DEBUG(dbgs() << "DeadArgumentEliminationPass - " << F.getName() in SurveyFunction()
620 MarkValue(CreateRet(&F, i), RetValLiveness[i], MaybeLiveRetUses[i]); in SurveyFunction()
623 << F.getName() << "\n"); in SurveyFunction()
628 for (Function::const_arg_iterator AI = F.arg_begin(), in SurveyFunction()
629 E = F.arg_end(); AI != E; ++AI, ++i) { in SurveyFunction()
631 if (F.getFunctionType()->isVarArg() || HasMustTailCallers || in SurveyFunction()
652 MarkValue(CreateArg(&F, i), Result, MaybeLiveArgUses); in SurveyFunction()
681 void DeadArgumentEliminationPass::MarkLive(const Function &F) { in MarkLive() argument
683 << F.getName() << "\n"); in MarkLive()
685 LiveFunctions.insert(&F); in MarkLive()
687 for (unsigned i = 0, e = F.arg_size(); i != e; ++i) in MarkLive()
688 PropagateLiveness(CreateArg(&F, i)); in MarkLive()
690 for (unsigned i = 0, e = NumRetVals(&F); i != e; ++i) in MarkLive()
691 PropagateLiveness(CreateRet(&F, i)); in MarkLive()
698 if (LiveFunctions.count(RA.F)) in MarkLive()
730 bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) { in RemoveDeadStuffFromFunction() argument
732 if (LiveFunctions.count(F)) in RemoveDeadStuffFromFunction()
737 FunctionType *FTy = F->getFunctionType(); in RemoveDeadStuffFromFunction()
745 const AttributeList &PAL = F->getAttributes(); in RemoveDeadStuffFromFunction()
753 for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); in RemoveDeadStuffFromFunction()
755 RetOrArg Arg = CreateArg(F, i); in RemoveDeadStuffFromFunction()
765 << F->getName() << "\n"); in RemoveDeadStuffFromFunction()
772 unsigned RetCount = NumRetVals(F); in RemoveDeadStuffFromFunction()
802 RetOrArg Ret = CreateRet(F, i); in RemoveDeadStuffFromFunction()
804 RetTypes.push_back(getRetComponentType(F, i)); in RemoveDeadStuffFromFunction()
810 << i << " from " << F->getName() << "\n"); in RemoveDeadStuffFromFunction()
829 NRetTy = Type::getVoidTy(F->getContext()); in RemoveDeadStuffFromFunction()
847 AttributeSet RetAttrs = AttributeSet::get(F->getContext(), RAttrs); in RemoveDeadStuffFromFunction()
851 F->getContext(), Attribute::AllocSize); in RemoveDeadStuffFromFunction()
856 AttributeList::get(F->getContext(), FnAttrs, RetAttrs, ArgAttrVec); in RemoveDeadStuffFromFunction()
866 Function *NF = Function::Create(NFTy, F->getLinkage(), F->getAddressSpace()); in RemoveDeadStuffFromFunction()
867 NF->copyAttributesFrom(F); in RemoveDeadStuffFromFunction()
868 NF->setComdat(F->getComdat()); in RemoveDeadStuffFromFunction()
872 F->getParent()->getFunctionList().insert(F->getIterator(), NF); in RemoveDeadStuffFromFunction()
873 NF->takeName(F); in RemoveDeadStuffFromFunction()
878 while (!F->use_empty()) { in RemoveDeadStuffFromFunction()
879 CallSite CS(F->user_back()); in RemoveDeadStuffFromFunction()
889 AttributeSet RetAttrs = AttributeSet::get(F->getContext(), RAttrs); in RemoveDeadStuffFromFunction()
909 F->getContext(), in RemoveDeadStuffFromFunction()
929 F->getContext(), Attribute::AllocSize); in RemoveDeadStuffFromFunction()
932 F->getContext(), FnAttrs, RetAttrs, ArgAttrVec); in RemoveDeadStuffFromFunction()
1011 NF->getBasicBlockList().splice(NF->begin(), F->getBasicBlockList()); in RemoveDeadStuffFromFunction()
1016 for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(), in RemoveDeadStuffFromFunction()
1033 if (F->getReturnType() != NF->getReturnType()) in RemoveDeadStuffFromFunction()
1069 ReturnInst::Create(F->getContext(), RetVal, RI); in RemoveDeadStuffFromFunction()
1075 F->getAllMetadata(MDs); in RemoveDeadStuffFromFunction()
1080 F->eraseFromParent(); in RemoveDeadStuffFromFunction()
1095 Function &F = *I++; in run() local
1096 if (F.getFunctionType()->isVarArg()) in run()
1097 Changed |= DeleteDeadVarargs(F); in run()
1105 for (auto &F : M) in run() local
1106 SurveyFunction(F); in run()
1113 Function *F = &*I++; in run() local
1114 Changed |= RemoveDeadStuffFromFunction(F); in run()
1119 for (auto &F : M) in run() local
1120 Changed |= RemoveDeadArgumentsFromCallers(F); in run()