Teach FunctionAttrs about AccessesArgumentsReadonly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118617 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-11-09 19:56:27 +00:00
parent e33daaaaf9
commit 40b6a19daa

View File

@ -152,6 +152,25 @@ bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) {
}
// Only reads and writes local memory.
continue;
case AliasAnalysis::AccessesArgumentsReadonly:
// Check whether all pointer arguments point to local memory, and
// ignore calls that only access local memory.
for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
CI != CE; ++CI) {
Value *Arg = *CI;
if (Arg->getType()->isPointerTy()) {
AliasAnalysis::Location Loc(Arg,
AliasAnalysis::UnknownSize,
I->getMetadata(LLVMContext::MD_tbaa));
if (!AA->pointsToConstantMemory(Loc, /*OrLocal=*/true)) {
// Reads non-local memory.
ReadsMemory = true;
break;
}
}
}
// Only reads memory.
continue;
default:
// Otherwise, be conservative.
break;