From 6e95ae803a0274d69d366ce118b58f46ea3cdf50 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Mon, 31 Dec 2012 00:49:59 +0000 Subject: [PATCH] Remove the getAttributesAtIndex and getNumAttrs methods in favor of using the getAttrSomewhere predicate. This prevents the uses of 'Attribute' as a collection of attributes. llvm-svn: 171271 --- llvm/include/llvm/Attributes.h | 3 --- llvm/include/llvm/Instructions.h | 10 ++-------- llvm/lib/Target/XCore/XCoreFrameLowering.cpp | 7 ++----- .../Transforms/InstCombine/InstCombineCalls.cpp | 5 ++--- llvm/lib/VMCore/Attributes.cpp | 16 +++------------- 5 files changed, 9 insertions(+), 32 deletions(-) diff --git a/llvm/include/llvm/Attributes.h b/llvm/include/llvm/Attributes.h index 08063c15ed58..caba9633ebca 100644 --- a/llvm/include/llvm/Attributes.h +++ b/llvm/include/llvm/Attributes.h @@ -358,9 +358,6 @@ public: /// parameter or for the return value. bool hasAttrSomewhere(Attribute::AttrKind Attr) const; - unsigned getNumAttrs() const; - Attribute &getAttributesAtIndex(unsigned i) const; - /// operator==/!= - Provide equality predicates. bool operator==(const AttributeSet &RHS) const { return AttrList == RHS.AttrList; diff --git a/llvm/include/llvm/Instructions.h b/llvm/include/llvm/Instructions.h index e5faf6e209e1..a2f3125f9e01 100644 --- a/llvm/include/llvm/Instructions.h +++ b/llvm/include/llvm/Instructions.h @@ -1352,10 +1352,7 @@ public: /// \brief Determine if any call argument is an aggregate passed by value. bool hasByValArgument() const { - for (unsigned I = 0, E = AttributeList.getNumAttrs(); I != E; ++I) - if (AttributeList.getAttributesAtIndex(I).hasAttribute(Attribute::ByVal)) - return true; - return false; + return AttributeList.hasAttrSomewhere(Attribute::ByVal); } /// getCalledFunction - Return the function called, or null if this is an @@ -3092,10 +3089,7 @@ public: /// \brief Determine if any call argument is an aggregate passed by value. bool hasByValArgument() const { - for (unsigned I = 0, E = AttributeList.getNumAttrs(); I != E; ++I) - if (AttributeList.getAttributesAtIndex(I).hasAttribute(Attribute::ByVal)) - return true; - return false; + return AttributeList.hasAttrSomewhere(Attribute::ByVal); } /// getCalledFunction - Return the function called, or null if this is an diff --git a/llvm/lib/Target/XCore/XCoreFrameLowering.cpp b/llvm/lib/Target/XCore/XCoreFrameLowering.cpp index aa185d673807..ffb0c53b3b24 100644 --- a/llvm/lib/Target/XCore/XCoreFrameLowering.cpp +++ b/llvm/lib/Target/XCore/XCoreFrameLowering.cpp @@ -100,11 +100,8 @@ void XCoreFrameLowering::emitPrologue(MachineFunction &MF) const { bool FP = hasFP(MF); const AttributeSet &PAL = MF.getFunction()->getAttributes(); - for (unsigned I = 0, E = PAL.getNumAttrs(); I != E; ++I) - if (PAL.getAttributesAtIndex(I).hasAttribute(Attribute::Nest)) { - loadFromStack(MBB, MBBI, XCore::R11, 0, dl, TII); - break; - } + if (PAL.hasAttrSomewhere(Attribute::Nest)) + loadFromStack(MBB, MBBI, XCore::R11, 0, dl, TII); // Work out frame sizes. int FrameSize = MFI->getStackSize(); diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index 23306b4079b4..fcd16b82ccd5 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -1248,9 +1248,8 @@ InstCombiner::transformCallThroughTrampoline(CallSite CS, // If the call already has the 'nest' attribute somewhere then give up - // otherwise 'nest' would occur twice after splicing in the chain. - for (unsigned I = 0, E = Attrs.getNumAttrs(); I != E; ++I) - if (Attrs.getAttributesAtIndex(I).hasAttribute(Attribute::Nest)) - return 0; + if (Attrs.hasAttrSomewhere(Attribute::Nest)) + return 0; assert(Tramp && "transformCallThroughTrampoline called with incorrect CallSite."); diff --git a/llvm/lib/VMCore/Attributes.cpp b/llvm/lib/VMCore/Attributes.cpp index de83deb2e9ad..e8c6b2a01c82 100644 --- a/llvm/lib/VMCore/Attributes.cpp +++ b/llvm/lib/VMCore/Attributes.cpp @@ -478,7 +478,7 @@ uint64_t AttributeSet::getBitMask(unsigned Index) const { Attribute AttributeSet::getAttributes(unsigned Idx) const { if (AttrList == 0) return Attribute(); - const SmallVector &Attrs = AttrList->Attrs; + const SmallVectorImpl &Attrs = AttrList->Attrs; for (unsigned i = 0, e = Attrs.size(); i != e && Attrs[i].Index <= Idx; ++i) if (Attrs[i].Index == Idx) return Attrs[i].Attrs; @@ -499,18 +499,8 @@ bool AttributeSet::hasAttrSomewhere(Attribute::AttrKind Attr) const { return false; } -unsigned AttributeSet::getNumAttrs() const { - return AttrList ? AttrList->Attrs.size() : 0; -} - -Attribute &AttributeSet::getAttributesAtIndex(unsigned i) const { - assert(AttrList && "Trying to get an attribute from an empty list!"); - assert(i < AttrList->Attrs.size() && "Index out of range!"); - return AttrList->Attrs[i].Attrs; -} - AttributeSet AttributeSet::addAttr(LLVMContext &C, unsigned Idx, - Attribute Attrs) const { + Attribute Attrs) const { Attribute OldAttrs = getAttributes(Idx); #ifndef NDEBUG // FIXME it is not obvious how this should work for alignment. @@ -555,7 +545,7 @@ AttributeSet AttributeSet::addAttr(LLVMContext &C, unsigned Idx, } AttributeSet AttributeSet::removeAttr(LLVMContext &C, unsigned Idx, - Attribute Attrs) const { + Attribute Attrs) const { #ifndef NDEBUG // FIXME it is not obvious how this should work for alignment. // For now, say we can't pass in alignment, which no current use does.