[llvm-commits] [llvm] r119928 - in /llvm/trunk: include/llvm/Analysis/AliasAnalysis.h lib/Analysis/AliasAnalysis.cpp

Chris Lattner sabre at nondot.org
Sat Nov 20 23:51:27 PST 2010


Author: lattner
Date: Sun Nov 21 01:51:27 2010
New Revision: 119928

URL: http://llvm.org/viewvc/llvm-project?rev=119928&view=rev
Log:
add "getLocation" method to AliasAnalysis for getting the source and
destination location of a memcpy/memmove.  I'm not clear about whether
TBAA works on these, so I'm leaving it out for now.  Dan, please revisit
this when convenient.

Modified:
    llvm/trunk/include/llvm/Analysis/AliasAnalysis.h
    llvm/trunk/lib/Analysis/AliasAnalysis.cpp

Modified: llvm/trunk/include/llvm/Analysis/AliasAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AliasAnalysis.h?rev=119928&r1=119927&r2=119928&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/AliasAnalysis.h (original)
+++ llvm/trunk/include/llvm/Analysis/AliasAnalysis.h Sun Nov 21 01:51:27 2010
@@ -48,6 +48,7 @@
 class TargetData;
 class Pass;
 class AnalysisUsage;
+class MemTransferInst;
 
 class AliasAnalysis {
 protected:
@@ -135,6 +136,8 @@
   Location getLocation(const LoadInst *LI);
   Location getLocation(const StoreInst *SI);
   Location getLocation(const VAArgInst *VI);
+  Location getLocationForSource(const MemTransferInst *MTI);
+  Location getLocationForDest(const MemTransferInst *MTI);
 
   /// Alias analysis result - Either we know for sure that it does not alias, we
   /// know for sure it must alias, or we don't know anything: The two pointers

Modified: llvm/trunk/lib/Analysis/AliasAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasAnalysis.cpp?rev=119928&r1=119927&r2=119928&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/AliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/AliasAnalysis.cpp Sun Nov 21 01:51:27 2010
@@ -212,6 +212,29 @@
                   VI->getMetadata(LLVMContext::MD_tbaa));
 }
 
+
+AliasAnalysis::Location 
+AliasAnalysis::getLocationForSource(const MemTransferInst *MTI) {
+  uint64_t Size = UnknownSize;
+  if (ConstantInt *C = dyn_cast<ConstantInt>(MTI->getLength()))
+    Size = C->getValue().getZExtValue();
+
+  // FIXME: Can memcpy/memmove have TBAA tags?
+  return Location(MTI->getRawSource(), Size, 0);
+}
+
+AliasAnalysis::Location 
+AliasAnalysis::getLocationForDest(const MemTransferInst *MTI) {
+  uint64_t Size = UnknownSize;
+  if (ConstantInt *C = dyn_cast<ConstantInt>(MTI->getLength()))
+    Size = C->getValue().getZExtValue();
+  
+  // FIXME: Can memcpy/memmove have TBAA tags?
+  return Location(MTI->getRawDest(), Size, 0);
+}
+
+
+
 AliasAnalysis::ModRefResult
 AliasAnalysis::getModRefInfo(const LoadInst *L, const Location &Loc) {
   // Be conservative in the face of volatile.





More information about the llvm-commits mailing list