forked from OSchip/llvm-project
Use the AttributeSet when removing multiple attributes. Use Attribute::AttrKind
when removing one attribute. This further encapsulates the use of the attributes. llvm-svn: 173214
This commit is contained in:
parent
f8317679cb
commit
430fa9bfb3
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue