Lines Matching defs:SCCNodes
151 /// where SCCNodes is the current SCC.
164 const SCCNodeSet &SCCNodes) {
193 SCCNodes.count(Call->getCalledFunction())) {
262 static void addMemoryAttrs(const SCCNodeSet &SCCNodes, AARGetterT &&AARGetter,
266 for (Function *F : SCCNodes) {
273 checkFunctionMemoryAccess(*F, F->hasExactDefinition(), AAR, SCCNodes);
286 for (Function *F : SCCNodes) {
418 auto PropagateAttributes = [&](std::vector<ValueInfo> &SCCNodes) {
421 InferredFlags.NoRecurse = (SCCNodes.size() == 1);
424 for (auto &V : SCCNodes) {
455 for (auto &V : SCCNodes) {
536 ArgumentUsesTracker(const SCCNodeSet &SCCNodes) : SCCNodes(SCCNodes) {}
548 if (!F || !F->hasExactDefinition() || !SCCNodes.count(F)) {
583 const SCCNodeSet &SCCNodes;
811 const SmallPtrSet<Argument *, 8> &SCCNodes) {
889 SCCNodes.count(F->getArg(UseIndex)))
952 static void addArgumentReturnedAttrs(const SCCNodeSet &SCCNodes,
955 for (Function *F : SCCNodes) {
1188 static void addArgumentAttrs(const SCCNodeSet &SCCNodes,
1195 for (Function *F : SCCNodes) {
1225 ArgumentUsesTracker Tracker(SCCNodes);
1382 static bool isFunctionMallocLike(Function *F, const SCCNodeSet &SCCNodes) {
1430 if (CB.getCalledFunction() && SCCNodes.count(CB.getCalledFunction()))
1446 static void addNoAliasAttrs(const SCCNodeSet &SCCNodes,
1450 for (Function *F : SCCNodes) {
1466 if (!isFunctionMallocLike(F, SCCNodes))
1470 for (Function *F : SCCNodes) {
1488 static bool isReturnNonNull(Function *F, const SCCNodeSet &SCCNodes,
1543 if (Callee && SCCNodes.count(Callee)) {
1559 static void addNonNullAttrs(const SCCNodeSet &SCCNodes,
1567 for (Function *F : SCCNodes) {
1584 if (isReturnNonNull(F, SCCNodes, Speculative)) {
1602 for (Function *F : SCCNodes) {
1616 static void addNoUndefAttrs(const SCCNodeSet &SCCNodes,
1620 for (Function *F : SCCNodes) {
1725 void run(const SCCNodeSet &SCCNodes, SmallSet<Function *, 8> &Changed);
1730 void AttributeInferer::run(const SCCNodeSet &SCCNodes,
1736 for (Function *F : SCCNodes) {
1785 for (Function *F : SCCNodes)
1799 SCCNodeSet SCCNodes;
1807 const SCCNodeSet &SCCNodes) {
1812 !SCCNodes.contains(CB->getCalledFunction());
1816 static bool InstrBreaksNonThrowing(Instruction &I, const SCCNodeSet &SCCNodes) {
1824 if (SCCNodes.contains(Callee))
1832 static bool InstrBreaksNoFree(Instruction &I, const SCCNodeSet &SCCNodes) {
1842 if (SCCNodes.contains(Callee))
1871 static bool InstrBreaksNoSync(Instruction &I, const SCCNodeSet &SCCNodes) {
1897 if (SCCNodes.contains(Callee))
1906 static void inferConvergent(const SCCNodeSet &SCCNodes,
1920 [SCCNodes](Instruction &I) {
1921 return InstrBreaksNonConvergent(I, SCCNodes);
1930 AI.run(SCCNodes, Changed);
1937 static void inferAttrsFromFunctionBodies(const SCCNodeSet &SCCNodes,
1952 [&SCCNodes](Instruction &I) {
1953 return InstrBreaksNonThrowing(I, SCCNodes);
1975 [&SCCNodes](Instruction &I) {
1976 return InstrBreaksNoFree(I, SCCNodes);
1991 [&SCCNodes](Instruction &I) {
1992 return InstrBreaksNoSync(I, SCCNodes);
2003 AI.run(SCCNodes, Changed);
2006 static void addNoRecurseAttrs(const SCCNodeSet &SCCNodes,
2011 if (SCCNodes.size() != 1)
2014 Function *F = *SCCNodes.begin();
2077 static void addNoReturnAttrs(const SCCNodeSet &SCCNodes,
2079 for (Function *F : SCCNodes) {
2138 static void addColdAttrs(const SCCNodeSet &SCCNodes,
2140 for (Function *F : SCCNodes) {
2185 static void addWillReturn(const SCCNodeSet &SCCNodes,
2187 for (Function *F : SCCNodes) {
2222 Res.SCCNodes.insert(F);
2234 if (Nodes.SCCNodes.empty())
2242 addArgumentAttrs(Nodes.SCCNodes, Changed, /*SkipInitializes=*/true);
2246 addArgumentReturnedAttrs(Nodes.SCCNodes, Changed);
2247 addMemoryAttrs(Nodes.SCCNodes, AARGetter, Changed);
2248 addArgumentAttrs(Nodes.SCCNodes, Changed, /*SkipInitializes=*/false);
2249 inferConvergent(Nodes.SCCNodes, Changed);
2250 addNoReturnAttrs(Nodes.SCCNodes, Changed);
2251 addColdAttrs(Nodes.SCCNodes, Changed);
2252 addWillReturn(Nodes.SCCNodes, Changed);
2253 addNoUndefAttrs(Nodes.SCCNodes, Changed);
2258 addNoAliasAttrs(Nodes.SCCNodes, Changed);
2259 addNonNullAttrs(Nodes.SCCNodes, Changed);
2260 inferAttrsFromFunctionBodies(Nodes.SCCNodes, Changed);
2261 addNoRecurseAttrs(Nodes.SCCNodes, Changed);
2268 for (Function *F : Nodes.SCCNodes)