Mercurial > hg > CbC > CbC_llvm
comparison lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 54457678186b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:95c75e76d11b |
---|---|
1 //===- ObjCARCAliasAnalysis.h - ObjC ARC Optimization -*- C++ -*-----------===// | |
2 // | |
3 // The LLVM Compiler Infrastructure | |
4 // | |
5 // This file is distributed under the University of Illinois Open Source | |
6 // License. See LICENSE.TXT for details. | |
7 // | |
8 //===----------------------------------------------------------------------===// | |
9 /// \file | |
10 /// This file declares a simple ARC-aware AliasAnalysis using special knowledge | |
11 /// of Objective C to enhance other optimization passes which rely on the Alias | |
12 /// Analysis infrastructure. | |
13 /// | |
14 /// WARNING: This file knows about certain library functions. It recognizes them | |
15 /// by name, and hardwires knowledge of their semantics. | |
16 /// | |
17 /// WARNING: This file knows about how certain Objective-C library functions are | |
18 /// used. Naive LLVM IR transformations which would otherwise be | |
19 /// behavior-preserving may break these assumptions. | |
20 /// | |
21 //===----------------------------------------------------------------------===// | |
22 | |
23 #ifndef LLVM_TRANSFORMS_OBJCARC_OBJCARCALIASANALYSIS_H | |
24 #define LLVM_TRANSFORMS_OBJCARC_OBJCARCALIASANALYSIS_H | |
25 | |
26 #include "llvm/Analysis/AliasAnalysis.h" | |
27 #include "llvm/Pass.h" | |
28 | |
29 namespace llvm { | |
30 namespace objcarc { | |
31 | |
32 /// \brief This is a simple alias analysis implementation that uses knowledge | |
33 /// of ARC constructs to answer queries. | |
34 /// | |
35 /// TODO: This class could be generalized to know about other ObjC-specific | |
36 /// tricks. Such as knowing that ivars in the non-fragile ABI are non-aliasing | |
37 /// even though their offsets are dynamic. | |
38 class ObjCARCAliasAnalysis : public ImmutablePass, | |
39 public AliasAnalysis { | |
40 public: | |
41 static char ID; // Class identification, replacement for typeinfo | |
42 ObjCARCAliasAnalysis() : ImmutablePass(ID) { | |
43 initializeObjCARCAliasAnalysisPass(*PassRegistry::getPassRegistry()); | |
44 } | |
45 | |
46 private: | |
47 virtual void initializePass() { | |
48 InitializeAliasAnalysis(this); | |
49 } | |
50 | |
51 /// This method is used when a pass implements an analysis interface through | |
52 /// multiple inheritance. If needed, it should override this to adjust the | |
53 /// this pointer as needed for the specified pass info. | |
54 virtual void *getAdjustedAnalysisPointer(const void *PI) { | |
55 if (PI == &AliasAnalysis::ID) | |
56 return static_cast<AliasAnalysis *>(this); | |
57 return this; | |
58 } | |
59 | |
60 virtual void getAnalysisUsage(AnalysisUsage &AU) const; | |
61 virtual AliasResult alias(const Location &LocA, const Location &LocB); | |
62 virtual bool pointsToConstantMemory(const Location &Loc, bool OrLocal); | |
63 virtual ModRefBehavior getModRefBehavior(ImmutableCallSite CS); | |
64 virtual ModRefBehavior getModRefBehavior(const Function *F); | |
65 virtual ModRefResult getModRefInfo(ImmutableCallSite CS, | |
66 const Location &Loc); | |
67 virtual ModRefResult getModRefInfo(ImmutableCallSite CS1, | |
68 ImmutableCallSite CS2); | |
69 }; | |
70 | |
71 } // namespace objcarc | |
72 } // namespace llvm | |
73 | |
74 #endif // LLVM_TRANSFORMS_OBJCARC_OBJCARCALIASANALYSIS_H |