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