mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 00:39:36 +00:00
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:
parent
e33daaaaf9
commit
40b6a19daa
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user