Lines Matching defs:SCCNodes

148 /// where SCCNodes is the current SCC.
161 const SCCNodeSet &SCCNodes) {
190 SCCNodes.count(Call->getCalledFunction())) {
259 static void addMemoryAttrs(const SCCNodeSet &SCCNodes, AARGetterT &&AARGetter,
263 for (Function *F : SCCNodes) {
270 checkFunctionMemoryAccess(*F, F->hasExactDefinition(), AAR, SCCNodes);
283 for (Function *F : SCCNodes) {
415 auto PropagateAttributes = [&](std::vector<ValueInfo> &SCCNodes) {
418 InferredFlags.NoRecurse = (SCCNodes.size() == 1);
421 for (auto &V : SCCNodes) {
452 for (auto &V : SCCNodes) {
533 ArgumentUsesTracker(const SCCNodeSet &SCCNodes) : SCCNodes(SCCNodes) {}
545 if (!F || !F->hasExactDefinition() || !SCCNodes.count(F)) {
580 const SCCNodeSet &SCCNodes;
612 const SmallPtrSet<Argument *, 8> &SCCNodes) {
690 SCCNodes.count(F->getArg(UseIndex)))
753 static void addArgumentReturnedAttrs(const SCCNodeSet &SCCNodes,
756 for (Function *F : SCCNodes) {
870 static void addArgumentAttrs(const SCCNodeSet &SCCNodes,
876 for (Function *F : SCCNodes) {
905 ArgumentUsesTracker Tracker(SCCNodes);
1055 static bool isFunctionMallocLike(Function *F, const SCCNodeSet &SCCNodes) {
1103 if (CB.getCalledFunction() && SCCNodes.count(CB.getCalledFunction()))
1119 static void addNoAliasAttrs(const SCCNodeSet &SCCNodes,
1123 for (Function *F : SCCNodes) {
1139 if (!isFunctionMallocLike(F, SCCNodes))
1143 for (Function *F : SCCNodes) {
1161 static bool isReturnNonNull(Function *F, const SCCNodeSet &SCCNodes,
1216 if (Callee && SCCNodes.count(Callee)) {
1232 static void addNonNullAttrs(const SCCNodeSet &SCCNodes,
1240 for (Function *F : SCCNodes) {
1257 if (isReturnNonNull(F, SCCNodes, Speculative)) {
1275 for (Function *F : SCCNodes) {
1289 static void addNoUndefAttrs(const SCCNodeSet &SCCNodes,
1293 for (Function *F : SCCNodes) {
1398 void run(const SCCNodeSet &SCCNodes, SmallSet<Function *, 8> &Changed);
1403 void AttributeInferer::run(const SCCNodeSet &SCCNodes,
1409 for (Function *F : SCCNodes) {
1458 for (Function *F : SCCNodes)
1472 SCCNodeSet SCCNodes;
1480 const SCCNodeSet &SCCNodes) {
1485 !SCCNodes.contains(CB->getCalledFunction());
1489 static bool InstrBreaksNonThrowing(Instruction &I, const SCCNodeSet &SCCNodes) {
1497 if (SCCNodes.contains(Callee))
1505 static bool InstrBreaksNoFree(Instruction &I, const SCCNodeSet &SCCNodes) {
1515 if (SCCNodes.contains(Callee))
1544 static bool InstrBreaksNoSync(Instruction &I, const SCCNodeSet &SCCNodes) {
1570 if (SCCNodes.contains(Callee))
1579 static void inferConvergent(const SCCNodeSet &SCCNodes,
1593 [SCCNodes](Instruction &I) {
1594 return InstrBreaksNonConvergent(I, SCCNodes);
1603 AI.run(SCCNodes, Changed);
1610 static void inferAttrsFromFunctionBodies(const SCCNodeSet &SCCNodes,
1625 [&SCCNodes](Instruction &I) {
1626 return InstrBreaksNonThrowing(I, SCCNodes);
1648 [&SCCNodes](Instruction &I) {
1649 return InstrBreaksNoFree(I, SCCNodes);
1664 [&SCCNodes](Instruction &I) {
1665 return InstrBreaksNoSync(I, SCCNodes);
1676 AI.run(SCCNodes, Changed);
1679 static void addNoRecurseAttrs(const SCCNodeSet &SCCNodes,
1684 if (SCCNodes.size() != 1)
1687 Function *F = *SCCNodes.begin();
1749 static void addNoReturnAttrs(const SCCNodeSet &SCCNodes,
1751 for (Function *F : SCCNodes) {
1793 static void addWillReturn(const SCCNodeSet &SCCNodes,
1795 for (Function *F : SCCNodes) {
1830 Res.SCCNodes.insert(F);
1842 if (Nodes.SCCNodes.empty())
1847 addArgumentAttrs(Nodes.SCCNodes, Changed);
1851 addArgumentReturnedAttrs(Nodes.SCCNodes, Changed);
1852 addMemoryAttrs(Nodes.SCCNodes, AARGetter, Changed);
1853 addArgumentAttrs(Nodes.SCCNodes, Changed);
1854 inferConvergent(Nodes.SCCNodes, Changed);
1855 addNoReturnAttrs(Nodes.SCCNodes, Changed);
1856 addWillReturn(Nodes.SCCNodes, Changed);
1857 addNoUndefAttrs(Nodes.SCCNodes, Changed);
1862 addNoAliasAttrs(Nodes.SCCNodes, Changed);
1863 addNonNullAttrs(Nodes.SCCNodes, Changed);
1864 inferAttrsFromFunctionBodies(Nodes.SCCNodes, Changed);
1865 addNoRecurseAttrs(Nodes.SCCNodes, Changed);
1872 for (Function *F : Nodes.SCCNodes)