diff options
author | Duncan Sands <baldrick@free.fr> | 2007-12-01 07:51:45 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-12-01 07:51:45 +0000 |
commit | 68b6f50938c6b1c2211a4a81ed3a52a4f5b594e5 (patch) | |
tree | 6405192899bb2bb1cf3474b67a87747fa6d91edc /llvm/lib/Analysis/LoadValueNumbering.cpp | |
parent | ae7a834e74e19f34b87c6546f5017ebb719bbad3 (diff) | |
download | bcm5719-llvm-68b6f50938c6b1c2211a4a81ed3a52a4f5b594e5.tar.gz bcm5719-llvm-68b6f50938c6b1c2211a4a81ed3a52a4f5b594e5.zip |
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.
llvm-svn: 44487
Diffstat (limited to 'llvm/lib/Analysis/LoadValueNumbering.cpp')
-rw-r--r-- | llvm/lib/Analysis/LoadValueNumbering.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/LoadValueNumbering.cpp b/llvm/lib/Analysis/LoadValueNumbering.cpp index 3af92bc11cb..67d4dd22bba 100644 --- a/llvm/lib/Analysis/LoadValueNumbering.cpp +++ b/llvm/lib/Analysis/LoadValueNumbering.cpp @@ -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; } |