[llvm-commits] [llvm] r52029 - in /llvm/trunk: include/llvm/Analysis/LibCallAliasAnalysis.h lib/Analysis/LibCallAliasAnalysis.cpp
Chris Lattner
sabre at nondot.org
Thu Jun 5 16:45:18 PDT 2008
Author: lattner
Date: Thu Jun 5 18:45:18 2008
New Revision: 52029
URL: http://llvm.org/viewvc/llvm-project?rev=52029&view=rev
Log:
Expose a public interface to this pass.
Added:
llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h
Modified:
llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp
Added: llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h?rev=52029&view=auto
==============================================================================
--- llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h (added)
+++ llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h Thu Jun 5 18:45:18 2008
@@ -0,0 +1,61 @@
+//===- LibCallAliasAnalysis.h - Implement AliasAnalysis for libcalls ------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the LibCallAliasAnalysis class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_LIBCALL_AA_H
+#define LLVM_ANALYSIS_LIBCALL_AA_H
+
+#include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/Pass.h"
+
+namespace llvm {
+ class LibCallInfo;
+ class LibCallFunctionInfo;
+
+ /// LibCallAliasAnalysis - Alias analysis driven from LibCallInfo.
+ struct LibCallAliasAnalysis : public FunctionPass, AliasAnalysis {
+ static char ID; // Class identification
+
+ LibCallInfo *LCI;
+
+ explicit LibCallAliasAnalysis(LibCallInfo *LC = 0)
+ : FunctionPass(&ID), LCI(LC) {
+ }
+ explicit LibCallAliasAnalysis(const void *ID, LibCallInfo *LC)
+ : FunctionPass(ID), LCI(LC) {
+ }
+ ~LibCallAliasAnalysis();
+
+ 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;
+
+ 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);
+ };
+} // End of llvm namespace
+
+#endif
Modified: llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp?rev=52029&r1=52028&r2=52029&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp Thu Jun 5 18:45:18 2008
@@ -11,52 +11,13 @@
//
//===----------------------------------------------------------------------===//
+#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 {
- /// LibCallAliasAnalysis - Alias analysis driven from LibCallInfo.
- struct LibCallAliasAnalysis : public FunctionPass, AliasAnalysis {
- static char ID; // Class identification
-
- LibCallInfo *LCI;
-
- explicit 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<TargetData>();
- 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);
- };
-} // End of anonymous namespace
// Register this pass...
char LibCallAliasAnalysis::ID = 0;
@@ -70,6 +31,17 @@
return new LibCallAliasAnalysis(LCI);
}
+LibCallAliasAnalysis::~LibCallAliasAnalysis() {
+ delete LCI;
+}
+
+void LibCallAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
+ AliasAnalysis::getAnalysisUsage(AU);
+ AU.addRequired<TargetData>();
+ 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
More information about the llvm-commits
mailing list