]> granicus.if.org Git - llvm/commitdiff
[NFC] Assert preconditions and merge all users into one codepath in Loads.cpp
authorPhilip Reames <listmail@philipreames.com>
Tue, 27 Aug 2019 23:36:31 +0000 (23:36 +0000)
committerPhilip Reames <listmail@philipreames.com>
Tue, 27 Aug 2019 23:36:31 +0000 (23:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370128 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/Loads.cpp

index a40f8dd15975f0e2464ad12d1fbb16ccdf93f2ef..e74df9c69d7f2cfb75b2126ddb134efad9335561 100644 (file)
@@ -118,6 +118,12 @@ bool llvm::isDereferenceableAndAlignedPointer(const Value *V, unsigned Align,
                                               const DataLayout &DL,
                                               const Instruction *CtxI,
                                               const DominatorTree *DT) {
+  assert(Align != 0 && "expected explicitly set alignment");
+  // Note: At the moment, Size can be zero.  This ends up being interpreted as
+  // a query of whether [Base, V] is dereferenceable and V is aligned (since
+  // that's what the implementation happened to do).  It's unclear if this is
+  // the desired semantic, but at least SelectionDAG does exercise this case.  
+  
   SmallPtrSet<const Value *, 32> Visited;
   return ::isDereferenceableAndAlignedPointer(V, Align, Size, DL, CtxI, DT,
                                               Visited);
@@ -139,12 +145,11 @@ bool llvm::isDereferenceableAndAlignedPointer(const Value *V, Type *Ty,
 
   if (!Ty->isSized())
     return false;
-
-  SmallPtrSet<const Value *, 32> Visited;
-  return ::isDereferenceableAndAlignedPointer(
-      V, Align,
-      APInt(DL.getIndexTypeSizeInBits(V->getType()), DL.getTypeStoreSize(Ty)),
-      DL, CtxI, DT, Visited);
+  
+  APInt AccessSize(DL.getIndexTypeSizeInBits(V->getType()),
+                   DL.getTypeStoreSize(Ty));
+  return isDereferenceableAndAlignedPointer(V, Align, AccessSize,
+                                            DL, CtxI, DT);
 }
 
 bool llvm::isDereferenceablePointer(const Value *V, Type *Ty,