ObjCARCAliasAnalysis.h [plain text]
#ifndef LLVM_ANALYSIS_OBJCARCALIASANALYSIS_H
#define LLVM_ANALYSIS_OBJCARCALIASANALYSIS_H
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Pass.h"
namespace llvm {
namespace objcarc {
class ObjCARCAAResult : public AAResultBase<ObjCARCAAResult> {
friend AAResultBase<ObjCARCAAResult>;
const DataLayout &DL;
public:
explicit ObjCARCAAResult(const DataLayout &DL, const TargetLibraryInfo &TLI)
: AAResultBase(TLI), DL(DL) {}
ObjCARCAAResult(ObjCARCAAResult &&Arg)
: AAResultBase(std::move(Arg)), DL(Arg.DL) {}
bool invalidate(Function &, const PreservedAnalyses &) { return false; }
AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
bool pointsToConstantMemory(const MemoryLocation &Loc, bool OrLocal);
using AAResultBase::getModRefBehavior;
FunctionModRefBehavior getModRefBehavior(const Function *F);
using AAResultBase::getModRefInfo;
ModRefInfo getModRefInfo(ImmutableCallSite CS, const MemoryLocation &Loc);
};
class ObjCARCAA {
public:
typedef ObjCARCAAResult Result;
static void *ID() { return (void *)&PassID; }
ObjCARCAAResult run(Function &F, AnalysisManager<Function> *AM);
static StringRef name() { return "ObjCARCAA"; }
private:
static char PassID;
};
class ObjCARCAAWrapperPass : public ImmutablePass {
std::unique_ptr<ObjCARCAAResult> Result;
public:
static char ID;
ObjCARCAAWrapperPass();
ObjCARCAAResult &getResult() { return *Result; }
const ObjCARCAAResult &getResult() const { return *Result; }
bool doInitialization(Module &M) override;
bool doFinalization(Module &M) override;
void getAnalysisUsage(AnalysisUsage &AU) const override;
};
} }
#endif