mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Add missing dereferenceable_or_null getters
Summary: Add missing dereferenceable_or_null getters required for http://reviews.llvm.org/D9253 change. Separated from the D9253 review. Patch by Artur Pilipenko! Reviewers: sanjoy Reviewed By: sanjoy Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9499 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236615 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cac51be31f
commit
5a6ea245b0
@ -64,6 +64,11 @@ public:
|
||||
/// containing function, return the number of bytes known to be
|
||||
/// dereferenceable. Otherwise, zero is returned.
|
||||
uint64_t getDereferenceableBytes() const;
|
||||
|
||||
/// \brief If this argument has the dereferenceable_or_null attribute on
|
||||
/// it in its containing function, return the number of bytes known to be
|
||||
/// dereferenceable. Otherwise, zero is returned.
|
||||
uint64_t getDereferenceableOrNullBytes() const;
|
||||
|
||||
/// \brief Return true if this argument has the byval attribute on it in its
|
||||
/// containing function.
|
||||
|
@ -231,7 +231,13 @@ public:
|
||||
uint64_t getDereferenceableBytes(uint16_t i) const {
|
||||
CALLSITE_DELEGATE_GETTER(getDereferenceableBytes(i));
|
||||
}
|
||||
|
||||
|
||||
/// @brief Extract the number of dereferenceable_or_null bytes for a call or
|
||||
/// parameter (0=unknown).
|
||||
uint64_t getDereferenceableOrNullBytes(uint16_t i) const {
|
||||
CALLSITE_DELEGATE_GETTER(getDereferenceableOrNullBytes(i));
|
||||
}
|
||||
|
||||
/// \brief Return true if the call should not be treated as a call to a
|
||||
/// builtin.
|
||||
bool isNoBuiltin() const {
|
||||
|
@ -248,7 +248,13 @@ public:
|
||||
uint64_t getDereferenceableBytes(unsigned i) const {
|
||||
return AttributeSets.getDereferenceableBytes(i);
|
||||
}
|
||||
|
||||
|
||||
/// @brief Extract the number of dereferenceable_or_null bytes for a call or
|
||||
/// parameter (0=unknown).
|
||||
uint64_t getDereferenceableOrNullBytes(unsigned i) const {
|
||||
return AttributeSets.getDereferenceableOrNullBytes(i);
|
||||
}
|
||||
|
||||
/// @brief Determine if the function does not access memory.
|
||||
bool doesNotAccessMemory() const {
|
||||
return AttributeSets.hasAttribute(AttributeSet::FunctionIndex,
|
||||
|
@ -1491,6 +1491,12 @@ public:
|
||||
return AttributeList.getDereferenceableBytes(i);
|
||||
}
|
||||
|
||||
/// \brief Extract the number of dereferenceable_or_null bytes for a call or
|
||||
/// parameter (0=unknown).
|
||||
uint64_t getDereferenceableOrNullBytes(unsigned i) const {
|
||||
return AttributeList.getDereferenceableOrNullBytes(i);
|
||||
}
|
||||
|
||||
/// \brief Return true if the call should not be treated as a call to a
|
||||
/// builtin.
|
||||
bool isNoBuiltin() const {
|
||||
@ -3200,6 +3206,12 @@ public:
|
||||
uint64_t getDereferenceableBytes(unsigned i) const {
|
||||
return AttributeList.getDereferenceableBytes(i);
|
||||
}
|
||||
|
||||
/// \brief Extract the number of dereferenceable_or_null bytes for a call or
|
||||
/// parameter (0=unknown).
|
||||
uint64_t getDereferenceableOrNullBytes(unsigned i) const {
|
||||
return AttributeList.getDereferenceableOrNullBytes(i);
|
||||
}
|
||||
|
||||
/// \brief Return true if the call should not be treated as a call to a
|
||||
/// builtin.
|
||||
|
@ -166,6 +166,7 @@ public:
|
||||
unsigned getAlignment() const;
|
||||
unsigned getStackAlignment() const;
|
||||
uint64_t getDereferenceableBytes() const;
|
||||
uint64_t getDereferenceableOrNullBytes() const;
|
||||
std::string getAsString(bool InAttrGrp) const;
|
||||
|
||||
typedef const Attribute *iterator;
|
||||
|
@ -532,6 +532,13 @@ uint64_t AttributeSetNode::getDereferenceableBytes() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t AttributeSetNode::getDereferenceableOrNullBytes() const {
|
||||
for (iterator I = begin(), E = end(); I != E; ++I)
|
||||
if (I->hasAttribute(Attribute::DereferenceableOrNull))
|
||||
return I->getDereferenceableOrNullBytes();
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string AttributeSetNode::getAsString(bool InAttrGrp) const {
|
||||
std::string Str;
|
||||
for (iterator I = begin(), E = end(); I != E; ++I) {
|
||||
@ -957,6 +964,11 @@ uint64_t AttributeSet::getDereferenceableBytes(unsigned Index) const {
|
||||
return ASN ? ASN->getDereferenceableBytes() : 0;
|
||||
}
|
||||
|
||||
uint64_t AttributeSet::getDereferenceableOrNullBytes(unsigned Index) const {
|
||||
AttributeSetNode *ASN = getAttributes(Index);
|
||||
return ASN ? ASN->getDereferenceableOrNullBytes() : 0;
|
||||
}
|
||||
|
||||
std::string AttributeSet::getAsString(unsigned Index,
|
||||
bool InAttrGrp) const {
|
||||
AttributeSetNode *ASN = getAttributes(Index);
|
||||
|
@ -117,6 +117,12 @@ uint64_t Argument::getDereferenceableBytes() const {
|
||||
return getParent()->getDereferenceableBytes(getArgNo()+1);
|
||||
}
|
||||
|
||||
uint64_t Argument::getDereferenceableOrNullBytes() const {
|
||||
assert(getType()->isPointerTy() &&
|
||||
"Only pointers have dereferenceable bytes");
|
||||
return getParent()->getDereferenceableOrNullBytes(getArgNo()+1);
|
||||
}
|
||||
|
||||
/// hasNestAttr - Return true if this argument has the nest attribute on
|
||||
/// it in its containing function.
|
||||
bool Argument::hasNestAttr() const {
|
||||
|
Loading…
Reference in New Issue
Block a user