[FunctionAttrs] Extract a helper function for the core logic used to
[oota-llvm.git] / lib / Transforms / IPO / FunctionAttrs.cpp
1 //===- FunctionAttrs.cpp - Pass which marks functions attributes ----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a simple interprocedural pass which walks the
11 // call-graph, looking for functions which do not access or only read
12 // non-local memory, and marking them readnone/readonly.  It does the
13 // same with function arguments independently, marking them readonly/
14 // readnone/nocapture.  Finally, well-known library call declarations
15 // are marked with all attributes that are consistent with the
16 // function's standard definition. This pass is implemented as a
17 // bottom-up traversal of the call-graph.
18 //
19 //===----------------------------------------------------------------------===//
20
21 #include "llvm/Transforms/IPO.h"
22 #include "llvm/ADT/SCCIterator.h"
23 #include "llvm/ADT/SetVector.h"
24 #include "llvm/ADT/SmallSet.h"
25 #include "llvm/ADT/Statistic.h"
26 #include "llvm/Analysis/AliasAnalysis.h"
27 #include "llvm/Analysis/AssumptionCache.h"
28 #include "llvm/Analysis/BasicAliasAnalysis.h"
29 #include "llvm/Analysis/CallGraph.h"
30 #include "llvm/Analysis/CallGraphSCCPass.h"
31 #include "llvm/Analysis/CaptureTracking.h"
32 #include "llvm/Analysis/TargetLibraryInfo.h"
33 #include "llvm/Analysis/ValueTracking.h"
34 #include "llvm/IR/GlobalVariable.h"
35 #include "llvm/IR/InstIterator.h"
36 #include "llvm/IR/IntrinsicInst.h"
37 #include "llvm/IR/LLVMContext.h"
38 #include "llvm/Support/Debug.h"
39 #include "llvm/Support/raw_ostream.h"
40 #include "llvm/Analysis/TargetLibraryInfo.h"
41 using namespace llvm;
42
43 #define DEBUG_TYPE "functionattrs"
44
45 STATISTIC(NumReadNone, "Number of functions marked readnone");
46 STATISTIC(NumReadOnly, "Number of functions marked readonly");
47 STATISTIC(NumNoCapture, "Number of arguments marked nocapture");
48 STATISTIC(NumReadNoneArg, "Number of arguments marked readnone");
49 STATISTIC(NumReadOnlyArg, "Number of arguments marked readonly");
50 STATISTIC(NumNoAlias, "Number of function returns marked noalias");
51 STATISTIC(NumNonNullReturn, "Number of function returns marked nonnull");
52 STATISTIC(NumAnnotated, "Number of attributes added to library functions");
53
54 namespace {
55 struct FunctionAttrs : public CallGraphSCCPass {
56   static char ID; // Pass identification, replacement for typeid
57   FunctionAttrs() : CallGraphSCCPass(ID) {
58     initializeFunctionAttrsPass(*PassRegistry::getPassRegistry());
59   }
60
61   bool runOnSCC(CallGraphSCC &SCC) override;
62
63   void getAnalysisUsage(AnalysisUsage &AU) const override {
64     AU.setPreservesCFG();
65     AU.addRequired<AssumptionCacheTracker>();
66     AU.addRequired<TargetLibraryInfoWrapperPass>();
67     CallGraphSCCPass::getAnalysisUsage(AU);
68   }
69
70 private:
71   TargetLibraryInfo *TLI;
72
73   bool AddReadAttrs(const CallGraphSCC &SCC);
74   bool AddArgumentAttrs(const CallGraphSCC &SCC);
75   bool AddNoAliasAttrs(const CallGraphSCC &SCC);
76   bool AddNonNullAttrs(const CallGraphSCC &SCC);
77   bool annotateLibraryCalls(const CallGraphSCC &SCC);
78 };
79 }
80
81 char FunctionAttrs::ID = 0;
82 INITIALIZE_PASS_BEGIN(FunctionAttrs, "functionattrs",
83                       "Deduce function attributes", false, false)
84 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
85 INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
86 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
87 INITIALIZE_PASS_END(FunctionAttrs, "functionattrs",
88                     "Deduce function attributes", false, false)
89
90 Pass *llvm::createFunctionAttrsPass() { return new FunctionAttrs(); }
91
92 namespace {
93 /// The three kinds of memory access relevant to 'readonly' and
94 /// 'readnone' attributes.
95 enum MemoryAccessKind {
96   MAK_ReadNone = 0,
97   MAK_ReadOnly = 1,
98   MAK_MayWrite = 2
99 };
100 }
101
102 static MemoryAccessKind
103 checkFunctionMemoryAccess(Function &F, AAResults &AAR,
104                           const SmallPtrSetImpl<Function *> &SCCNodes) {
105   FunctionModRefBehavior MRB = AAR.getModRefBehavior(&F);
106   if (MRB == FMRB_DoesNotAccessMemory)
107     // Already perfect!
108     return MAK_ReadNone;
109
110   // Definitions with weak linkage may be overridden at linktime with
111   // something that writes memory, so treat them like declarations.
112   if (F.isDeclaration() || F.mayBeOverridden()) {
113     if (AliasAnalysis::onlyReadsMemory(MRB))
114       return MAK_ReadOnly;
115
116     // Conservatively assume it writes to memory.
117     return MAK_MayWrite;
118   }
119
120   // Scan the function body for instructions that may read or write memory.
121   bool ReadsMemory = false;
122   for (inst_iterator II = inst_begin(F), E = inst_end(F); II != E; ++II) {
123     Instruction *I = &*II;
124
125     // Some instructions can be ignored even if they read or write memory.
126     // Detect these now, skipping to the next instruction if one is found.
127     CallSite CS(cast<Value>(I));
128     if (CS) {
129       // Ignore calls to functions in the same SCC.
130       if (CS.getCalledFunction() && SCCNodes.count(CS.getCalledFunction()))
131         continue;
132       FunctionModRefBehavior MRB = AAR.getModRefBehavior(CS);
133       // If the call doesn't access arbitrary memory, we may be able to
134       // figure out something.
135       if (AliasAnalysis::onlyAccessesArgPointees(MRB)) {
136         // If the call does access argument pointees, check each argument.
137         if (AliasAnalysis::doesAccessArgPointees(MRB))
138           // Check whether all pointer arguments point to local memory, and
139           // ignore calls that only access local memory.
140           for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
141                CI != CE; ++CI) {
142             Value *Arg = *CI;
143             if (Arg->getType()->isPointerTy()) {
144               AAMDNodes AAInfo;
145               I->getAAMetadata(AAInfo);
146
147               MemoryLocation Loc(Arg, MemoryLocation::UnknownSize, AAInfo);
148               if (!AAR.pointsToConstantMemory(Loc, /*OrLocal=*/true)) {
149                 if (MRB & MRI_Mod)
150                   // Writes non-local memory.  Give up.
151                   return MAK_MayWrite;
152                 if (MRB & MRI_Ref)
153                   // Ok, it reads non-local memory.
154                   ReadsMemory = true;
155               }
156             }
157           }
158         continue;
159       }
160       // The call could access any memory. If that includes writes, give up.
161       if (MRB & MRI_Mod)
162         return MAK_MayWrite;
163       // If it reads, note it.
164       if (MRB & MRI_Ref)
165         ReadsMemory = true;
166       continue;
167     } else if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
168       // Ignore non-volatile loads from local memory. (Atomic is okay here.)
169       if (!LI->isVolatile()) {
170         MemoryLocation Loc = MemoryLocation::get(LI);
171         if (AAR.pointsToConstantMemory(Loc, /*OrLocal=*/true))
172           continue;
173       }
174     } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
175       // Ignore non-volatile stores to local memory. (Atomic is okay here.)
176       if (!SI->isVolatile()) {
177         MemoryLocation Loc = MemoryLocation::get(SI);
178         if (AAR.pointsToConstantMemory(Loc, /*OrLocal=*/true))
179           continue;
180       }
181     } else if (VAArgInst *VI = dyn_cast<VAArgInst>(I)) {
182       // Ignore vaargs on local memory.
183       MemoryLocation Loc = MemoryLocation::get(VI);
184       if (AAR.pointsToConstantMemory(Loc, /*OrLocal=*/true))
185         continue;
186     }
187
188     // Any remaining instructions need to be taken seriously!  Check if they
189     // read or write memory.
190     if (I->mayWriteToMemory())
191       // Writes memory.  Just give up.
192       return MAK_MayWrite;
193
194     // If this instruction may read memory, remember that.
195     ReadsMemory |= I->mayReadFromMemory();
196   }
197
198   return ReadsMemory ? MAK_ReadOnly : MAK_ReadNone;
199 }
200
201 /// Deduce readonly/readnone attributes for the SCC.
202 bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) {
203   SmallPtrSet<Function *, 8> SCCNodes;
204
205   // Fill SCCNodes with the elements of the SCC.  Used for quickly
206   // looking up whether a given CallGraphNode is in this SCC.
207   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I)
208     SCCNodes.insert((*I)->getFunction());
209
210   // Check if any of the functions in the SCC read or write memory.  If they
211   // write memory then they can't be marked readnone or readonly.
212   bool ReadsMemory = false;
213   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
214     Function *F = (*I)->getFunction();
215
216     if (!F || F->hasFnAttribute(Attribute::OptimizeNone))
217       // External node or node we don't want to optimize - assume it may write
218       // memory and give up.
219       return false;
220
221     // We need to manually construct BasicAA directly in order to disable its
222     // use of other function analyses.
223     BasicAAResult BAR(createLegacyPMBasicAAResult(*this, *F));
224
225     // Construct our own AA results for this function. We do this manually to
226     // work around the limitations of the legacy pass manager.
227     AAResults AAR(createLegacyPMAAResults(*this, *F, BAR));
228
229     switch (checkFunctionMemoryAccess(*F, AAR, SCCNodes)) {
230     case MAK_MayWrite:
231       return false;
232     case MAK_ReadOnly:
233       ReadsMemory = true;
234       break;
235     case MAK_ReadNone:
236       // Nothing to do!
237       break;
238     }
239   }
240
241   // Success!  Functions in this SCC do not access memory, or only read memory.
242   // Give them the appropriate attribute.
243   bool MadeChange = false;
244   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
245     Function *F = (*I)->getFunction();
246
247     if (F->doesNotAccessMemory())
248       // Already perfect!
249       continue;
250
251     if (F->onlyReadsMemory() && ReadsMemory)
252       // No change.
253       continue;
254
255     MadeChange = true;
256
257     // Clear out any existing attributes.
258     AttrBuilder B;
259     B.addAttribute(Attribute::ReadOnly).addAttribute(Attribute::ReadNone);
260     F->removeAttributes(
261         AttributeSet::FunctionIndex,
262         AttributeSet::get(F->getContext(), AttributeSet::FunctionIndex, B));
263
264     // Add in the new attribute.
265     F->addAttribute(AttributeSet::FunctionIndex,
266                     ReadsMemory ? Attribute::ReadOnly : Attribute::ReadNone);
267
268     if (ReadsMemory)
269       ++NumReadOnly;
270     else
271       ++NumReadNone;
272   }
273
274   return MadeChange;
275 }
276
277 namespace {
278 /// For a given pointer Argument, this retains a list of Arguments of functions
279 /// in the same SCC that the pointer data flows into. We use this to build an
280 /// SCC of the arguments.
281 struct ArgumentGraphNode {
282   Argument *Definition;
283   SmallVector<ArgumentGraphNode *, 4> Uses;
284 };
285
286 class ArgumentGraph {
287   // We store pointers to ArgumentGraphNode objects, so it's important that
288   // that they not move around upon insert.
289   typedef std::map<Argument *, ArgumentGraphNode> ArgumentMapTy;
290
291   ArgumentMapTy ArgumentMap;
292
293   // There is no root node for the argument graph, in fact:
294   //   void f(int *x, int *y) { if (...) f(x, y); }
295   // is an example where the graph is disconnected. The SCCIterator requires a
296   // single entry point, so we maintain a fake ("synthetic") root node that
297   // uses every node. Because the graph is directed and nothing points into
298   // the root, it will not participate in any SCCs (except for its own).
299   ArgumentGraphNode SyntheticRoot;
300
301 public:
302   ArgumentGraph() { SyntheticRoot.Definition = nullptr; }
303
304   typedef SmallVectorImpl<ArgumentGraphNode *>::iterator iterator;
305
306   iterator begin() { return SyntheticRoot.Uses.begin(); }
307   iterator end() { return SyntheticRoot.Uses.end(); }
308   ArgumentGraphNode *getEntryNode() { return &SyntheticRoot; }
309
310   ArgumentGraphNode *operator[](Argument *A) {
311     ArgumentGraphNode &Node = ArgumentMap[A];
312     Node.Definition = A;
313     SyntheticRoot.Uses.push_back(&Node);
314     return &Node;
315   }
316 };
317
318 /// This tracker checks whether callees are in the SCC, and if so it does not
319 /// consider that a capture, instead adding it to the "Uses" list and
320 /// continuing with the analysis.
321 struct ArgumentUsesTracker : public CaptureTracker {
322   ArgumentUsesTracker(const SmallPtrSet<Function *, 8> &SCCNodes)
323       : Captured(false), SCCNodes(SCCNodes) {}
324
325   void tooManyUses() override { Captured = true; }
326
327   bool captured(const Use *U) override {
328     CallSite CS(U->getUser());
329     if (!CS.getInstruction()) {
330       Captured = true;
331       return true;
332     }
333
334     Function *F = CS.getCalledFunction();
335     if (!F || !SCCNodes.count(F)) {
336       Captured = true;
337       return true;
338     }
339
340     bool Found = false;
341     Function::arg_iterator AI = F->arg_begin(), AE = F->arg_end();
342     for (CallSite::arg_iterator PI = CS.arg_begin(), PE = CS.arg_end();
343          PI != PE; ++PI, ++AI) {
344       if (AI == AE) {
345         assert(F->isVarArg() && "More params than args in non-varargs call");
346         Captured = true;
347         return true;
348       }
349       if (PI == U) {
350         Uses.push_back(AI);
351         Found = true;
352         break;
353       }
354     }
355     assert(Found && "Capturing call-site captured nothing?");
356     (void)Found;
357     return false;
358   }
359
360   bool Captured; // True only if certainly captured (used outside our SCC).
361   SmallVector<Argument *, 4> Uses; // Uses within our SCC.
362
363   const SmallPtrSet<Function *, 8> &SCCNodes;
364 };
365 }
366
367 namespace llvm {
368 template <> struct GraphTraits<ArgumentGraphNode *> {
369   typedef ArgumentGraphNode NodeType;
370   typedef SmallVectorImpl<ArgumentGraphNode *>::iterator ChildIteratorType;
371
372   static inline NodeType *getEntryNode(NodeType *A) { return A; }
373   static inline ChildIteratorType child_begin(NodeType *N) {
374     return N->Uses.begin();
375   }
376   static inline ChildIteratorType child_end(NodeType *N) {
377     return N->Uses.end();
378   }
379 };
380 template <>
381 struct GraphTraits<ArgumentGraph *> : public GraphTraits<ArgumentGraphNode *> {
382   static NodeType *getEntryNode(ArgumentGraph *AG) {
383     return AG->getEntryNode();
384   }
385   static ChildIteratorType nodes_begin(ArgumentGraph *AG) {
386     return AG->begin();
387   }
388   static ChildIteratorType nodes_end(ArgumentGraph *AG) { return AG->end(); }
389 };
390 }
391
392 /// Returns Attribute::None, Attribute::ReadOnly or Attribute::ReadNone.
393 static Attribute::AttrKind
394 determinePointerReadAttrs(Argument *A,
395                           const SmallPtrSet<Argument *, 8> &SCCNodes) {
396
397   SmallVector<Use *, 32> Worklist;
398   SmallSet<Use *, 32> Visited;
399
400   // inalloca arguments are always clobbered by the call.
401   if (A->hasInAllocaAttr())
402     return Attribute::None;
403
404   bool IsRead = false;
405   // We don't need to track IsWritten. If A is written to, return immediately.
406
407   for (Use &U : A->uses()) {
408     Visited.insert(&U);
409     Worklist.push_back(&U);
410   }
411
412   while (!Worklist.empty()) {
413     Use *U = Worklist.pop_back_val();
414     Instruction *I = cast<Instruction>(U->getUser());
415     Value *V = U->get();
416
417     switch (I->getOpcode()) {
418     case Instruction::BitCast:
419     case Instruction::GetElementPtr:
420     case Instruction::PHI:
421     case Instruction::Select:
422     case Instruction::AddrSpaceCast:
423       // The original value is not read/written via this if the new value isn't.
424       for (Use &UU : I->uses())
425         if (Visited.insert(&UU).second)
426           Worklist.push_back(&UU);
427       break;
428
429     case Instruction::Call:
430     case Instruction::Invoke: {
431       bool Captures = true;
432
433       if (I->getType()->isVoidTy())
434         Captures = false;
435
436       auto AddUsersToWorklistIfCapturing = [&] {
437         if (Captures)
438           for (Use &UU : I->uses())
439             if (Visited.insert(&UU).second)
440               Worklist.push_back(&UU);
441       };
442
443       CallSite CS(I);
444       if (CS.doesNotAccessMemory()) {
445         AddUsersToWorklistIfCapturing();
446         continue;
447       }
448
449       Function *F = CS.getCalledFunction();
450       if (!F) {
451         if (CS.onlyReadsMemory()) {
452           IsRead = true;
453           AddUsersToWorklistIfCapturing();
454           continue;
455         }
456         return Attribute::None;
457       }
458
459       Function::arg_iterator AI = F->arg_begin(), AE = F->arg_end();
460       CallSite::arg_iterator B = CS.arg_begin(), E = CS.arg_end();
461       for (CallSite::arg_iterator A = B; A != E; ++A, ++AI) {
462         if (A->get() == V) {
463           if (AI == AE) {
464             assert(F->isVarArg() &&
465                    "More params than args in non-varargs call.");
466             return Attribute::None;
467           }
468           Captures &= !CS.doesNotCapture(A - B);
469           if (SCCNodes.count(AI))
470             continue;
471           if (!CS.onlyReadsMemory() && !CS.onlyReadsMemory(A - B))
472             return Attribute::None;
473           if (!CS.doesNotAccessMemory(A - B))
474             IsRead = true;
475         }
476       }
477       AddUsersToWorklistIfCapturing();
478       break;
479     }
480
481     case Instruction::Load:
482       IsRead = true;
483       break;
484
485     case Instruction::ICmp:
486     case Instruction::Ret:
487       break;
488
489     default:
490       return Attribute::None;
491     }
492   }
493
494   return IsRead ? Attribute::ReadOnly : Attribute::ReadNone;
495 }
496
497 /// Deduce nocapture attributes for the SCC.
498 bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
499   bool Changed = false;
500
501   SmallPtrSet<Function *, 8> SCCNodes;
502
503   // Fill SCCNodes with the elements of the SCC.  Used for quickly
504   // looking up whether a given CallGraphNode is in this SCC.
505   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
506     Function *F = (*I)->getFunction();
507     if (F && !F->isDeclaration() && !F->mayBeOverridden() &&
508         !F->hasFnAttribute(Attribute::OptimizeNone))
509       SCCNodes.insert(F);
510   }
511
512   ArgumentGraph AG;
513
514   AttrBuilder B;
515   B.addAttribute(Attribute::NoCapture);
516
517   // Check each function in turn, determining which pointer arguments are not
518   // captured.
519   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
520     Function *F = (*I)->getFunction();
521
522     if (!F || F->hasFnAttribute(Attribute::OptimizeNone))
523       // External node or function we're trying not to optimize - only a problem
524       // for arguments that we pass to it.
525       continue;
526
527     // Definitions with weak linkage may be overridden at linktime with
528     // something that captures pointers, so treat them like declarations.
529     if (F->isDeclaration() || F->mayBeOverridden())
530       continue;
531
532     // Functions that are readonly (or readnone) and nounwind and don't return
533     // a value can't capture arguments. Don't analyze them.
534     if (F->onlyReadsMemory() && F->doesNotThrow() &&
535         F->getReturnType()->isVoidTy()) {
536       for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end(); A != E;
537            ++A) {
538         if (A->getType()->isPointerTy() && !A->hasNoCaptureAttr()) {
539           A->addAttr(AttributeSet::get(F->getContext(), A->getArgNo() + 1, B));
540           ++NumNoCapture;
541           Changed = true;
542         }
543       }
544       continue;
545     }
546
547     for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end(); A != E;
548          ++A) {
549       if (!A->getType()->isPointerTy())
550         continue;
551       bool HasNonLocalUses = false;
552       if (!A->hasNoCaptureAttr()) {
553         ArgumentUsesTracker Tracker(SCCNodes);
554         PointerMayBeCaptured(A, &Tracker);
555         if (!Tracker.Captured) {
556           if (Tracker.Uses.empty()) {
557             // If it's trivially not captured, mark it nocapture now.
558             A->addAttr(
559                 AttributeSet::get(F->getContext(), A->getArgNo() + 1, B));
560             ++NumNoCapture;
561             Changed = true;
562           } else {
563             // If it's not trivially captured and not trivially not captured,
564             // then it must be calling into another function in our SCC. Save
565             // its particulars for Argument-SCC analysis later.
566             ArgumentGraphNode *Node = AG[A];
567             for (SmallVectorImpl<Argument *>::iterator
568                      UI = Tracker.Uses.begin(),
569                      UE = Tracker.Uses.end();
570                  UI != UE; ++UI) {
571               Node->Uses.push_back(AG[*UI]);
572               if (*UI != A)
573                 HasNonLocalUses = true;
574             }
575           }
576         }
577         // Otherwise, it's captured. Don't bother doing SCC analysis on it.
578       }
579       if (!HasNonLocalUses && !A->onlyReadsMemory()) {
580         // Can we determine that it's readonly/readnone without doing an SCC?
581         // Note that we don't allow any calls at all here, or else our result
582         // will be dependent on the iteration order through the functions in the
583         // SCC.
584         SmallPtrSet<Argument *, 8> Self;
585         Self.insert(A);
586         Attribute::AttrKind R = determinePointerReadAttrs(A, Self);
587         if (R != Attribute::None) {
588           AttrBuilder B;
589           B.addAttribute(R);
590           A->addAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
591           Changed = true;
592           R == Attribute::ReadOnly ? ++NumReadOnlyArg : ++NumReadNoneArg;
593         }
594       }
595     }
596   }
597
598   // The graph we've collected is partial because we stopped scanning for
599   // argument uses once we solved the argument trivially. These partial nodes
600   // show up as ArgumentGraphNode objects with an empty Uses list, and for
601   // these nodes the final decision about whether they capture has already been
602   // made.  If the definition doesn't have a 'nocapture' attribute by now, it
603   // captures.
604
605   for (scc_iterator<ArgumentGraph *> I = scc_begin(&AG); !I.isAtEnd(); ++I) {
606     const std::vector<ArgumentGraphNode *> &ArgumentSCC = *I;
607     if (ArgumentSCC.size() == 1) {
608       if (!ArgumentSCC[0]->Definition)
609         continue; // synthetic root node
610
611       // eg. "void f(int* x) { if (...) f(x); }"
612       if (ArgumentSCC[0]->Uses.size() == 1 &&
613           ArgumentSCC[0]->Uses[0] == ArgumentSCC[0]) {
614         Argument *A = ArgumentSCC[0]->Definition;
615         A->addAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
616         ++NumNoCapture;
617         Changed = true;
618       }
619       continue;
620     }
621
622     bool SCCCaptured = false;
623     for (auto I = ArgumentSCC.begin(), E = ArgumentSCC.end();
624          I != E && !SCCCaptured; ++I) {
625       ArgumentGraphNode *Node = *I;
626       if (Node->Uses.empty()) {
627         if (!Node->Definition->hasNoCaptureAttr())
628           SCCCaptured = true;
629       }
630     }
631     if (SCCCaptured)
632       continue;
633
634     SmallPtrSet<Argument *, 8> ArgumentSCCNodes;
635     // Fill ArgumentSCCNodes with the elements of the ArgumentSCC.  Used for
636     // quickly looking up whether a given Argument is in this ArgumentSCC.
637     for (auto I = ArgumentSCC.begin(), E = ArgumentSCC.end(); I != E; ++I) {
638       ArgumentSCCNodes.insert((*I)->Definition);
639     }
640
641     for (auto I = ArgumentSCC.begin(), E = ArgumentSCC.end();
642          I != E && !SCCCaptured; ++I) {
643       ArgumentGraphNode *N = *I;
644       for (SmallVectorImpl<ArgumentGraphNode *>::iterator UI = N->Uses.begin(),
645                                                           UE = N->Uses.end();
646            UI != UE; ++UI) {
647         Argument *A = (*UI)->Definition;
648         if (A->hasNoCaptureAttr() || ArgumentSCCNodes.count(A))
649           continue;
650         SCCCaptured = true;
651         break;
652       }
653     }
654     if (SCCCaptured)
655       continue;
656
657     for (unsigned i = 0, e = ArgumentSCC.size(); i != e; ++i) {
658       Argument *A = ArgumentSCC[i]->Definition;
659       A->addAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
660       ++NumNoCapture;
661       Changed = true;
662     }
663
664     // We also want to compute readonly/readnone. With a small number of false
665     // negatives, we can assume that any pointer which is captured isn't going
666     // to be provably readonly or readnone, since by definition we can't
667     // analyze all uses of a captured pointer.
668     //
669     // The false negatives happen when the pointer is captured by a function
670     // that promises readonly/readnone behaviour on the pointer, then the
671     // pointer's lifetime ends before anything that writes to arbitrary memory.
672     // Also, a readonly/readnone pointer may be returned, but returning a
673     // pointer is capturing it.
674
675     Attribute::AttrKind ReadAttr = Attribute::ReadNone;
676     for (unsigned i = 0, e = ArgumentSCC.size(); i != e; ++i) {
677       Argument *A = ArgumentSCC[i]->Definition;
678       Attribute::AttrKind K = determinePointerReadAttrs(A, ArgumentSCCNodes);
679       if (K == Attribute::ReadNone)
680         continue;
681       if (K == Attribute::ReadOnly) {
682         ReadAttr = Attribute::ReadOnly;
683         continue;
684       }
685       ReadAttr = K;
686       break;
687     }
688
689     if (ReadAttr != Attribute::None) {
690       AttrBuilder B, R;
691       B.addAttribute(ReadAttr);
692       R.addAttribute(Attribute::ReadOnly).addAttribute(Attribute::ReadNone);
693       for (unsigned i = 0, e = ArgumentSCC.size(); i != e; ++i) {
694         Argument *A = ArgumentSCC[i]->Definition;
695         // Clear out existing readonly/readnone attributes
696         A->removeAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1, R));
697         A->addAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
698         ReadAttr == Attribute::ReadOnly ? ++NumReadOnlyArg : ++NumReadNoneArg;
699         Changed = true;
700       }
701     }
702   }
703
704   return Changed;
705 }
706
707 /// Tests whether a function is "malloc-like".
708 ///
709 /// A function is "malloc-like" if it returns either null or a pointer that
710 /// doesn't alias any other pointer visible to the caller.
711 static bool isFunctionMallocLike(Function *F,
712                                  SmallPtrSet<Function *, 8> &SCCNodes) {
713   SmallSetVector<Value *, 8> FlowsToReturn;
714   for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I)
715     if (ReturnInst *Ret = dyn_cast<ReturnInst>(I->getTerminator()))
716       FlowsToReturn.insert(Ret->getReturnValue());
717
718   for (unsigned i = 0; i != FlowsToReturn.size(); ++i) {
719     Value *RetVal = FlowsToReturn[i];
720
721     if (Constant *C = dyn_cast<Constant>(RetVal)) {
722       if (!C->isNullValue() && !isa<UndefValue>(C))
723         return false;
724
725       continue;
726     }
727
728     if (isa<Argument>(RetVal))
729       return false;
730
731     if (Instruction *RVI = dyn_cast<Instruction>(RetVal))
732       switch (RVI->getOpcode()) {
733       // Extend the analysis by looking upwards.
734       case Instruction::BitCast:
735       case Instruction::GetElementPtr:
736       case Instruction::AddrSpaceCast:
737         FlowsToReturn.insert(RVI->getOperand(0));
738         continue;
739       case Instruction::Select: {
740         SelectInst *SI = cast<SelectInst>(RVI);
741         FlowsToReturn.insert(SI->getTrueValue());
742         FlowsToReturn.insert(SI->getFalseValue());
743         continue;
744       }
745       case Instruction::PHI: {
746         PHINode *PN = cast<PHINode>(RVI);
747         for (Value *IncValue : PN->incoming_values())
748           FlowsToReturn.insert(IncValue);
749         continue;
750       }
751
752       // Check whether the pointer came from an allocation.
753       case Instruction::Alloca:
754         break;
755       case Instruction::Call:
756       case Instruction::Invoke: {
757         CallSite CS(RVI);
758         if (CS.paramHasAttr(0, Attribute::NoAlias))
759           break;
760         if (CS.getCalledFunction() && SCCNodes.count(CS.getCalledFunction()))
761           break;
762       } // fall-through
763       default:
764         return false; // Did not come from an allocation.
765       }
766
767     if (PointerMayBeCaptured(RetVal, false, /*StoreCaptures=*/false))
768       return false;
769   }
770
771   return true;
772 }
773
774 /// Deduce noalias attributes for the SCC.
775 bool FunctionAttrs::AddNoAliasAttrs(const CallGraphSCC &SCC) {
776   SmallPtrSet<Function *, 8> SCCNodes;
777
778   // Fill SCCNodes with the elements of the SCC.  Used for quickly
779   // looking up whether a given CallGraphNode is in this SCC.
780   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I)
781     SCCNodes.insert((*I)->getFunction());
782
783   // Check each function in turn, determining which functions return noalias
784   // pointers.
785   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
786     Function *F = (*I)->getFunction();
787
788     if (!F || F->hasFnAttribute(Attribute::OptimizeNone))
789       // External node or node we don't want to optimize - skip it;
790       return false;
791
792     // Already noalias.
793     if (F->doesNotAlias(0))
794       continue;
795
796     // Definitions with weak linkage may be overridden at linktime, so
797     // treat them like declarations.
798     if (F->isDeclaration() || F->mayBeOverridden())
799       return false;
800
801     // We annotate noalias return values, which are only applicable to
802     // pointer types.
803     if (!F->getReturnType()->isPointerTy())
804       continue;
805
806     if (!isFunctionMallocLike(F, SCCNodes))
807       return false;
808   }
809
810   bool MadeChange = false;
811   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
812     Function *F = (*I)->getFunction();
813     if (F->doesNotAlias(0) || !F->getReturnType()->isPointerTy())
814       continue;
815
816     F->setDoesNotAlias(0);
817     ++NumNoAlias;
818     MadeChange = true;
819   }
820
821   return MadeChange;
822 }
823
824 /// Tests whether this function is known to not return null.
825 ///
826 /// Requires that the function returns a pointer.
827 ///
828 /// Returns true if it believes the function will not return a null, and sets
829 /// \p Speculative based on whether the returned conclusion is a speculative
830 /// conclusion due to SCC calls.
831 static bool isReturnNonNull(Function *F, SmallPtrSet<Function *, 8> &SCCNodes,
832                             const TargetLibraryInfo &TLI, bool &Speculative) {
833   assert(F->getReturnType()->isPointerTy() &&
834          "nonnull only meaningful on pointer types");
835   Speculative = false;
836
837   SmallSetVector<Value *, 8> FlowsToReturn;
838   for (BasicBlock &BB : *F)
839     if (auto *Ret = dyn_cast<ReturnInst>(BB.getTerminator()))
840       FlowsToReturn.insert(Ret->getReturnValue());
841
842   for (unsigned i = 0; i != FlowsToReturn.size(); ++i) {
843     Value *RetVal = FlowsToReturn[i];
844
845     // If this value is locally known to be non-null, we're good
846     if (isKnownNonNull(RetVal, &TLI))
847       continue;
848
849     // Otherwise, we need to look upwards since we can't make any local
850     // conclusions.
851     Instruction *RVI = dyn_cast<Instruction>(RetVal);
852     if (!RVI)
853       return false;
854     switch (RVI->getOpcode()) {
855     // Extend the analysis by looking upwards.
856     case Instruction::BitCast:
857     case Instruction::GetElementPtr:
858     case Instruction::AddrSpaceCast:
859       FlowsToReturn.insert(RVI->getOperand(0));
860       continue;
861     case Instruction::Select: {
862       SelectInst *SI = cast<SelectInst>(RVI);
863       FlowsToReturn.insert(SI->getTrueValue());
864       FlowsToReturn.insert(SI->getFalseValue());
865       continue;
866     }
867     case Instruction::PHI: {
868       PHINode *PN = cast<PHINode>(RVI);
869       for (int i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
870         FlowsToReturn.insert(PN->getIncomingValue(i));
871       continue;
872     }
873     case Instruction::Call:
874     case Instruction::Invoke: {
875       CallSite CS(RVI);
876       Function *Callee = CS.getCalledFunction();
877       // A call to a node within the SCC is assumed to return null until
878       // proven otherwise
879       if (Callee && SCCNodes.count(Callee)) {
880         Speculative = true;
881         continue;
882       }
883       return false;
884     }
885     default:
886       return false; // Unknown source, may be null
887     };
888     llvm_unreachable("should have either continued or returned");
889   }
890
891   return true;
892 }
893
894 /// Deduce nonnull attributes for the SCC.
895 bool FunctionAttrs::AddNonNullAttrs(const CallGraphSCC &SCC) {
896   SmallPtrSet<Function *, 8> SCCNodes;
897
898   // Fill SCCNodes with the elements of the SCC.  Used for quickly
899   // looking up whether a given CallGraphNode is in this SCC.
900   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I)
901     SCCNodes.insert((*I)->getFunction());
902
903   // Speculative that all functions in the SCC return only nonnull
904   // pointers.  We may refute this as we analyze functions.
905   bool SCCReturnsNonNull = true;
906
907   bool MadeChange = false;
908
909   // Check each function in turn, determining which functions return nonnull
910   // pointers.
911   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
912     Function *F = (*I)->getFunction();
913
914     if (!F || F->hasFnAttribute(Attribute::OptimizeNone))
915       // External node or node we don't want to optimize - skip it;
916       return false;
917
918     // Already nonnull.
919     if (F->getAttributes().hasAttribute(AttributeSet::ReturnIndex,
920                                         Attribute::NonNull))
921       continue;
922
923     // Definitions with weak linkage may be overridden at linktime, so
924     // treat them like declarations.
925     if (F->isDeclaration() || F->mayBeOverridden())
926       return false;
927
928     // We annotate nonnull return values, which are only applicable to
929     // pointer types.
930     if (!F->getReturnType()->isPointerTy())
931       continue;
932
933     bool Speculative = false;
934     if (isReturnNonNull(F, SCCNodes, *TLI, Speculative)) {
935       if (!Speculative) {
936         // Mark the function eagerly since we may discover a function
937         // which prevents us from speculating about the entire SCC
938         DEBUG(dbgs() << "Eagerly marking " << F->getName() << " as nonnull\n");
939         F->addAttribute(AttributeSet::ReturnIndex, Attribute::NonNull);
940         ++NumNonNullReturn;
941         MadeChange = true;
942       }
943       continue;
944     }
945     // At least one function returns something which could be null, can't
946     // speculate any more.
947     SCCReturnsNonNull = false;
948   }
949
950   if (SCCReturnsNonNull) {
951     for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
952       Function *F = (*I)->getFunction();
953       if (F->getAttributes().hasAttribute(AttributeSet::ReturnIndex,
954                                           Attribute::NonNull) ||
955           !F->getReturnType()->isPointerTy())
956         continue;
957
958       DEBUG(dbgs() << "SCC marking " << F->getName() << " as nonnull\n");
959       F->addAttribute(AttributeSet::ReturnIndex, Attribute::NonNull);
960       ++NumNonNullReturn;
961       MadeChange = true;
962     }
963   }
964
965   return MadeChange;
966 }
967
968 static void setDoesNotAccessMemory(Function &F) {
969   if (!F.doesNotAccessMemory()) {
970     F.setDoesNotAccessMemory();
971     ++NumAnnotated;
972   }
973 }
974
975 static void setOnlyReadsMemory(Function &F) {
976   if (!F.onlyReadsMemory()) {
977     F.setOnlyReadsMemory();
978     ++NumAnnotated;
979   }
980 }
981
982 static void setDoesNotThrow(Function &F) {
983   if (!F.doesNotThrow()) {
984     F.setDoesNotThrow();
985     ++NumAnnotated;
986   }
987 }
988
989 static void setDoesNotCapture(Function &F, unsigned n) {
990   if (!F.doesNotCapture(n)) {
991     F.setDoesNotCapture(n);
992     ++NumAnnotated;
993   }
994 }
995
996 static void setOnlyReadsMemory(Function &F, unsigned n) {
997   if (!F.onlyReadsMemory(n)) {
998     F.setOnlyReadsMemory(n);
999     ++NumAnnotated;
1000   }
1001 }
1002
1003 static void setDoesNotAlias(Function &F, unsigned n) {
1004   if (!F.doesNotAlias(n)) {
1005     F.setDoesNotAlias(n);
1006     ++NumAnnotated;
1007   }
1008 }
1009
1010 /// Analyze the name and prototype of the given function and set any applicable
1011 /// attributes.
1012 ///
1013 /// Returns true if any attributes were set and false otherwise.
1014 static bool inferPrototypeAttributes(Function &F, const TargetLibraryInfo &TLI) {
1015   if (F.hasFnAttribute(Attribute::OptimizeNone))
1016     return false;
1017
1018   FunctionType *FTy = F.getFunctionType();
1019   LibFunc::Func TheLibFunc;
1020   if (!(TLI.getLibFunc(F.getName(), TheLibFunc) && TLI.has(TheLibFunc)))
1021     return false;
1022
1023   switch (TheLibFunc) {
1024   case LibFunc::strlen:
1025     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1026       return false;
1027     setOnlyReadsMemory(F);
1028     setDoesNotThrow(F);
1029     setDoesNotCapture(F, 1);
1030     break;
1031   case LibFunc::strchr:
1032   case LibFunc::strrchr:
1033     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
1034         !FTy->getParamType(1)->isIntegerTy())
1035       return false;
1036     setOnlyReadsMemory(F);
1037     setDoesNotThrow(F);
1038     break;
1039   case LibFunc::strtol:
1040   case LibFunc::strtod:
1041   case LibFunc::strtof:
1042   case LibFunc::strtoul:
1043   case LibFunc::strtoll:
1044   case LibFunc::strtold:
1045   case LibFunc::strtoull:
1046     if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
1047       return false;
1048     setDoesNotThrow(F);
1049     setDoesNotCapture(F, 2);
1050     setOnlyReadsMemory(F, 1);
1051     break;
1052   case LibFunc::strcpy:
1053   case LibFunc::stpcpy:
1054   case LibFunc::strcat:
1055   case LibFunc::strncat:
1056   case LibFunc::strncpy:
1057   case LibFunc::stpncpy:
1058     if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
1059       return false;
1060     setDoesNotThrow(F);
1061     setDoesNotCapture(F, 2);
1062     setOnlyReadsMemory(F, 2);
1063     break;
1064   case LibFunc::strxfrm:
1065     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1066         !FTy->getParamType(1)->isPointerTy())
1067       return false;
1068     setDoesNotThrow(F);
1069     setDoesNotCapture(F, 1);
1070     setDoesNotCapture(F, 2);
1071     setOnlyReadsMemory(F, 2);
1072     break;
1073   case LibFunc::strcmp: // 0,1
1074   case LibFunc::strspn:  // 0,1
1075   case LibFunc::strncmp: // 0,1
1076   case LibFunc::strcspn: // 0,1
1077   case LibFunc::strcoll: // 0,1
1078   case LibFunc::strcasecmp:  // 0,1
1079   case LibFunc::strncasecmp: //
1080     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1081         !FTy->getParamType(1)->isPointerTy())
1082       return false;
1083     setOnlyReadsMemory(F);
1084     setDoesNotThrow(F);
1085     setDoesNotCapture(F, 1);
1086     setDoesNotCapture(F, 2);
1087     break;
1088   case LibFunc::strstr:
1089   case LibFunc::strpbrk:
1090     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1091       return false;
1092     setOnlyReadsMemory(F);
1093     setDoesNotThrow(F);
1094     setDoesNotCapture(F, 2);
1095     break;
1096   case LibFunc::strtok:
1097   case LibFunc::strtok_r:
1098     if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
1099       return false;
1100     setDoesNotThrow(F);
1101     setDoesNotCapture(F, 2);
1102     setOnlyReadsMemory(F, 2);
1103     break;
1104   case LibFunc::scanf:
1105     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
1106       return false;
1107     setDoesNotThrow(F);
1108     setDoesNotCapture(F, 1);
1109     setOnlyReadsMemory(F, 1);
1110     break;
1111   case LibFunc::setbuf:
1112   case LibFunc::setvbuf:
1113     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
1114       return false;
1115     setDoesNotThrow(F);
1116     setDoesNotCapture(F, 1);
1117     break;
1118   case LibFunc::strdup:
1119   case LibFunc::strndup:
1120     if (FTy->getNumParams() < 1 || !FTy->getReturnType()->isPointerTy() ||
1121         !FTy->getParamType(0)->isPointerTy())
1122       return false;
1123     setDoesNotThrow(F);
1124     setDoesNotAlias(F, 0);
1125     setDoesNotCapture(F, 1);
1126     setOnlyReadsMemory(F, 1);
1127     break;
1128   case LibFunc::stat:
1129   case LibFunc::statvfs:
1130     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1131         !FTy->getParamType(1)->isPointerTy())
1132       return false;
1133     setDoesNotThrow(F);
1134     setDoesNotCapture(F, 1);
1135     setDoesNotCapture(F, 2);
1136     setOnlyReadsMemory(F, 1);
1137     break;
1138   case LibFunc::sscanf:
1139     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1140         !FTy->getParamType(1)->isPointerTy())
1141       return false;
1142     setDoesNotThrow(F);
1143     setDoesNotCapture(F, 1);
1144     setDoesNotCapture(F, 2);
1145     setOnlyReadsMemory(F, 1);
1146     setOnlyReadsMemory(F, 2);
1147     break;
1148   case LibFunc::sprintf:
1149     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1150         !FTy->getParamType(1)->isPointerTy())
1151       return false;
1152     setDoesNotThrow(F);
1153     setDoesNotCapture(F, 1);
1154     setDoesNotCapture(F, 2);
1155     setOnlyReadsMemory(F, 2);
1156     break;
1157   case LibFunc::snprintf:
1158     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1159         !FTy->getParamType(2)->isPointerTy())
1160       return false;
1161     setDoesNotThrow(F);
1162     setDoesNotCapture(F, 1);
1163     setDoesNotCapture(F, 3);
1164     setOnlyReadsMemory(F, 3);
1165     break;
1166   case LibFunc::setitimer:
1167     if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy() ||
1168         !FTy->getParamType(2)->isPointerTy())
1169       return false;
1170     setDoesNotThrow(F);
1171     setDoesNotCapture(F, 2);
1172     setDoesNotCapture(F, 3);
1173     setOnlyReadsMemory(F, 2);
1174     break;
1175   case LibFunc::system:
1176     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1177       return false;
1178     // May throw; "system" is a valid pthread cancellation point.
1179     setDoesNotCapture(F, 1);
1180     setOnlyReadsMemory(F, 1);
1181     break;
1182   case LibFunc::malloc:
1183     if (FTy->getNumParams() != 1 || !FTy->getReturnType()->isPointerTy())
1184       return false;
1185     setDoesNotThrow(F);
1186     setDoesNotAlias(F, 0);
1187     break;
1188   case LibFunc::memcmp:
1189     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1190         !FTy->getParamType(1)->isPointerTy())
1191       return false;
1192     setOnlyReadsMemory(F);
1193     setDoesNotThrow(F);
1194     setDoesNotCapture(F, 1);
1195     setDoesNotCapture(F, 2);
1196     break;
1197   case LibFunc::memchr:
1198   case LibFunc::memrchr:
1199     if (FTy->getNumParams() != 3)
1200       return false;
1201     setOnlyReadsMemory(F);
1202     setDoesNotThrow(F);
1203     break;
1204   case LibFunc::modf:
1205   case LibFunc::modff:
1206   case LibFunc::modfl:
1207     if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
1208       return false;
1209     setDoesNotThrow(F);
1210     setDoesNotCapture(F, 2);
1211     break;
1212   case LibFunc::memcpy:
1213   case LibFunc::memccpy:
1214   case LibFunc::memmove:
1215     if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
1216       return false;
1217     setDoesNotThrow(F);
1218     setDoesNotCapture(F, 2);
1219     setOnlyReadsMemory(F, 2);
1220     break;
1221   case LibFunc::memalign:
1222     if (!FTy->getReturnType()->isPointerTy())
1223       return false;
1224     setDoesNotAlias(F, 0);
1225     break;
1226   case LibFunc::mkdir:
1227     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1228       return false;
1229     setDoesNotThrow(F);
1230     setDoesNotCapture(F, 1);
1231     setOnlyReadsMemory(F, 1);
1232     break;
1233   case LibFunc::mktime:
1234     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1235       return false;
1236     setDoesNotThrow(F);
1237     setDoesNotCapture(F, 1);
1238     break;
1239   case LibFunc::realloc:
1240     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
1241         !FTy->getReturnType()->isPointerTy())
1242       return false;
1243     setDoesNotThrow(F);
1244     setDoesNotAlias(F, 0);
1245     setDoesNotCapture(F, 1);
1246     break;
1247   case LibFunc::read:
1248     if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy())
1249       return false;
1250     // May throw; "read" is a valid pthread cancellation point.
1251     setDoesNotCapture(F, 2);
1252     break;
1253   case LibFunc::rewind:
1254     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
1255       return false;
1256     setDoesNotThrow(F);
1257     setDoesNotCapture(F, 1);
1258     break;
1259   case LibFunc::rmdir:
1260   case LibFunc::remove:
1261   case LibFunc::realpath:
1262     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
1263       return false;
1264     setDoesNotThrow(F);
1265     setDoesNotCapture(F, 1);
1266     setOnlyReadsMemory(F, 1);
1267     break;
1268   case LibFunc::rename:
1269     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1270         !FTy->getParamType(1)->isPointerTy())
1271       return false;
1272     setDoesNotThrow(F);
1273     setDoesNotCapture(F, 1);
1274     setDoesNotCapture(F, 2);
1275     setOnlyReadsMemory(F, 1);
1276     setOnlyReadsMemory(F, 2);
1277     break;
1278   case LibFunc::readlink:
1279     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1280         !FTy->getParamType(1)->isPointerTy())
1281       return false;
1282     setDoesNotThrow(F);
1283     setDoesNotCapture(F, 1);
1284     setDoesNotCapture(F, 2);
1285     setOnlyReadsMemory(F, 1);
1286     break;
1287   case LibFunc::write:
1288     if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy())
1289       return false;
1290     // May throw; "write" is a valid pthread cancellation point.
1291     setDoesNotCapture(F, 2);
1292     setOnlyReadsMemory(F, 2);
1293     break;
1294   case LibFunc::bcopy:
1295     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1296         !FTy->getParamType(1)->isPointerTy())
1297       return false;
1298     setDoesNotThrow(F);
1299     setDoesNotCapture(F, 1);
1300     setDoesNotCapture(F, 2);
1301     setOnlyReadsMemory(F, 1);
1302     break;
1303   case LibFunc::bcmp:
1304     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1305         !FTy->getParamType(1)->isPointerTy())
1306       return false;
1307     setDoesNotThrow(F);
1308     setOnlyReadsMemory(F);
1309     setDoesNotCapture(F, 1);
1310     setDoesNotCapture(F, 2);
1311     break;
1312   case LibFunc::bzero:
1313     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy())
1314       return false;
1315     setDoesNotThrow(F);
1316     setDoesNotCapture(F, 1);
1317     break;
1318   case LibFunc::calloc:
1319     if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy())
1320       return false;
1321     setDoesNotThrow(F);
1322     setDoesNotAlias(F, 0);
1323     break;
1324   case LibFunc::chmod:
1325   case LibFunc::chown:
1326     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1327       return false;
1328     setDoesNotThrow(F);
1329     setDoesNotCapture(F, 1);
1330     setOnlyReadsMemory(F, 1);
1331     break;
1332   case LibFunc::ctermid:
1333   case LibFunc::clearerr:
1334   case LibFunc::closedir:
1335     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1336       return false;
1337     setDoesNotThrow(F);
1338     setDoesNotCapture(F, 1);
1339     break;
1340   case LibFunc::atoi:
1341   case LibFunc::atol:
1342   case LibFunc::atof:
1343   case LibFunc::atoll:
1344     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1345       return false;
1346     setDoesNotThrow(F);
1347     setOnlyReadsMemory(F);
1348     setDoesNotCapture(F, 1);
1349     break;
1350   case LibFunc::access:
1351     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy())
1352       return false;
1353     setDoesNotThrow(F);
1354     setDoesNotCapture(F, 1);
1355     setOnlyReadsMemory(F, 1);
1356     break;
1357   case LibFunc::fopen:
1358     if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
1359         !FTy->getParamType(0)->isPointerTy() ||
1360         !FTy->getParamType(1)->isPointerTy())
1361       return false;
1362     setDoesNotThrow(F);
1363     setDoesNotAlias(F, 0);
1364     setDoesNotCapture(F, 1);
1365     setDoesNotCapture(F, 2);
1366     setOnlyReadsMemory(F, 1);
1367     setOnlyReadsMemory(F, 2);
1368     break;
1369   case LibFunc::fdopen:
1370     if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
1371         !FTy->getParamType(1)->isPointerTy())
1372       return false;
1373     setDoesNotThrow(F);
1374     setDoesNotAlias(F, 0);
1375     setDoesNotCapture(F, 2);
1376     setOnlyReadsMemory(F, 2);
1377     break;
1378   case LibFunc::feof:
1379   case LibFunc::free:
1380   case LibFunc::fseek:
1381   case LibFunc::ftell:
1382   case LibFunc::fgetc:
1383   case LibFunc::fseeko:
1384   case LibFunc::ftello:
1385   case LibFunc::fileno:
1386   case LibFunc::fflush:
1387   case LibFunc::fclose:
1388   case LibFunc::fsetpos:
1389   case LibFunc::flockfile:
1390   case LibFunc::funlockfile:
1391   case LibFunc::ftrylockfile:
1392     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1393       return false;
1394     setDoesNotThrow(F);
1395     setDoesNotCapture(F, 1);
1396     break;
1397   case LibFunc::ferror:
1398     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1399       return false;
1400     setDoesNotThrow(F);
1401     setDoesNotCapture(F, 1);
1402     setOnlyReadsMemory(F);
1403     break;
1404   case LibFunc::fputc:
1405   case LibFunc::fstat:
1406   case LibFunc::frexp:
1407   case LibFunc::frexpf:
1408   case LibFunc::frexpl:
1409   case LibFunc::fstatvfs:
1410     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1411       return false;
1412     setDoesNotThrow(F);
1413     setDoesNotCapture(F, 2);
1414     break;
1415   case LibFunc::fgets:
1416     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1417         !FTy->getParamType(2)->isPointerTy())
1418       return false;
1419     setDoesNotThrow(F);
1420     setDoesNotCapture(F, 3);
1421     break;
1422   case LibFunc::fread:
1423     if (FTy->getNumParams() != 4 || !FTy->getParamType(0)->isPointerTy() ||
1424         !FTy->getParamType(3)->isPointerTy())
1425       return false;
1426     setDoesNotThrow(F);
1427     setDoesNotCapture(F, 1);
1428     setDoesNotCapture(F, 4);
1429     break;
1430   case LibFunc::fwrite:
1431     if (FTy->getNumParams() != 4 || !FTy->getParamType(0)->isPointerTy() ||
1432         !FTy->getParamType(3)->isPointerTy())
1433       return false;
1434     setDoesNotThrow(F);
1435     setDoesNotCapture(F, 1);
1436     setDoesNotCapture(F, 4);
1437     break;
1438   case LibFunc::fputs:
1439     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1440         !FTy->getParamType(1)->isPointerTy())
1441       return false;
1442     setDoesNotThrow(F);
1443     setDoesNotCapture(F, 1);
1444     setDoesNotCapture(F, 2);
1445     setOnlyReadsMemory(F, 1);
1446     break;
1447   case LibFunc::fscanf:
1448   case LibFunc::fprintf:
1449     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1450         !FTy->getParamType(1)->isPointerTy())
1451       return false;
1452     setDoesNotThrow(F);
1453     setDoesNotCapture(F, 1);
1454     setDoesNotCapture(F, 2);
1455     setOnlyReadsMemory(F, 2);
1456     break;
1457   case LibFunc::fgetpos:
1458     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
1459         !FTy->getParamType(1)->isPointerTy())
1460       return false;
1461     setDoesNotThrow(F);
1462     setDoesNotCapture(F, 1);
1463     setDoesNotCapture(F, 2);
1464     break;
1465   case LibFunc::getc:
1466   case LibFunc::getlogin_r:
1467   case LibFunc::getc_unlocked:
1468     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1469       return false;
1470     setDoesNotThrow(F);
1471     setDoesNotCapture(F, 1);
1472     break;
1473   case LibFunc::getenv:
1474     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1475       return false;
1476     setDoesNotThrow(F);
1477     setOnlyReadsMemory(F);
1478     setDoesNotCapture(F, 1);
1479     break;
1480   case LibFunc::gets:
1481   case LibFunc::getchar:
1482     setDoesNotThrow(F);
1483     break;
1484   case LibFunc::getitimer:
1485     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1486       return false;
1487     setDoesNotThrow(F);
1488     setDoesNotCapture(F, 2);
1489     break;
1490   case LibFunc::getpwnam:
1491     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1492       return false;
1493     setDoesNotThrow(F);
1494     setDoesNotCapture(F, 1);
1495     setOnlyReadsMemory(F, 1);
1496     break;
1497   case LibFunc::ungetc:
1498     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1499       return false;
1500     setDoesNotThrow(F);
1501     setDoesNotCapture(F, 2);
1502     break;
1503   case LibFunc::uname:
1504     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1505       return false;
1506     setDoesNotThrow(F);
1507     setDoesNotCapture(F, 1);
1508     break;
1509   case LibFunc::unlink:
1510     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1511       return false;
1512     setDoesNotThrow(F);
1513     setDoesNotCapture(F, 1);
1514     setOnlyReadsMemory(F, 1);
1515     break;
1516   case LibFunc::unsetenv:
1517     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1518       return false;
1519     setDoesNotThrow(F);
1520     setDoesNotCapture(F, 1);
1521     setOnlyReadsMemory(F, 1);
1522     break;
1523   case LibFunc::utime:
1524   case LibFunc::utimes:
1525     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
1526         !FTy->getParamType(1)->isPointerTy())
1527       return false;
1528     setDoesNotThrow(F);
1529     setDoesNotCapture(F, 1);
1530     setDoesNotCapture(F, 2);
1531     setOnlyReadsMemory(F, 1);
1532     setOnlyReadsMemory(F, 2);
1533     break;
1534   case LibFunc::putc:
1535     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1536       return false;
1537     setDoesNotThrow(F);
1538     setDoesNotCapture(F, 2);
1539     break;
1540   case LibFunc::puts:
1541   case LibFunc::printf:
1542   case LibFunc::perror:
1543     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1544       return false;
1545     setDoesNotThrow(F);
1546     setDoesNotCapture(F, 1);
1547     setOnlyReadsMemory(F, 1);
1548     break;
1549   case LibFunc::pread:
1550     if (FTy->getNumParams() != 4 || !FTy->getParamType(1)->isPointerTy())
1551       return false;
1552     // May throw; "pread" is a valid pthread cancellation point.
1553     setDoesNotCapture(F, 2);
1554     break;
1555   case LibFunc::pwrite:
1556     if (FTy->getNumParams() != 4 || !FTy->getParamType(1)->isPointerTy())
1557       return false;
1558     // May throw; "pwrite" is a valid pthread cancellation point.
1559     setDoesNotCapture(F, 2);
1560     setOnlyReadsMemory(F, 2);
1561     break;
1562   case LibFunc::putchar:
1563     setDoesNotThrow(F);
1564     break;
1565   case LibFunc::popen:
1566     if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
1567         !FTy->getParamType(0)->isPointerTy() ||
1568         !FTy->getParamType(1)->isPointerTy())
1569       return false;
1570     setDoesNotThrow(F);
1571     setDoesNotAlias(F, 0);
1572     setDoesNotCapture(F, 1);
1573     setDoesNotCapture(F, 2);
1574     setOnlyReadsMemory(F, 1);
1575     setOnlyReadsMemory(F, 2);
1576     break;
1577   case LibFunc::pclose:
1578     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1579       return false;
1580     setDoesNotThrow(F);
1581     setDoesNotCapture(F, 1);
1582     break;
1583   case LibFunc::vscanf:
1584     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1585       return false;
1586     setDoesNotThrow(F);
1587     setDoesNotCapture(F, 1);
1588     setOnlyReadsMemory(F, 1);
1589     break;
1590   case LibFunc::vsscanf:
1591     if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy() ||
1592         !FTy->getParamType(2)->isPointerTy())
1593       return false;
1594     setDoesNotThrow(F);
1595     setDoesNotCapture(F, 1);
1596     setDoesNotCapture(F, 2);
1597     setOnlyReadsMemory(F, 1);
1598     setOnlyReadsMemory(F, 2);
1599     break;
1600   case LibFunc::vfscanf:
1601     if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy() ||
1602         !FTy->getParamType(2)->isPointerTy())
1603       return false;
1604     setDoesNotThrow(F);
1605     setDoesNotCapture(F, 1);
1606     setDoesNotCapture(F, 2);
1607     setOnlyReadsMemory(F, 2);
1608     break;
1609   case LibFunc::valloc:
1610     if (!FTy->getReturnType()->isPointerTy())
1611       return false;
1612     setDoesNotThrow(F);
1613     setDoesNotAlias(F, 0);
1614     break;
1615   case LibFunc::vprintf:
1616     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy())
1617       return false;
1618     setDoesNotThrow(F);
1619     setDoesNotCapture(F, 1);
1620     setOnlyReadsMemory(F, 1);
1621     break;
1622   case LibFunc::vfprintf:
1623   case LibFunc::vsprintf:
1624     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
1625         !FTy->getParamType(1)->isPointerTy())
1626       return false;
1627     setDoesNotThrow(F);
1628     setDoesNotCapture(F, 1);
1629     setDoesNotCapture(F, 2);
1630     setOnlyReadsMemory(F, 2);
1631     break;
1632   case LibFunc::vsnprintf:
1633     if (FTy->getNumParams() != 4 || !FTy->getParamType(0)->isPointerTy() ||
1634         !FTy->getParamType(2)->isPointerTy())
1635       return false;
1636     setDoesNotThrow(F);
1637     setDoesNotCapture(F, 1);
1638     setDoesNotCapture(F, 3);
1639     setOnlyReadsMemory(F, 3);
1640     break;
1641   case LibFunc::open:
1642     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy())
1643       return false;
1644     // May throw; "open" is a valid pthread cancellation point.
1645     setDoesNotCapture(F, 1);
1646     setOnlyReadsMemory(F, 1);
1647     break;
1648   case LibFunc::opendir:
1649     if (FTy->getNumParams() != 1 || !FTy->getReturnType()->isPointerTy() ||
1650         !FTy->getParamType(0)->isPointerTy())
1651       return false;
1652     setDoesNotThrow(F);
1653     setDoesNotAlias(F, 0);
1654     setDoesNotCapture(F, 1);
1655     setOnlyReadsMemory(F, 1);
1656     break;
1657   case LibFunc::tmpfile:
1658     if (!FTy->getReturnType()->isPointerTy())
1659       return false;
1660     setDoesNotThrow(F);
1661     setDoesNotAlias(F, 0);
1662     break;
1663   case LibFunc::times:
1664     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1665       return false;
1666     setDoesNotThrow(F);
1667     setDoesNotCapture(F, 1);
1668     break;
1669   case LibFunc::htonl:
1670   case LibFunc::htons:
1671   case LibFunc::ntohl:
1672   case LibFunc::ntohs:
1673     setDoesNotThrow(F);
1674     setDoesNotAccessMemory(F);
1675     break;
1676   case LibFunc::lstat:
1677     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
1678         !FTy->getParamType(1)->isPointerTy())
1679       return false;
1680     setDoesNotThrow(F);
1681     setDoesNotCapture(F, 1);
1682     setDoesNotCapture(F, 2);
1683     setOnlyReadsMemory(F, 1);
1684     break;
1685   case LibFunc::lchown:
1686     if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy())
1687       return false;
1688     setDoesNotThrow(F);
1689     setDoesNotCapture(F, 1);
1690     setOnlyReadsMemory(F, 1);
1691     break;
1692   case LibFunc::qsort:
1693     if (FTy->getNumParams() != 4 || !FTy->getParamType(3)->isPointerTy())
1694       return false;
1695     // May throw; places call through function pointer.
1696     setDoesNotCapture(F, 4);
1697     break;
1698   case LibFunc::dunder_strdup:
1699   case LibFunc::dunder_strndup:
1700     if (FTy->getNumParams() < 1 || !FTy->getReturnType()->isPointerTy() ||
1701         !FTy->getParamType(0)->isPointerTy())
1702       return false;
1703     setDoesNotThrow(F);
1704     setDoesNotAlias(F, 0);
1705     setDoesNotCapture(F, 1);
1706     setOnlyReadsMemory(F, 1);
1707     break;
1708   case LibFunc::dunder_strtok_r:
1709     if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy())
1710       return false;
1711     setDoesNotThrow(F);
1712     setDoesNotCapture(F, 2);
1713     setOnlyReadsMemory(F, 2);
1714     break;
1715   case LibFunc::under_IO_getc:
1716     if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
1717       return false;
1718     setDoesNotThrow(F);
1719     setDoesNotCapture(F, 1);
1720     break;
1721   case LibFunc::under_IO_putc:
1722     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1723       return false;
1724     setDoesNotThrow(F);
1725     setDoesNotCapture(F, 2);
1726     break;
1727   case LibFunc::dunder_isoc99_scanf:
1728     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
1729       return false;
1730     setDoesNotThrow(F);
1731     setDoesNotCapture(F, 1);
1732     setOnlyReadsMemory(F, 1);
1733     break;
1734   case LibFunc::stat64:
1735   case LibFunc::lstat64:
1736   case LibFunc::statvfs64:
1737     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy() ||
1738         !FTy->getParamType(1)->isPointerTy())
1739       return false;
1740     setDoesNotThrow(F);
1741     setDoesNotCapture(F, 1);
1742     setDoesNotCapture(F, 2);
1743     setOnlyReadsMemory(F, 1);
1744     break;
1745   case LibFunc::dunder_isoc99_sscanf:
1746     if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy() ||
1747         !FTy->getParamType(1)->isPointerTy())
1748       return false;
1749     setDoesNotThrow(F);
1750     setDoesNotCapture(F, 1);
1751     setDoesNotCapture(F, 2);
1752     setOnlyReadsMemory(F, 1);
1753     setOnlyReadsMemory(F, 2);
1754     break;
1755   case LibFunc::fopen64:
1756     if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
1757         !FTy->getParamType(0)->isPointerTy() ||
1758         !FTy->getParamType(1)->isPointerTy())
1759       return false;
1760     setDoesNotThrow(F);
1761     setDoesNotAlias(F, 0);
1762     setDoesNotCapture(F, 1);
1763     setDoesNotCapture(F, 2);
1764     setOnlyReadsMemory(F, 1);
1765     setOnlyReadsMemory(F, 2);
1766     break;
1767   case LibFunc::fseeko64:
1768   case LibFunc::ftello64:
1769     if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
1770       return false;
1771     setDoesNotThrow(F);
1772     setDoesNotCapture(F, 1);
1773     break;
1774   case LibFunc::tmpfile64:
1775     if (!FTy->getReturnType()->isPointerTy())
1776       return false;
1777     setDoesNotThrow(F);
1778     setDoesNotAlias(F, 0);
1779     break;
1780   case LibFunc::fstat64:
1781   case LibFunc::fstatvfs64:
1782     if (FTy->getNumParams() != 2 || !FTy->getParamType(1)->isPointerTy())
1783       return false;
1784     setDoesNotThrow(F);
1785     setDoesNotCapture(F, 2);
1786     break;
1787   case LibFunc::open64:
1788     if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy())
1789       return false;
1790     // May throw; "open" is a valid pthread cancellation point.
1791     setDoesNotCapture(F, 1);
1792     setOnlyReadsMemory(F, 1);
1793     break;
1794   case LibFunc::gettimeofday:
1795     if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
1796         !FTy->getParamType(1)->isPointerTy())
1797       return false;
1798     // Currently some platforms have the restrict keyword on the arguments to
1799     // gettimeofday. To be conservative, do not add noalias to gettimeofday's
1800     // arguments.
1801     setDoesNotThrow(F);
1802     setDoesNotCapture(F, 1);
1803     setDoesNotCapture(F, 2);
1804     break;
1805   default:
1806     // Didn't mark any attributes.
1807     return false;
1808   }
1809
1810   return true;
1811 }
1812
1813 /// Adds attributes to well-known standard library call declarations.
1814 bool FunctionAttrs::annotateLibraryCalls(const CallGraphSCC &SCC) {
1815   bool MadeChange = false;
1816
1817   // Check each function in turn annotating well-known library function
1818   // declarations with attributes.
1819   for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
1820     Function *F = (*I)->getFunction();
1821
1822     if (F && F->isDeclaration())
1823       MadeChange |= inferPrototypeAttributes(*F, *TLI);
1824   }
1825
1826   return MadeChange;
1827 }
1828
1829 bool FunctionAttrs::runOnSCC(CallGraphSCC &SCC) {
1830   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
1831
1832   bool Changed = annotateLibraryCalls(SCC);
1833   Changed |= AddReadAttrs(SCC);
1834   Changed |= AddArgumentAttrs(SCC);
1835   Changed |= AddNoAliasAttrs(SCC);
1836   Changed |= AddNonNullAttrs(SCC);
1837   return Changed;
1838 }