comparison lib/Analysis/ScalarEvolutionAliasAnalysis.cpp @ 77:54457678186b LLVM3.6

LLVM 3.6
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Mon, 08 Sep 2014 22:06:00 +0900
parents 95c75e76d11b
children afa8332a0e37
comparison
equal deleted inserted replaced
34:e874dbf0ad9d 77:54457678186b
32 public AliasAnalysis { 32 public AliasAnalysis {
33 ScalarEvolution *SE; 33 ScalarEvolution *SE;
34 34
35 public: 35 public:
36 static char ID; // Class identification, replacement for typeinfo 36 static char ID; // Class identification, replacement for typeinfo
37 ScalarEvolutionAliasAnalysis() : FunctionPass(ID), SE(0) { 37 ScalarEvolutionAliasAnalysis() : FunctionPass(ID), SE(nullptr) {
38 initializeScalarEvolutionAliasAnalysisPass( 38 initializeScalarEvolutionAliasAnalysisPass(
39 *PassRegistry::getPassRegistry()); 39 *PassRegistry::getPassRegistry());
40 } 40 }
41 41
42 /// getAdjustedAnalysisPointer - This method is used when a pass implements 42 /// getAdjustedAnalysisPointer - This method is used when a pass implements
43 /// an analysis interface through multiple inheritance. If needed, it 43 /// an analysis interface through multiple inheritance. If needed, it
44 /// should override this to adjust the this pointer as needed for the 44 /// should override this to adjust the this pointer as needed for the
45 /// specified pass info. 45 /// specified pass info.
46 virtual void *getAdjustedAnalysisPointer(AnalysisID PI) { 46 void *getAdjustedAnalysisPointer(AnalysisID PI) override {
47 if (PI == &AliasAnalysis::ID) 47 if (PI == &AliasAnalysis::ID)
48 return (AliasAnalysis*)this; 48 return (AliasAnalysis*)this;
49 return this; 49 return this;
50 } 50 }
51 51
52 private: 52 private:
53 virtual void getAnalysisUsage(AnalysisUsage &AU) const; 53 void getAnalysisUsage(AnalysisUsage &AU) const override;
54 virtual bool runOnFunction(Function &F); 54 bool runOnFunction(Function &F) override;
55 virtual AliasResult alias(const Location &LocA, const Location &LocB); 55 AliasResult alias(const Location &LocA, const Location &LocB) override;
56 56
57 Value *GetBaseValue(const SCEV *S); 57 Value *GetBaseValue(const SCEV *S);
58 }; 58 };
59 } // End of anonymous namespace 59 } // End of anonymous namespace
60 60
100 } else if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(S)) { 100 } else if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(S)) {
101 // This is a leaf node. 101 // This is a leaf node.
102 return U->getValue(); 102 return U->getValue();
103 } 103 }
104 // No Identified object found. 104 // No Identified object found.
105 return 0; 105 return nullptr;
106 } 106 }
107 107
108 AliasAnalysis::AliasResult 108 AliasAnalysis::AliasResult
109 ScalarEvolutionAliasAnalysis::alias(const Location &LocA, 109 ScalarEvolutionAliasAnalysis::alias(const Location &LocA,
110 const Location &LocB) { 110 const Location &LocB) {
160 Value *AO = GetBaseValue(AS); 160 Value *AO = GetBaseValue(AS);
161 Value *BO = GetBaseValue(BS); 161 Value *BO = GetBaseValue(BS);
162 if ((AO && AO != LocA.Ptr) || (BO && BO != LocB.Ptr)) 162 if ((AO && AO != LocA.Ptr) || (BO && BO != LocB.Ptr))
163 if (alias(Location(AO ? AO : LocA.Ptr, 163 if (alias(Location(AO ? AO : LocA.Ptr,
164 AO ? +UnknownSize : LocA.Size, 164 AO ? +UnknownSize : LocA.Size,
165 AO ? 0 : LocA.TBAATag), 165 AO ? AAMDNodes() : LocA.AATags),
166 Location(BO ? BO : LocB.Ptr, 166 Location(BO ? BO : LocB.Ptr,
167 BO ? +UnknownSize : LocB.Size, 167 BO ? +UnknownSize : LocB.Size,
168 BO ? 0 : LocB.TBAATag)) == NoAlias) 168 BO ? AAMDNodes() : LocB.AATags)) == NoAlias)
169 return NoAlias; 169 return NoAlias;
170 170
171 // Forward the query to the next analysis. 171 // Forward the query to the next analysis.
172 return AliasAnalysis::alias(LocA, LocB); 172 return AliasAnalysis::alias(LocA, LocB);
173 } 173 }