X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FLibCallAliasAnalysis.cpp;h=971e6e7accb427ac86bbef4ea3c075b75f07fef8;hb=b169426272b85ce28a9a56d13154e61b158fc47a;hp=6492ac69b51807f18d4057e2eb2444c328954b40;hpb=029840c93521f5c54380e037a66216c8227ad1e1;p=oota-llvm.git diff --git a/lib/Analysis/LibCallAliasAnalysis.cpp b/lib/Analysis/LibCallAliasAnalysis.cpp index 6492ac69b51..971e6e7accb 100644 --- a/lib/Analysis/LibCallAliasAnalysis.cpp +++ b/lib/Analysis/LibCallAliasAnalysis.cpp @@ -11,65 +11,37 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Analysis/LibCallAliasAnalysis.h" #include "llvm/Analysis/Passes.h" #include "llvm/Analysis/LibCallSemantics.h" #include "llvm/Function.h" #include "llvm/Pass.h" #include "llvm/Target/TargetData.h" using namespace llvm; - -namespace llvm { - /// LibCallAliasAnalysis - Alias analysis driven from LibCallInfo. - struct LibCallAliasAnalysis : public FunctionPass, AliasAnalysis { - static char ID; // Class identification - - LibCallInfo *LCI; - - LibCallAliasAnalysis(LibCallInfo *LC = 0) - : FunctionPass((intptr_t)&ID), LCI(LC) { - } - ~LibCallAliasAnalysis() { - delete LCI; - } - - ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size); - ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) { - // TODO: Could compare two direct calls against each other if we cared to. - return AliasAnalysis::getModRefInfo(CS1,CS2); - } - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AliasAnalysis::getAnalysisUsage(AU); - AU.addRequired(); - AU.setPreservesAll(); // Does not transform code - } - - virtual bool runOnFunction(Function &F) { - InitializeAliasAnalysis(this); // set up super class - return false; - } - - /// hasNoModRefInfoForCalls - We can provide mod/ref information against - /// non-escaping allocations. - virtual bool hasNoModRefInfoForCalls() const { return false; } - private: - ModRefResult AnalyzeLibCallDetails(const LibCallFunctionInfo *FI, - CallSite CS, Value *P, unsigned Size); - }; - // Register this pass... - char LibCallAliasAnalysis::ID = 0; - RegisterPass - X("libcall-aa", "LibCall Alias Analysis", false, true); +// Register this pass... +char LibCallAliasAnalysis::ID = 0; +static RegisterPass +X("libcall-aa", "LibCall Alias Analysis", false, true); - // Declare that we implement the AliasAnalysis interface - RegisterAnalysisGroup Y(X); -} // End of llvm namespace +// Declare that we implement the AliasAnalysis interface +static RegisterAnalysisGroup Y(X); FunctionPass *llvm::createLibCallAliasAnalysisPass(LibCallInfo *LCI) { return new LibCallAliasAnalysis(LCI); } +LibCallAliasAnalysis::~LibCallAliasAnalysis() { + delete LCI; +} + +void LibCallAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { + AliasAnalysis::getAnalysisUsage(AU); + AU.addRequired(); + AU.setPreservesAll(); // Does not transform code +} + + /// AnalyzeLibCallDetails - Given a call to a function with the specified /// LibCallFunctionInfo, see if we can improve the mod/ref footprint of the call @@ -155,8 +127,8 @@ LibCallAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { // If this is a direct call to a function that LCI knows about, get the // information about the runtime function. - if (Function *F = CS.getCalledFunction()) { - if (LCI && F->isDeclaration()) { + if (LCI) { + if (Function *F = CS.getCalledFunction()) { if (const LibCallFunctionInfo *FI = LCI->getFunctionInfo(F)) { MRInfo = ModRefResult(MRInfo & AnalyzeLibCallDetails(FI, CS, P, Size)); if (MRInfo == NoModRef) return NoModRef;