Mercurial > hg > CbC > CbC_llvm
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 } |