mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
Make ModRefBehavior a lattice. Use this to clean up AliasAnalysis
chaining and simplify FunctionAttrs' GetModRefBehavior logic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118660 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -120,28 +120,33 @@ namespace {
|
||||
/// called from the specified call site. The call site may be null in which
|
||||
/// case the most generic behavior of this function should be returned.
|
||||
ModRefBehavior getModRefBehavior(const Function *F) {
|
||||
ModRefBehavior Min = UnknownModRefBehavior;
|
||||
|
||||
if (FunctionRecord *FR = getFunctionInfo(F)) {
|
||||
if (FR->FunctionEffect == 0)
|
||||
return DoesNotAccessMemory;
|
||||
Min = DoesNotAccessMemory;
|
||||
else if ((FR->FunctionEffect & Mod) == 0)
|
||||
return OnlyReadsMemory;
|
||||
Min = OnlyReadsMemory;
|
||||
}
|
||||
return AliasAnalysis::getModRefBehavior(F);
|
||||
|
||||
return ModRefBehavior(AliasAnalysis::getModRefBehavior(F) & Min);
|
||||
}
|
||||
|
||||
/// getModRefBehavior - Return the behavior of the specified function if
|
||||
/// called from the specified call site. The call site may be null in which
|
||||
/// case the most generic behavior of this function should be returned.
|
||||
ModRefBehavior getModRefBehavior(ImmutableCallSite CS) {
|
||||
const Function* F = CS.getCalledFunction();
|
||||
if (!F) return AliasAnalysis::getModRefBehavior(CS);
|
||||
if (FunctionRecord *FR = getFunctionInfo(F)) {
|
||||
if (FR->FunctionEffect == 0)
|
||||
return DoesNotAccessMemory;
|
||||
else if ((FR->FunctionEffect & Mod) == 0)
|
||||
return OnlyReadsMemory;
|
||||
}
|
||||
return AliasAnalysis::getModRefBehavior(CS);
|
||||
ModRefBehavior Min = UnknownModRefBehavior;
|
||||
|
||||
if (const Function* F = CS.getCalledFunction())
|
||||
if (FunctionRecord *FR = getFunctionInfo(F)) {
|
||||
if (FR->FunctionEffect == 0)
|
||||
Min = DoesNotAccessMemory;
|
||||
else if ((FR->FunctionEffect & Mod) == 0)
|
||||
Min = OnlyReadsMemory;
|
||||
}
|
||||
|
||||
return ModRefBehavior(AliasAnalysis::getModRefBehavior(CS) & Min);
|
||||
}
|
||||
|
||||
virtual void deleteValue(Value *V);
|
||||
|
Reference in New Issue
Block a user