Do some spring cleaning on FunctionAttrs.cpp with clang-format prior to

other refactorings and cleanups here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247519 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth 2015-09-13 06:47:20 +00:00
parent 92148557f7
commit 10b4880de3

View File

@ -68,8 +68,7 @@ namespace {
bool AddArgumentAttrs(const CallGraphSCC &SCC);
// IsFunctionMallocLike - Does this function allocate new memory?
bool IsFunctionMallocLike(Function *F,
SmallPtrSet<Function*, 8> &) const;
bool IsFunctionMallocLike(Function *F, SmallPtrSet<Function *, 8> &) const;
// AddNoAliasAttrs - Deduce noalias attributes for the SCC.
bool AddNoAliasAttrs(const CallGraphSCC &SCC);
@ -158,7 +157,6 @@ INITIALIZE_PASS_END(FunctionAttrs, "functionattrs",
Pass *llvm::createFunctionAttrsPass() { return new FunctionAttrs(); }
/// AddReadAttrs - Deduce readonly/readnone attributes for the SCC.
bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) {
SmallPtrSet<Function *, 8> SCCNodes;
@ -299,11 +297,10 @@ bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) {
// Clear out any existing attributes.
AttrBuilder B;
B.addAttribute(Attribute::ReadOnly)
.addAttribute(Attribute::ReadNone);
F->removeAttributes(AttributeSet::FunctionIndex,
AttributeSet::get(F->getContext(),
AttributeSet::FunctionIndex, B));
B.addAttribute(Attribute::ReadOnly).addAttribute(Attribute::ReadNone);
F->removeAttributes(
AttributeSet::FunctionIndex,
AttributeSet::get(F->getContext(), AttributeSet::FunctionIndex, B));
// Add in the new attribute.
F->addAttribute(AttributeSet::FunctionIndex,
@ -370,10 +367,16 @@ namespace {
bool captured(const Use *U) override {
CallSite CS(U->getUser());
if (!CS.getInstruction()) { Captured = true; return true; }
if (!CS.getInstruction()) {
Captured = true;
return true;
}
Function *F = CS.getCalledFunction();
if (!F || !SCCNodes.count(F)) { Captured = true; return true; }
if (!F || !SCCNodes.count(F)) {
Captured = true;
return true;
}
bool Found = false;
Function::arg_iterator AI = F->arg_begin(), AE = F->arg_end();
@ -415,17 +418,15 @@ namespace llvm {
return N->Uses.end();
}
};
template<> struct GraphTraits<ArgumentGraph*>
: public GraphTraits<ArgumentGraphNode*> {
template <>
struct GraphTraits<ArgumentGraph *> : public GraphTraits<ArgumentGraphNode *> {
static NodeType *getEntryNode(ArgumentGraph *AG) {
return AG->getEntryNode();
}
static ChildIteratorType nodes_begin(ArgumentGraph *AG) {
return AG->begin();
}
static ChildIteratorType nodes_end(ArgumentGraph *AG) {
return AG->end();
}
static ChildIteratorType nodes_end(ArgumentGraph *AG) { return AG->end(); }
};
}
@ -573,8 +574,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
// a value can't capture arguments. Don't analyze them.
if (F->onlyReadsMemory() && F->doesNotThrow() &&
F->getReturnType()->isVoidTy()) {
for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end();
A != E; ++A) {
for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end(); A != E;
++A) {
if (A->getType()->isPointerTy() && !A->hasNoCaptureAttr()) {
A->addAttr(AttributeSet::get(F->getContext(), A->getArgNo() + 1, B));
++NumNoCapture;
@ -584,9 +585,10 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
continue;
}
for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end();
A != E; ++A) {
if (!A->getType()->isPointerTy()) continue;
for (Function::arg_iterator A = F->arg_begin(), E = F->arg_end(); A != E;
++A) {
if (!A->getType()->isPointerTy())
continue;
bool HasNonLocalUses = false;
if (!A->hasNoCaptureAttr()) {
ArgumentUsesTracker Tracker(SCCNodes);
@ -594,7 +596,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
if (!Tracker.Captured) {
if (Tracker.Uses.empty()) {
// If it's trivially not captured, mark it nocapture now.
A->addAttr(AttributeSet::get(F->getContext(), A->getArgNo()+1, B));
A->addAttr(
AttributeSet::get(F->getContext(), A->getArgNo() + 1, B));
++NumNoCapture;
Changed = true;
} else {
@ -602,8 +605,10 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
// then it must be calling into another function in our SCC. Save
// its particulars for Argument-SCC analysis later.
ArgumentGraphNode *Node = AG[A];
for (SmallVectorImpl<Argument*>::iterator UI = Tracker.Uses.begin(),
UE = Tracker.Uses.end(); UI != UE; ++UI) {
for (SmallVectorImpl<Argument *>::iterator
UI = Tracker.Uses.begin(),
UE = Tracker.Uses.end();
UI != UE; ++UI) {
Node->Uses.push_back(AG[*UI]);
if (*UI != A)
HasNonLocalUses = true;
@ -641,7 +646,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
for (scc_iterator<ArgumentGraph *> I = scc_begin(&AG); !I.isAtEnd(); ++I) {
const std::vector<ArgumentGraphNode *> &ArgumentSCC = *I;
if (ArgumentSCC.size() == 1) {
if (!ArgumentSCC[0]->Definition) continue; // synthetic root node
if (!ArgumentSCC[0]->Definition)
continue; // synthetic root node
// eg. "void f(int* x) { if (...) f(x); }"
if (ArgumentSCC[0]->Uses.size() == 1 &&
@ -663,7 +669,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
SCCCaptured = true;
}
}
if (SCCCaptured) continue;
if (SCCCaptured)
continue;
SmallPtrSet<Argument *, 8> ArgumentSCCNodes;
// Fill ArgumentSCCNodes with the elements of the ArgumentSCC. Used for
@ -676,7 +683,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
I != E && !SCCCaptured; ++I) {
ArgumentGraphNode *N = *I;
for (SmallVectorImpl<ArgumentGraphNode *>::iterator UI = N->Uses.begin(),
UE = N->Uses.end(); UI != UE; ++UI) {
UE = N->Uses.end();
UI != UE; ++UI) {
Argument *A = (*UI)->Definition;
if (A->hasNoCaptureAttr() || ArgumentSCCNodes.count(A))
continue;
@ -684,7 +692,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
break;
}
}
if (SCCCaptured) continue;
if (SCCCaptured)
continue;
for (unsigned i = 0, e = ArgumentSCC.size(); i != e; ++i) {
Argument *A = ArgumentSCC[i]->Definition;
@ -721,8 +730,7 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
if (ReadAttr != Attribute::None) {
AttrBuilder B, R;
B.addAttribute(ReadAttr);
R.addAttribute(Attribute::ReadOnly)
.addAttribute(Attribute::ReadNone);
R.addAttribute(Attribute::ReadOnly).addAttribute(Attribute::ReadNone);
for (unsigned i = 0, e = ArgumentSCC.size(); i != e; ++i) {
Argument *A = ArgumentSCC[i]->Definition;
// Clear out existing readonly/readnone attributes
@ -739,8 +747,8 @@ bool FunctionAttrs::AddArgumentAttrs(const CallGraphSCC &SCC) {
/// IsFunctionMallocLike - A function is malloc-like if it returns either null
/// or a pointer that doesn't alias any other pointer visible to the caller.
bool FunctionAttrs::IsFunctionMallocLike(Function *F,
SmallPtrSet<Function*, 8> &SCCNodes) const {
bool FunctionAttrs::IsFunctionMallocLike(
Function *F, SmallPtrSet<Function *, 8> &SCCNodes) const {
SmallSetVector<Value *, 8> FlowsToReturn;
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I)
if (ReturnInst *Ret = dyn_cast<ReturnInst>(I->getTerminator()))
@ -788,8 +796,7 @@ bool FunctionAttrs::IsFunctionMallocLike(Function *F,
CallSite CS(RVI);
if (CS.paramHasAttr(0, Attribute::NoAlias))
break;
if (CS.getCalledFunction() &&
SCCNodes.count(CS.getCalledFunction()))
if (CS.getCalledFunction() && SCCNodes.count(CS.getCalledFunction()))
break;
} // fall-through
default:
@ -1012,8 +1019,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
break;
case LibFunc::strchr:
case LibFunc::strrchr:
if (FTy->getNumParams() != 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isIntegerTy())
return false;
setOnlyReadsMemory(F);
@ -1026,8 +1032,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::strtoll:
case LibFunc::strtold:
case LibFunc::strtoull:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(1)->isPointerTy())
if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 2);
@ -1039,16 +1044,14 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::strncat:
case LibFunc::strncpy:
case LibFunc::stpncpy:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(1)->isPointerTy())
if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 2);
setOnlyReadsMemory(F, 2);
break;
case LibFunc::strxfrm:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1063,8 +1066,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::strcoll: // 0,1
case LibFunc::strcasecmp: // 0,1
case LibFunc::strncasecmp: //
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setOnlyReadsMemory(F);
@ -1114,8 +1116,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
break;
case LibFunc::stat:
case LibFunc::statvfs:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1124,8 +1125,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::sscanf:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1135,8 +1135,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::sprintf:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1145,8 +1144,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::snprintf:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(2)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1155,8 +1153,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 3);
break;
case LibFunc::setitimer:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(1)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy() ||
!FTy->getParamType(2)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1165,23 +1162,20 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::system:
if (FTy->getNumParams() != 1 ||
!FTy->getParamType(0)->isPointerTy())
if (FTy->getNumParams() != 1 || !FTy->getParamType(0)->isPointerTy())
return false;
// May throw; "system" is a valid pthread cancellation point.
setDoesNotCapture(F, 1);
setOnlyReadsMemory(F, 1);
break;
case LibFunc::malloc:
if (FTy->getNumParams() != 1 ||
!FTy->getReturnType()->isPointerTy())
if (FTy->getNumParams() != 1 || !FTy->getReturnType()->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotAlias(F, 0);
break;
case LibFunc::memcmp:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setOnlyReadsMemory(F);
@ -1199,8 +1193,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::modf:
case LibFunc::modff:
case LibFunc::modfl:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(1)->isPointerTy())
if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 2);
@ -1208,8 +1201,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::memcpy:
case LibFunc::memccpy:
case LibFunc::memmove:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(1)->isPointerTy())
if (FTy->getNumParams() < 2 || !FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 2);
@ -1221,23 +1213,20 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotAlias(F, 0);
break;
case LibFunc::mkdir:
if (FTy->getNumParams() == 0 ||
!FTy->getParamType(0)->isPointerTy())
if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 1);
setOnlyReadsMemory(F, 1);
break;
case LibFunc::mktime:
if (FTy->getNumParams() == 0 ||
!FTy->getParamType(0)->isPointerTy())
if (FTy->getNumParams() == 0 || !FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 1);
break;
case LibFunc::realloc:
if (FTy->getNumParams() != 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getReturnType()->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1245,15 +1234,13 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotCapture(F, 1);
break;
case LibFunc::read:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(1)->isPointerTy())
if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy())
return false;
// May throw; "read" is a valid pthread cancellation point.
setDoesNotCapture(F, 2);
break;
case LibFunc::rewind:
if (FTy->getNumParams() < 1 ||
!FTy->getParamType(0)->isPointerTy())
if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 1);
@ -1261,16 +1248,14 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::rmdir:
case LibFunc::remove:
case LibFunc::realpath:
if (FTy->getNumParams() < 1 ||
!FTy->getParamType(0)->isPointerTy())
if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 1);
setOnlyReadsMemory(F, 1);
break;
case LibFunc::rename:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1280,8 +1265,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::readlink:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1297,8 +1281,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::bcopy:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1307,8 +1290,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::bcmp:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1323,8 +1305,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotCapture(F, 1);
break;
case LibFunc::calloc:
if (FTy->getNumParams() != 2 ||
!FTy->getReturnType()->isPointerTy())
if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotAlias(F, 0);
@ -1363,8 +1344,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::fopen:
if (FTy->getNumParams() != 2 ||
!FTy->getReturnType()->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
!FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
@ -1376,8 +1356,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::fdopen:
if (FTy->getNumParams() != 2 ||
!FTy->getReturnType()->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1423,16 +1402,14 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotCapture(F, 2);
break;
case LibFunc::fgets:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(2)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 3);
break;
case LibFunc::fread:
if (FTy->getNumParams() != 4 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 4 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(3)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1440,8 +1417,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotCapture(F, 4);
break;
case LibFunc::fwrite:
if (FTy->getNumParams() != 4 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 4 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(3)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1449,8 +1425,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotCapture(F, 4);
break;
case LibFunc::fputs:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1460,8 +1435,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
break;
case LibFunc::fscanf:
case LibFunc::fprintf:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1470,8 +1444,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::fgetpos:
if (FTy->getNumParams() < 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1538,8 +1511,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
break;
case LibFunc::utime:
case LibFunc::utimes:
if (FTy->getNumParams() != 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1580,8 +1552,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotThrow(F);
break;
case LibFunc::popen:
if (FTy->getNumParams() != 2 ||
!FTy->getReturnType()->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
!FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
@ -1606,8 +1577,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::vsscanf:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(1)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy() ||
!FTy->getParamType(2)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1617,8 +1587,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::vfscanf:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(1)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy() ||
!FTy->getParamType(2)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1641,8 +1610,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
break;
case LibFunc::vfprintf:
case LibFunc::vsprintf:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 3 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1651,8 +1619,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::vsnprintf:
if (FTy->getNumParams() != 4 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 4 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(2)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1668,8 +1635,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::opendir:
if (FTy->getNumParams() != 1 ||
!FTy->getReturnType()->isPointerTy() ||
if (FTy->getNumParams() != 1 || !FTy->getReturnType()->isPointerTy() ||
!FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1697,8 +1663,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotAccessMemory(F);
break;
case LibFunc::lstat:
if (FTy->getNumParams() != 2 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1721,8 +1686,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
break;
case LibFunc::dunder_strdup:
case LibFunc::dunder_strndup:
if (FTy->getNumParams() < 1 ||
!FTy->getReturnType()->isPointerTy() ||
if (FTy->getNumParams() < 1 || !FTy->getReturnType()->isPointerTy() ||
!FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1731,8 +1695,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::dunder_strtok_r:
if (FTy->getNumParams() != 3 ||
!FTy->getParamType(1)->isPointerTy())
if (FTy->getNumParams() != 3 || !FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 2);
@ -1751,8 +1714,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setDoesNotCapture(F, 2);
break;
case LibFunc::dunder_isoc99_scanf:
if (FTy->getNumParams() < 1 ||
!FTy->getParamType(0)->isPointerTy())
if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy())
return false;
setDoesNotThrow(F);
setDoesNotCapture(F, 1);
@ -1761,8 +1723,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
case LibFunc::stat64:
case LibFunc::lstat64:
case LibFunc::statvfs64:
if (FTy->getNumParams() < 1 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1771,8 +1732,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 1);
break;
case LibFunc::dunder_isoc99_sscanf:
if (FTy->getNumParams() < 1 ||
!FTy->getParamType(0)->isPointerTy() ||
if (FTy->getNumParams() < 1 || !FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;
setDoesNotThrow(F);
@ -1782,8 +1742,7 @@ bool FunctionAttrs::inferPrototypeAttributes(Function &F) {
setOnlyReadsMemory(F, 2);
break;
case LibFunc::fopen64:
if (FTy->getNumParams() != 2 ||
!FTy->getReturnType()->isPointerTy() ||
if (FTy->getNumParams() != 2 || !FTy->getReturnType()->isPointerTy() ||
!FTy->getParamType(0)->isPointerTy() ||
!FTy->getParamType(1)->isPointerTy())
return false;