summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-01-03 23:51:43 +0000
committerOwen Anderson <resistor@mac.com>2011-01-03 23:51:43 +0000
commitd62d37225ac53245981c23fdbb671aa7cf81270d (patch)
tree00fef4b8337b7fbe5d3ecf57364b594566ade425 /llvm/lib/Analysis
parentf02ca16ba78d3a12529a8e2d2f2ef1ecf0a0f2b9 (diff)
downloadbcm5719-llvm-d62d37225ac53245981c23fdbb671aa7cf81270d.tar.gz
bcm5719-llvm-d62d37225ac53245981c23fdbb671aa7cf81270d.zip
Use the new addEscapingValue callback to update GlobalsModRef when GVN adds PHIs of GEPs. For the moment,
have GlobalsModRef handle this conservatively by simply removing the value from its maps. llvm-svn: 122787
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/IPA/GlobalsModRef.cpp11
-rw-r--r--llvm/lib/Analysis/NoAliasAnalysis.cpp1
2 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/IPA/GlobalsModRef.cpp b/llvm/lib/Analysis/IPA/GlobalsModRef.cpp
index c18dc47406a..116aaf418ea 100644
--- a/llvm/lib/Analysis/IPA/GlobalsModRef.cpp
+++ b/llvm/lib/Analysis/IPA/GlobalsModRef.cpp
@@ -152,6 +152,7 @@ namespace {
virtual void deleteValue(Value *V);
virtual void copyValue(Value *From, Value *To);
+ virtual void addEscapingUse(Use &U);
/// getAdjustedAnalysisPointer - This method is used when a pass implements
/// an analysis interface through multiple inheritance. If needed, it
@@ -596,3 +597,13 @@ void GlobalsModRef::deleteValue(Value *V) {
void GlobalsModRef::copyValue(Value *From, Value *To) {
AliasAnalysis::copyValue(From, To);
}
+
+void GlobalsModRef::addEscapingUse(Use &U) {
+ // For the purposes of this analysis, it is conservatively correct to treat
+ // a newly escaping value equivalently to a deleted one. We could perhaps
+ // be more precise by processing the new use and attempting to update our
+ // saved analysis results to accomodate it.
+ deleteValue(U);
+
+ AliasAnalysis::addEscapingUse(U);
+}
diff --git a/llvm/lib/Analysis/NoAliasAnalysis.cpp b/llvm/lib/Analysis/NoAliasAnalysis.cpp
index ab7a69241e9..101c2d5b028 100644
--- a/llvm/lib/Analysis/NoAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/NoAliasAnalysis.cpp
@@ -65,6 +65,7 @@ namespace {
virtual void deleteValue(Value *V) {}
virtual void copyValue(Value *From, Value *To) {}
+ virtual void addEscapingUse(Use &U) {}
/// getAdjustedAnalysisPointer - This method is used when a pass implements
/// an analysis interface through multiple inheritance. If needed, it
OpenPOWER on IntegriCloud