From bc1daaa8bb13f2cce6801f49928697fcde095a2e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 30 Jan 2004 22:17:24 +0000 Subject: [PATCH] Implement the pointsToConstantMemory() method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11022 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/BasicAliasAnalysis.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index ce8379ddc7d..dd66eb59b03 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -23,7 +23,7 @@ #include "llvm/Argument.h" #include "llvm/iOther.h" #include "llvm/Constants.h" -#include "llvm/GlobalValue.h" +#include "llvm/GlobalVariable.h" #include "llvm/DerivedTypes.h" #include "llvm/Target/TargetData.h" #include "llvm/Support/GetElementPtrTypeIterator.h" @@ -41,10 +41,13 @@ namespace { virtual void initializePass(); - // alias - This is the only method here that does anything interesting... - // AliasResult alias(const Value *V1, unsigned V1Size, const Value *V2, unsigned V2Size); + + /// pointsToConstantMemory - Chase pointers until we find a (constant + /// global) or not. + bool pointsToConstantMemory(const Value *P); + private: // CheckGEPInstructions - Check two GEP instructions with known // must-aliasing base pointers. This checks to see if the index expressions @@ -124,6 +127,14 @@ static const Value *GetGEPOperands(const Value *V, std::vector &GEPOps){ return V; } +/// pointsToConstantMemory - Chase pointers until we find a (constant +/// global) or not. +bool BasicAliasAnalysis::pointsToConstantMemory(const Value *P) { + const Value *V = getUnderlyingObject(P); + if (const GlobalVariable *GV = dyn_cast(V)) + return GV->isConstant(); + return false; +} // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such // as array references. Note that this function is heavily tail recursive.