forked from OSchip/llvm-project
Revert "Properly handle multi-element and dynamically sized allocas in getPointerDereferenceableBytes()"
This reverts commit 217067d5179882de9deb60d2e866befea4c126e7. Fails on llvm-clang-x86_64-expensive-checks-win llvm-svn: 320945
This commit is contained in:
parent
e880f262e5
commit
6f7bbf349f
|
@ -570,7 +570,7 @@ public:
|
|||
///
|
||||
/// If CanBeNull is set by this function the pointer can either be null or be
|
||||
/// dereferenceable up to the returned number of bytes.
|
||||
uint64_t getPointerDereferenceableBytes(const DataLayout &DL,
|
||||
unsigned getPointerDereferenceableBytes(const DataLayout &DL,
|
||||
bool &CanBeNull) const;
|
||||
|
||||
/// \brief Returns an alignment of the pointer value.
|
||||
|
|
|
@ -619,11 +619,11 @@ const Value *Value::stripInBoundsOffsets() const {
|
|||
return stripPointerCastsAndOffsets<PSK_InBounds>(this);
|
||||
}
|
||||
|
||||
uint64_t Value::getPointerDereferenceableBytes(const DataLayout &DL,
|
||||
unsigned Value::getPointerDereferenceableBytes(const DataLayout &DL,
|
||||
bool &CanBeNull) const {
|
||||
assert(getType()->isPointerTy() && "must be pointer");
|
||||
|
||||
uint64_t DerefBytes = 0;
|
||||
unsigned DerefBytes = 0;
|
||||
CanBeNull = false;
|
||||
if (const Argument *A = dyn_cast<Argument>(this)) {
|
||||
DerefBytes = A->getDereferenceableBytes();
|
||||
|
@ -655,10 +655,8 @@ uint64_t Value::getPointerDereferenceableBytes(const DataLayout &DL,
|
|||
CanBeNull = true;
|
||||
}
|
||||
} else if (auto *AI = dyn_cast<AllocaInst>(this)) {
|
||||
const ConstantInt *ArraySize = dyn_cast<ConstantInt>(AI->getArraySize());
|
||||
if (ArraySize && AI->getAllocatedType()->isSized()) {
|
||||
DerefBytes = DL.getTypeStoreSize(AI->getAllocatedType()) *
|
||||
ArraySize->getZExtValue();
|
||||
if (AI->getAllocatedType()->isSized()) {
|
||||
DerefBytes = DL.getTypeStoreSize(AI->getAllocatedType());
|
||||
CanBeNull = false;
|
||||
}
|
||||
} else if (auto *GV = dyn_cast<GlobalVariable>(this)) {
|
||||
|
|
|
@ -36,23 +36,6 @@ entry:
|
|||
%alloca = alloca i1
|
||||
%load2 = load i1, i1* %alloca
|
||||
|
||||
; Load from empty array alloca
|
||||
; CHECK-NOT: %empty_alloca
|
||||
%empty_alloca = alloca i8, i64 0
|
||||
%empty_load = load i8, i8* %empty_alloca
|
||||
|
||||
; Load from too small array alloca
|
||||
; CHECK-NOT: %small_array_alloca
|
||||
%small_array_alloca = alloca i8, i64 2
|
||||
%saa_cast = bitcast i8* %small_array_alloca to i32*
|
||||
%saa_load = load i32, i32* %saa_cast
|
||||
|
||||
; Load from array alloca
|
||||
; CHECK: %big_array_alloca{{.*}}(unaligned)
|
||||
%big_array_alloca = alloca i8, i64 4
|
||||
%baa_cast = bitcast i8* %big_array_alloca to i32*
|
||||
%baa_load = load i32, i32* %baa_cast
|
||||
|
||||
; CHECK: %dparam{{.*}}(aligned)
|
||||
%load3 = load i32, i32 addrspace(1)* %dparam
|
||||
|
||||
|
|
Loading…
Reference in New Issue