From 0b8ca1301824d580662131bddfd80fd94f17896d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 14 Jul 2021 21:09:06 +0200 Subject: [PATCH] [Attributes] Use single method to fetch type from AttributeSet (NFC) While it is nice to have separate methods in the public AttributeSet API, we can fetch the type from the internal AttributeSetNode using a generic API for all type attribute kinds. --- lib/IR/AttributeImpl.h | 6 +----- lib/IR/Attributes.cpp | 38 +++++++------------------------------- 2 files changed, 8 insertions(+), 36 deletions(-) diff --git a/lib/IR/AttributeImpl.h b/lib/IR/AttributeImpl.h index 6669238602b..c5bbe657109 100644 --- a/lib/IR/AttributeImpl.h +++ b/lib/IR/AttributeImpl.h @@ -255,11 +255,7 @@ public: std::pair> getAllocSizeArgs() const; std::pair getVScaleRangeArgs() const; std::string getAsString(bool InAttrGrp) const; - Type *getByValType() const; - Type *getStructRetType() const; - Type *getByRefType() const; - Type *getPreallocatedType() const; - Type *getInAllocaType() const; + Type *getAttributeType(Attribute::AttrKind Kind) const; using iterator = const Attribute *; diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index 31cef097fb4..368fc87dc80 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -689,23 +689,23 @@ uint64_t AttributeSet::getDereferenceableOrNullBytes() const { } Type *AttributeSet::getByRefType() const { - return SetNode ? SetNode->getByRefType() : nullptr; + return SetNode ? SetNode->getAttributeType(Attribute::ByRef) : nullptr; } Type *AttributeSet::getByValType() const { - return SetNode ? SetNode->getByValType() : nullptr; + return SetNode ? SetNode->getAttributeType(Attribute::ByVal) : nullptr; } Type *AttributeSet::getStructRetType() const { - return SetNode ? SetNode->getStructRetType() : nullptr; + return SetNode ? SetNode->getAttributeType(Attribute::StructRet) : nullptr; } Type *AttributeSet::getPreallocatedType() const { - return SetNode ? SetNode->getPreallocatedType() : nullptr; + return SetNode ? SetNode->getAttributeType(Attribute::Preallocated) : nullptr; } Type *AttributeSet::getInAllocaType() const { - return SetNode ? SetNode->getInAllocaType() : nullptr; + return SetNode ? SetNode->getAttributeType(Attribute::InAlloca) : nullptr; } std::pair> AttributeSet::getAllocSizeArgs() const { @@ -897,32 +897,8 @@ MaybeAlign AttributeSetNode::getStackAlignment() const { return None; } -Type *AttributeSetNode::getByValType() const { - if (auto A = findEnumAttribute(Attribute::ByVal)) - return A->getValueAsType(); - return nullptr; -} - -Type *AttributeSetNode::getStructRetType() const { - if (auto A = findEnumAttribute(Attribute::StructRet)) - return A->getValueAsType(); - return nullptr; -} - -Type *AttributeSetNode::getByRefType() const { - if (auto A = findEnumAttribute(Attribute::ByRef)) - return A->getValueAsType(); - return nullptr; -} - -Type *AttributeSetNode::getPreallocatedType() const { - if (auto A = findEnumAttribute(Attribute::Preallocated)) - return A->getValueAsType(); - return nullptr; -} - -Type *AttributeSetNode::getInAllocaType() const { - if (auto A = findEnumAttribute(Attribute::InAlloca)) +Type *AttributeSetNode::getAttributeType(Attribute::AttrKind Kind) const { + if (auto A = findEnumAttribute(Kind)) return A->getValueAsType(); return nullptr; }