From 70d2ca0725b05a2d372e4dc3336e8ea350093e98 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Wed, 23 Jan 2013 00:20:53 +0000 Subject: [PATCH] Use the AttributeSet when adding multiple attributes and an Attribute::AttrKind when adding a single attribute to the function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173210 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Function.h | 16 ++++++++++------ lib/IR/Function.cpp | 21 ++++++++++++++------- lib/Transforms/IPO/FunctionAttrs.cpp | 4 +--- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/include/llvm/IR/Function.h b/include/llvm/IR/Function.h index 956d3ed2e29..46feb8ba282 100644 --- a/include/llvm/IR/Function.h +++ b/include/llvm/IR/Function.h @@ -171,7 +171,8 @@ public: /// addFnAttr - Add function attributes to this function. /// void addFnAttr(Attribute::AttrKind N) { - addAttribute(AttributeSet::FunctionIndex, Attribute::get(getContext(), N)); + setAttributes(AttributeList.addAttribute(getContext(), + AttributeSet::FunctionIndex, N)); } /// hasGC/getGC/setGC/clearGC - The name of the garbage collection algorithm @@ -181,10 +182,13 @@ public: void setGC(const char *Str); void clearGC(); - /// addAttribute - adds the attribute to the list of attributes. - void addAttribute(unsigned i, Attribute attr); + /// @brief adds the attribute to the list of attributes. + void addAttribute(unsigned i, Attribute::AttrKind attr); - /// removeAttribute - removes the attribute from the list of attributes. + /// @brief adds the attributes to the list of attributes. + void addAttributes(unsigned i, AttributeSet attrs); + + /// @brief removes the attributes from the list of attributes. void removeAttribute(unsigned i, Attribute attr); /// @brief Extract the alignment for a call or parameter (0=unknown). @@ -265,7 +269,7 @@ public: return AttributeList.hasAttribute(n, Attribute::NoAlias); } void setDoesNotAlias(unsigned n) { - addAttribute(n, Attribute::get(getContext(), Attribute::NoAlias)); + addAttribute(n, Attribute::NoAlias); } /// @brief Determine if the parameter can be captured. @@ -274,7 +278,7 @@ public: return AttributeList.hasAttribute(n, Attribute::NoCapture); } void setDoesNotCapture(unsigned n) { - addAttribute(n, Attribute::get(getContext(), Attribute::NoCapture)); + addAttribute(n, Attribute::NoCapture); } /// copyAttributesFrom - copy all additional attributes (those not needed to diff --git a/lib/IR/Function.cpp b/lib/IR/Function.cpp index 6a5e61611c1..4d047f6443c 100644 --- a/lib/IR/Function.cpp +++ b/lib/IR/Function.cpp @@ -125,7 +125,10 @@ bool Argument::hasStructRetAttr() const { /// addAttr - Add a Attribute to an argument void Argument::addAttr(Attribute attr) { - getParent()->addAttribute(getArgNo() + 1, attr); + AttrBuilder B(attr); + getParent()->addAttributes(getArgNo() + 1, + AttributeSet::get(getParent()->getContext(), + getArgNo() + 1, B)); } /// removeAttr - Remove a Attribute from an argument @@ -248,17 +251,21 @@ void Function::dropAllReferences() { BasicBlocks.begin()->eraseFromParent(); } -void Function::addAttribute(unsigned i, Attribute attr) { +void Function::addAttribute(unsigned i, Attribute::AttrKind attr) { AttributeSet PAL = getAttributes(); - AttrBuilder B(attr); - PAL = PAL.addAttributes(getContext(), i, - AttributeSet::get(getContext(), i, B)); + PAL = PAL.addAttribute(getContext(), i, attr); setAttributes(PAL); } -void Function::removeAttribute(unsigned i, Attribute attr) { +void Function::addAttributes(unsigned i, AttributeSet attrs) { AttributeSet PAL = getAttributes(); - PAL = PAL.removeAttr(getContext(), i, attr); + PAL = PAL.addAttributes(getContext(), i, attrs); + setAttributes(PAL); +} + +void Function::removeAttribute(unsigned i, Attribute attrs) { + AttributeSet PAL = getAttributes(); + PAL = PAL.removeAttr(getContext(), i, attrs); setAttributes(PAL); } diff --git a/lib/Transforms/IPO/FunctionAttrs.cpp b/lib/Transforms/IPO/FunctionAttrs.cpp index e9bc4ad4370..c267097c4a5 100644 --- a/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/lib/Transforms/IPO/FunctionAttrs.cpp @@ -219,10 +219,8 @@ bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) { Attribute::get(F->getContext(), B)); // Add in the new attribute. - B.clear(); - B.addAttribute(ReadsMemory ? Attribute::ReadOnly : Attribute::ReadNone); F->addAttribute(AttributeSet::FunctionIndex, - Attribute::get(F->getContext(), B)); + ReadsMemory ? Attribute::ReadOnly : Attribute::ReadNone); if (ReadsMemory) ++NumReadOnly;