Inline isDereferenceableFromAttribute; NFC

Now that `Value::getPointerDereferenceableBytes` looks beyond just
attributes, the name `isDereferenceableFromAttribute` is misleading.
Just inline the function, since it is small and only used once.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271456 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sanjoy Das 2016-06-02 00:52:53 +00:00
parent ca4fdcc423
commit cfd3677995

View File

@ -25,23 +25,6 @@
using namespace llvm;
static bool isDereferenceableFromAttribute(const Value *BV, APInt Size,
const DataLayout &DL,
const Instruction *CtxI,
const DominatorTree *DT,
const TargetLibraryInfo *TLI) {
bool CheckForNonNull = false;
APInt DerefBytes(Size.getBitWidth(),
BV->getPointerDereferenceableBytes(DL, CheckForNonNull));
if (DerefBytes.getBoolValue())
if (DerefBytes.uge(Size))
if (!CheckForNonNull || isKnownNonNullAt(BV, CtxI, DT, TLI))
return true;
return false;
}
static bool isAligned(const Value *Base, APInt Offset, unsigned Align,
const DataLayout &DL) {
APInt BaseAlign(Offset.getBitWidth(), Base->getPointerAlignment(DL));
@ -80,8 +63,14 @@ static bool isDereferenceableAndAlignedPointer(
return isDereferenceableAndAlignedPointer(BC->getOperand(0), Align, Size,
DL, CtxI, DT, TLI, Visited);
if (isDereferenceableFromAttribute(V, Size, DL, CtxI, DT, TLI))
return isAligned(V, Align, DL);
bool CheckForNonNull = false;
APInt KnownDerefBytes(Size.getBitWidth(),
V->getPointerDereferenceableBytes(DL, CheckForNonNull));
if (KnownDerefBytes.getBoolValue()) {
if (KnownDerefBytes.uge(Size))
if (!CheckForNonNull || isKnownNonNullAt(V, CtxI, DT, TLI))
return isAligned(V, Align, DL);
}
// For GEPs, determine if the indexing lands within the allocated object.
if (const GEPOperator *GEP = dyn_cast<GEPOperator>(V)) {