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