mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-19 02:25:01 +00:00
Integrate the readonly/readnone logic more deeply
into alias analysis. This meant updating the API which now has versions of the getModRefBehavior, doesNotAccessMemory and onlyReadsMemory methods which take a callsite parameter. These should be used unless the callsite is not known, since in general they can do a better job than the versions that take a function. Also, users should no longer call the version of getModRefBehavior that takes both a function and a callsite. To reduce the chance of misuse it is now protected. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44487 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -148,7 +148,7 @@ void LoadVN::getCallEqualNumberNodes(CallInst *CI,
|
||||
Function *CF = CI->getCalledFunction();
|
||||
if (CF == 0) return; // Indirect call.
|
||||
AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
|
||||
AliasAnalysis::ModRefBehavior MRB = AA.getModRefBehavior(CF, CI);
|
||||
AliasAnalysis::ModRefBehavior MRB = AA.getModRefBehavior(CI);
|
||||
if (MRB != AliasAnalysis::DoesNotAccessMemory &&
|
||||
MRB != AliasAnalysis::OnlyReadsMemory)
|
||||
return; // Nothing we can do for now.
|
||||
@@ -227,8 +227,7 @@ void LoadVN::getCallEqualNumberNodes(CallInst *CI,
|
||||
CantEqual = true;
|
||||
break;
|
||||
} else if (CallInst *CI = dyn_cast<CallInst>(I)) {
|
||||
if (CI->getCalledFunction() == 0 ||
|
||||
!AA.onlyReadsMemory(CI->getCalledFunction())) {
|
||||
if (!AA.onlyReadsMemory(CI)) {
|
||||
CantEqual = true;
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user