mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-30 15:10:33 +00:00
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:
parent
ca4fdcc423
commit
cfd3677995
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user