forked from OSchip/llvm-project
Remove the bitwise NOT operator from the Attributes class. Replace it with the equivalent from the builder class.
llvm-svn: 165892
This commit is contained in:
parent
1fcc82225a
commit
85a64c217f
|
@ -131,7 +131,7 @@ public:
|
|||
/// a power of 2) into the form used internally in Attributes.
|
||||
Builder &addStackAlignmentAttr(unsigned Align);
|
||||
|
||||
void removeAttributes(const Attributes &A);
|
||||
Builder &removeAttributes(const Attributes &A);
|
||||
|
||||
/// @brief Remove attributes that are used on functions only.
|
||||
void removeFunctionOnlyAttrs() {
|
||||
|
@ -154,6 +154,13 @@ public:
|
|||
.removeAttribute(Attributes::ReturnsTwice)
|
||||
.removeAttribute(Attributes::AddressSafety);
|
||||
}
|
||||
|
||||
bool operator==(const Builder &B) {
|
||||
return Bits == B.Bits;
|
||||
}
|
||||
bool operator!=(const Builder &B) {
|
||||
return Bits != B.Bits;
|
||||
}
|
||||
};
|
||||
|
||||
/// get - Return a uniquified Attributes object. This takes the uniquified
|
||||
|
@ -232,7 +239,6 @@ public:
|
|||
Attributes operator ^ (const Attributes &A) const;
|
||||
Attributes &operator |= (const Attributes &A);
|
||||
Attributes &operator &= (const Attributes &A);
|
||||
Attributes operator ~ () const;
|
||||
|
||||
uint64_t Raw() const;
|
||||
|
||||
|
@ -351,7 +357,7 @@ public:
|
|||
/// removeAttr - Remove the specified attribute at the specified index from
|
||||
/// this attribute list. Since attribute lists are immutable, this
|
||||
/// returns the new list.
|
||||
AttrListPtr removeAttr(unsigned Idx, Attributes Attrs) const;
|
||||
AttrListPtr removeAttr(LLVMContext &C, unsigned Idx, Attributes Attrs) const;
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Attribute List Accessors
|
||||
|
|
|
@ -762,7 +762,9 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
|
|||
// here. Currently, this should not be possible, but special handling might be
|
||||
// required when new return value attributes are added.
|
||||
if (NRetTy->isVoidTy())
|
||||
RAttrs &= ~Attributes::typeIncompatible(NRetTy);
|
||||
RAttrs =
|
||||
Attributes::get(Attributes::Builder(RAttrs).
|
||||
removeAttributes(Attributes::typeIncompatible(NRetTy)));
|
||||
else
|
||||
assert((RAttrs & Attributes::typeIncompatible(NRetTy)) == 0
|
||||
&& "Return attributes no longer compatible?");
|
||||
|
@ -831,7 +833,9 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
|
|||
Attributes RAttrs = CallPAL.getRetAttributes();
|
||||
Attributes FnAttrs = CallPAL.getFnAttributes();
|
||||
// Adjust in case the function was changed to return void.
|
||||
RAttrs &= ~Attributes::typeIncompatible(NF->getReturnType());
|
||||
RAttrs =
|
||||
Attributes::get(Attributes::Builder(RAttrs).
|
||||
removeAttributes(Attributes::typeIncompatible(NF->getReturnType())));
|
||||
if (RAttrs)
|
||||
AttributesVec.push_back(AttributeWithIndex::get(0, RAttrs));
|
||||
|
||||
|
|
|
@ -2061,7 +2061,7 @@ static void ChangeCalleesToFastCall(Function *F) {
|
|||
}
|
||||
}
|
||||
|
||||
static AttrListPtr StripNest(const AttrListPtr &Attrs) {
|
||||
static AttrListPtr StripNest(LLVMContext &C, const AttrListPtr &Attrs) {
|
||||
Attributes::Builder B;
|
||||
B.addAttribute(Attributes::Nest);
|
||||
|
||||
|
@ -2070,19 +2070,19 @@ static AttrListPtr StripNest(const AttrListPtr &Attrs) {
|
|||
continue;
|
||||
|
||||
// There can be only one.
|
||||
return Attrs.removeAttr(Attrs.getSlot(i).Index, Attributes::get(B));
|
||||
return Attrs.removeAttr(C, Attrs.getSlot(i).Index, Attributes::get(B));
|
||||
}
|
||||
|
||||
return Attrs;
|
||||
}
|
||||
|
||||
static void RemoveNestAttribute(Function *F) {
|
||||
F->setAttributes(StripNest(F->getAttributes()));
|
||||
F->setAttributes(StripNest(F->getContext(), F->getAttributes()));
|
||||
for (Value::use_iterator UI = F->use_begin(), E = F->use_end(); UI != E;++UI){
|
||||
if (isa<BlockAddress>(*UI))
|
||||
continue;
|
||||
CallSite User(cast<Instruction>(*UI));
|
||||
User.setAttributes(StripNest(User.getAttributes()));
|
||||
User.setAttributes(StripNest(F->getContext(), User.getAttributes()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -110,9 +110,6 @@ Attributes &Attributes::operator &= (const Attributes &A) {
|
|||
Attrs.Bits &= A.Raw();
|
||||
return *this;
|
||||
}
|
||||
Attributes Attributes::operator ~ () const {
|
||||
return Attributes(~Raw());
|
||||
}
|
||||
|
||||
uint64_t Attributes::Raw() const {
|
||||
return Attrs.Bits;
|
||||
|
@ -242,8 +239,10 @@ removeAttribute(Attributes::AttrVal Val) {
|
|||
return *this;
|
||||
}
|
||||
|
||||
void Attributes::Builder::removeAttributes(const Attributes &A) {
|
||||
Attributes::Builder &Attributes::Builder::
|
||||
removeAttributes(const Attributes &A) {
|
||||
Bits &= ~A.Raw();
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool Attributes::Builder::hasAttribute(Attributes::AttrVal A) const {
|
||||
|
@ -548,7 +547,8 @@ AttrListPtr AttrListPtr::addAttr(unsigned Idx, Attributes Attrs) const {
|
|||
return get(NewAttrList);
|
||||
}
|
||||
|
||||
AttrListPtr AttrListPtr::removeAttr(unsigned Idx, Attributes Attrs) const {
|
||||
AttrListPtr AttrListPtr::removeAttr(LLVMContext &C, unsigned Idx,
|
||||
Attributes 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.
|
||||
|
@ -558,8 +558,9 @@ AttrListPtr AttrListPtr::removeAttr(unsigned Idx, Attributes Attrs) const {
|
|||
if (AttrList == 0) return AttrListPtr();
|
||||
|
||||
Attributes OldAttrs = getAttributes(Idx);
|
||||
Attributes NewAttrs = OldAttrs & ~Attrs;
|
||||
if (NewAttrs == OldAttrs)
|
||||
Attributes::Builder NewAttrs =
|
||||
Attributes::Builder(OldAttrs).removeAttributes(Attrs);
|
||||
if (NewAttrs == Attributes::Builder(OldAttrs))
|
||||
return *this;
|
||||
|
||||
SmallVector<AttributeWithIndex, 8> NewAttrList;
|
||||
|
@ -572,7 +573,8 @@ AttrListPtr AttrListPtr::removeAttr(unsigned Idx, Attributes Attrs) const {
|
|||
|
||||
// If there are attributes already at this index, merge them in.
|
||||
assert(OldAttrList[i].Index == Idx && "Attribute isn't set?");
|
||||
Attrs = OldAttrList[i].Attrs & ~Attrs;
|
||||
Attrs = Attributes::get(C, Attributes::Builder(OldAttrList[i].Attrs).
|
||||
removeAttributes(Attrs));
|
||||
++i;
|
||||
if (Attrs) // If any attributes left for this parameter, add them.
|
||||
NewAttrList.push_back(AttributeWithIndex::get(Idx, Attrs));
|
||||
|
|
|
@ -1388,7 +1388,8 @@ void LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
|
|||
void LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
|
||||
Function *Func = unwrap<Function>(Fn);
|
||||
const AttrListPtr PAL = Func->getAttributes();
|
||||
const AttrListPtr PALnew = PAL.removeAttr(~0U, Attributes(PA));
|
||||
const AttrListPtr PALnew = PAL.removeAttr(Func->getContext(), ~0U,
|
||||
Attributes(PA));
|
||||
Func->setAttributes(PALnew);
|
||||
}
|
||||
|
||||
|
@ -1673,7 +1674,7 @@ void LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
|
|||
LLVMAttribute PA) {
|
||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
Call.setAttributes(
|
||||
Call.getAttributes().removeAttr(index, Attributes(PA)));
|
||||
Call.getAttributes().removeAttr(Call->getContext(), index, Attributes(PA)));
|
||||
}
|
||||
|
||||
void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
|
||||
|
|
|
@ -255,7 +255,7 @@ void Function::addAttribute(unsigned i, Attributes attr) {
|
|||
|
||||
void Function::removeAttribute(unsigned i, Attributes attr) {
|
||||
AttrListPtr PAL = getAttributes();
|
||||
PAL = PAL.removeAttr(i, attr);
|
||||
PAL = PAL.removeAttr(getContext(), i, attr);
|
||||
setAttributes(PAL);
|
||||
}
|
||||
|
||||
|
|
|
@ -338,7 +338,7 @@ void CallInst::addAttribute(unsigned i, Attributes attr) {
|
|||
|
||||
void CallInst::removeAttribute(unsigned i, Attributes attr) {
|
||||
AttrListPtr PAL = getAttributes();
|
||||
PAL = PAL.removeAttr(i, attr);
|
||||
PAL = PAL.removeAttr(getContext(), i, attr);
|
||||
setAttributes(PAL);
|
||||
}
|
||||
|
||||
|
@ -594,7 +594,7 @@ void InvokeInst::addAttribute(unsigned i, Attributes attr) {
|
|||
|
||||
void InvokeInst::removeAttribute(unsigned i, Attributes attr) {
|
||||
AttrListPtr PAL = getAttributes();
|
||||
PAL = PAL.removeAttr(i, attr);
|
||||
PAL = PAL.removeAttr(getContext(), i, attr);
|
||||
setAttributes(PAL);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue