aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-01-23 00:45:55 +0000
committerBill Wendling <isanbard@gmail.com>2013-01-23 00:45:55 +0000
commit8246df61f6de716acf1f8c64fac3c19970a2c174 (patch)
treeeea5feb78eb13d53687b1211b304c2388ef2f63c
parent4d79724e130e69e3ce6327680460f399c18cb7eb (diff)
Use the AttributeSet when removing multiple attributes. Use Attribute::AttrKind
when removing one attribute. This further encapsulates the use of the attributes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173214 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/IR/Attributes.h16
-rw-r--r--include/llvm/IR/Function.h2
-rw-r--r--lib/IR/Attributes.cpp10
-rw-r--r--lib/IR/Core.cpp12
-rw-r--r--lib/IR/Function.cpp9
-rw-r--r--lib/IR/Instructions.cpp14
-rw-r--r--lib/Transforms/IPO/FunctionAttrs.cpp5
-rw-r--r--lib/Transforms/IPO/GlobalOpt.cpp3
-rw-r--r--lib/Transforms/Instrumentation/MemorySanitizer.cpp11
9 files changed, 59 insertions, 23 deletions
diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h
index 072b9cf43a..ab98910629 100644
--- a/include/llvm/IR/Attributes.h
+++ b/include/llvm/IR/Attributes.h
@@ -217,6 +217,11 @@ private:
/// list.
AttributeSet addAttr(LLVMContext &C, unsigned Idx, Attribute Attrs) const;
+ /// \brief Remove the specified attribute at the specified index from this
+ /// attribute list. Since attribute lists are immutable, this returns the new
+ /// list.
+ AttributeSet removeAttr(LLVMContext &C, unsigned Idx, Attribute Attrs) const;
+
explicit AttributeSet(AttributeSetImpl *LI) : AttrList(LI) {}
public:
AttributeSet() : AttrList(0) {}
@@ -254,9 +259,16 @@ public:
}
/// \brief Remove the specified attribute at the specified index from this
- /// attribute list. Since attribute lists are immutable, this returns the new
+ /// attribute list. Since attribute lists are immutable, this returns the new
/// list.
- AttributeSet removeAttr(LLVMContext &C, unsigned Idx, Attribute Attrs) const;
+ AttributeSet removeAttribute(LLVMContext &C, unsigned Idx,
+ Attribute::AttrKind Attr) const;
+
+ /// \brief Remove the specified attributes at the specified index from this
+ /// attribute list. Since attribute lists are immutable, this returns the new
+ /// list.
+ AttributeSet removeAttributes(LLVMContext &C, unsigned Idx,
+ AttributeSet Attrs) const;
//===--------------------------------------------------------------------===//
// Attribute List Accessors
diff --git a/include/llvm/IR/Function.h b/include/llvm/IR/Function.h
index 46feb8ba28..fe27d9b75d 100644
--- a/include/llvm/IR/Function.h
+++ b/include/llvm/IR/Function.h
@@ -189,7 +189,7 @@ public:
void addAttributes(unsigned i, AttributeSet attrs);
/// @brief removes the attributes from the list of attributes.
- void removeAttribute(unsigned i, Attribute attr);
+ void removeAttributes(unsigned i, AttributeSet attr);
/// @brief Extract the alignment for a call or parameter (0=unknown).
unsigned getParamAlignment(unsigned i) const {
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp
index c67b1f3eee..a3abd36fc0 100644
--- a/lib/IR/Attributes.cpp
+++ b/lib/IR/Attributes.cpp
@@ -730,6 +730,16 @@ AttributeSet AttributeSet::addAttr(LLVMContext &C, unsigned Idx,
return get(C, NewAttrList);
}
+AttributeSet AttributeSet::removeAttribute(LLVMContext &C, unsigned Idx,
+ Attribute::AttrKind Attr) const {
+ return removeAttr(C, Idx, Attribute::get(C, Attr));
+}
+
+AttributeSet AttributeSet::removeAttributes(LLVMContext &C, unsigned Idx,
+ AttributeSet Attrs) const {
+ return removeAttr(C, Idx, Attrs.getAttributes(Idx));
+}
+
AttributeSet AttributeSet::removeAttr(LLVMContext &C, unsigned Idx,
Attribute Attrs) const {
#ifndef NDEBUG
diff --git a/lib/IR/Core.cpp b/lib/IR/Core.cpp
index e72eb69982..0e42536789 100644
--- a/lib/IR/Core.cpp
+++ b/lib/IR/Core.cpp
@@ -1394,8 +1394,9 @@ void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
const AttributeSet PAL = Func->getAttributes();
AttrBuilder B(PA);
const AttributeSet PALnew =
- PAL.removeAttr(Func->getContext(), AttributeSet::FunctionIndex,
- Attribute::get(Func->getContext(), B));
+ PAL.removeAttributes(Func->getContext(), AttributeSet::FunctionIndex,
+ AttributeSet::get(Func->getContext(),
+ AttributeSet::FunctionIndex, B));
Func->setAttributes(PALnew);
}
@@ -1686,9 +1687,10 @@ void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
LLVMAttribute PA) {
CallSite Call = CallSite(unwrap<Instruction>(Instr));
AttrBuilder B(PA);
- Call.setAttributes(
- Call.getAttributes().removeAttr(Call->getContext(), index,
- Attribute::get(Call->getContext(), B)));
+ Call.setAttributes(Call.getAttributes()
+ .removeAttributes(Call->getContext(), index,
+ AttributeSet::get(Call->getContext(),
+ index, B)));
}
void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
diff --git a/lib/IR/Function.cpp b/lib/IR/Function.cpp
index 4d047f6443..f2f3ec9aab 100644
--- a/lib/IR/Function.cpp
+++ b/lib/IR/Function.cpp
@@ -133,7 +133,10 @@ void Argument::addAttr(Attribute attr) {
/// removeAttr - Remove a Attribute from an argument
void Argument::removeAttr(Attribute attr) {
- getParent()->removeAttribute(getArgNo() + 1, attr);
+ AttrBuilder B(attr);
+ getParent()->removeAttributes(getArgNo() + 1,
+ AttributeSet::get(getParent()->getContext(),
+ getArgNo() + 1, B));
}
@@ -263,9 +266,9 @@ void Function::addAttributes(unsigned i, AttributeSet attrs) {
setAttributes(PAL);
}
-void Function::removeAttribute(unsigned i, Attribute attrs) {
+void Function::removeAttributes(unsigned i, AttributeSet attrs) {
AttributeSet PAL = getAttributes();
- PAL = PAL.removeAttr(getContext(), i, attrs);
+ PAL = PAL.removeAttributes(getContext(), i, attrs);
setAttributes(PAL);
}
diff --git a/lib/IR/Instructions.cpp b/lib/IR/Instructions.cpp
index 8597d5c452..8a0a465a96 100644
--- a/lib/IR/Instructions.cpp
+++ b/lib/IR/Instructions.cpp
@@ -334,14 +334,18 @@ CallInst::CallInst(const CallInst &CI)
void CallInst::addAttribute(unsigned i, Attribute attr) {
AttributeSet PAL = getAttributes();
AttrBuilder B(attr);
- PAL = PAL.addAttributes(getContext(), i,
- AttributeSet::get(getContext(), i, B));
+ LLVMContext &Context = getContext();
+ PAL = PAL.addAttributes(Context, i,
+ AttributeSet::get(Context, i, B));
setAttributes(PAL);
}
void CallInst::removeAttribute(unsigned i, Attribute attr) {
AttributeSet PAL = getAttributes();
- PAL = PAL.removeAttr(getContext(), i, attr);
+ AttrBuilder B(attr);
+ LLVMContext &Context = getContext();
+ PAL = PAL.removeAttributes(Context, i,
+ AttributeSet::get(Context, i, B));
setAttributes(PAL);
}
@@ -599,7 +603,9 @@ void InvokeInst::addAttribute(unsigned i, Attribute attr) {
void InvokeInst::removeAttribute(unsigned i, Attribute attr) {
AttributeSet PAL = getAttributes();
- PAL = PAL.removeAttr(getContext(), i, attr);
+ AttrBuilder B(attr);
+ PAL = PAL.removeAttributes(getContext(), i,
+ AttributeSet::get(getContext(), i, B));
setAttributes(PAL);
}
diff --git a/lib/Transforms/IPO/FunctionAttrs.cpp b/lib/Transforms/IPO/FunctionAttrs.cpp
index c267097c4a..7e46dcb429 100644
--- a/lib/Transforms/IPO/FunctionAttrs.cpp
+++ b/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -215,8 +215,9 @@ bool FunctionAttrs::AddReadAttrs(const CallGraphSCC &SCC) {
AttrBuilder B;
B.addAttribute(Attribute::ReadOnly)
.addAttribute(Attribute::ReadNone);
- F->removeAttribute(AttributeSet::FunctionIndex,
- Attribute::get(F->getContext(), B));
+ F->removeAttributes(AttributeSet::FunctionIndex,
+ AttributeSet::get(F->getContext(),
+ AttributeSet::FunctionIndex, B));
// Add in the new attribute.
F->addAttribute(AttributeSet::FunctionIndex,
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index efec788162..6fe4316d3b 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2072,8 +2072,7 @@ static AttributeSet StripNest(LLVMContext &C, const AttributeSet &Attrs) {
continue;
// There can be only one.
- return Attrs.removeAttr(C, Attrs.getSlot(i).Index,
- Attribute::get(C, Attribute::Nest));
+ return Attrs.removeAttribute(C, Attrs.getSlot(i).Index, Attribute::Nest);
}
return Attrs;
diff --git a/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/lib/Transforms/Instrumentation/MemorySanitizer.cpp
index 20b6de2506..40f0ebb8cf 100644
--- a/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ b/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -1461,8 +1461,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
AttrBuilder B;
B.addAttribute(Attribute::ReadOnly)
.addAttribute(Attribute::ReadNone);
- Func->removeAttribute(AttributeSet::FunctionIndex,
- Attribute::get(Func->getContext(), B));
+ Func->removeAttributes(AttributeSet::FunctionIndex,
+ AttributeSet::get(Func->getContext(),
+ AttributeSet::FunctionIndex,
+ B));
}
}
IRBuilder<> IRB(&I);
@@ -1853,8 +1855,9 @@ bool MemorySanitizer::runOnFunction(Function &F) {
AttrBuilder B;
B.addAttribute(Attribute::ReadOnly)
.addAttribute(Attribute::ReadNone);
- F.removeAttribute(AttributeSet::FunctionIndex,
- Attribute::get(F.getContext(), B));
+ F.removeAttributes(AttributeSet::FunctionIndex,
+ AttributeSet::get(F.getContext(),
+ AttributeSet::FunctionIndex, B));
return Visitor.runOnFunction();
}