1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 12:43:36 +01:00

Use the attribute enums to query if a function has an attribute.

llvm-svn: 165551
This commit is contained in:
Bill Wendling 2012-10-09 21:49:51 +00:00
parent 04e6cf2045
commit 12999bb1df
4 changed files with 22 additions and 141 deletions

View File

@ -1268,13 +1268,7 @@ public:
void removeAttribute(unsigned i, Attributes attr);
/// @brief Determine whether this call has the given attribute.
bool fnHasNoAliasAttr() const;
bool fnHasNoInlineAttr() const;
bool fnHasNoReturnAttr() const;
bool fnHasNoUnwindAttr() const;
bool fnHasReadNoneAttr() const;
bool fnHasReadOnlyAttr() const;
bool fnHasReturnsTwiceAttr() const;
bool hasFnAttr(Attributes::AttrVal A) const;
/// @brief Determine whether the call or the callee has the given attributes.
bool paramHasAttr(unsigned i, Attributes::AttrVal A) const;
@ -1285,7 +1279,7 @@ public:
}
/// @brief Return true if the call should not be inlined.
bool isNoInline() const { return fnHasNoInlineAttr(); }
bool isNoInline() const { return hasFnAttr(Attributes::NoInline); }
void setIsNoInline(bool Value = true) {
if (Value) addAttribute(~0, Attribute::NoInline);
else removeAttribute(~0, Attribute::NoInline);
@ -1293,7 +1287,7 @@ public:
/// @brief Return true if the call can return twice
bool canReturnTwice() const {
return fnHasReturnsTwiceAttr();
return hasFnAttr(Attributes::ReturnsTwice);
}
void setCanReturnTwice(bool Value = true) {
if (Value) addAttribute(~0, Attribute::ReturnsTwice);
@ -1302,7 +1296,7 @@ public:
/// @brief Determine if the call does not access memory.
bool doesNotAccessMemory() const {
return fnHasReadNoneAttr();
return hasFnAttr(Attributes::ReadNone);
}
void setDoesNotAccessMemory(bool NotAccessMemory = true) {
if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone);
@ -1311,7 +1305,7 @@ public:
/// @brief Determine if the call does not access or only reads memory.
bool onlyReadsMemory() const {
return doesNotAccessMemory() || fnHasReadOnlyAttr();
return doesNotAccessMemory() || hasFnAttr(Attributes::ReadOnly);
}
void setOnlyReadsMemory(bool OnlyReadsMemory = true) {
if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly);
@ -1319,14 +1313,14 @@ public:
}
/// @brief Determine if the call cannot return.
bool doesNotReturn() const { return fnHasNoReturnAttr(); }
bool doesNotReturn() const { return hasFnAttr(Attributes::NoReturn); }
void setDoesNotReturn(bool DoesNotReturn = true) {
if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn);
else removeAttribute(~0, Attribute::NoReturn);
}
/// @brief Determine if the call cannot unwind.
bool doesNotThrow() const { return fnHasNoUnwindAttr(); }
bool doesNotThrow() const { return hasFnAttr(Attributes::NoUnwind); }
void setDoesNotThrow(bool DoesNotThrow = true) {
if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind);
else removeAttribute(~0, Attribute::NoUnwind);
@ -3037,13 +3031,7 @@ public:
void removeAttribute(unsigned i, Attributes attr);
/// @brief Determine whether this call has the NoAlias attribute.
bool fnHasNoAliasAttr() const;
bool fnHasNoInlineAttr() const;
bool fnHasNoReturnAttr() const;
bool fnHasNoUnwindAttr() const;
bool fnHasReadNoneAttr() const;
bool fnHasReadOnlyAttr() const;
bool fnHasReturnsTwiceAttr() const;
bool hasFnAttr(Attributes::AttrVal A) const;
/// @brief Determine whether the call or the callee has the given attributes.
bool paramHasAttr(unsigned i, Attributes::AttrVal A) const;
@ -3054,7 +3042,7 @@ public:
}
/// @brief Return true if the call should not be inlined.
bool isNoInline() const { return fnHasNoInlineAttr(); }
bool isNoInline() const { return hasFnAttr(Attributes::NoInline); }
void setIsNoInline(bool Value = true) {
if (Value) addAttribute(~0, Attribute::NoInline);
else removeAttribute(~0, Attribute::NoInline);
@ -3062,7 +3050,7 @@ public:
/// @brief Determine if the call does not access memory.
bool doesNotAccessMemory() const {
return fnHasReadNoneAttr();
return hasFnAttr(Attributes::ReadNone);
}
void setDoesNotAccessMemory(bool NotAccessMemory = true) {
if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone);
@ -3071,7 +3059,7 @@ public:
/// @brief Determine if the call does not access or only reads memory.
bool onlyReadsMemory() const {
return doesNotAccessMemory() || fnHasReadOnlyAttr();
return doesNotAccessMemory() || hasFnAttr(Attributes::ReadOnly);
}
void setOnlyReadsMemory(bool OnlyReadsMemory = true) {
if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly);
@ -3079,14 +3067,14 @@ public:
}
/// @brief Determine if the call cannot return.
bool doesNotReturn() const { return fnHasNoReturnAttr(); }
bool doesNotReturn() const { return hasFnAttr(Attributes::NoReturn); }
void setDoesNotReturn(bool DoesNotReturn = true) {
if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn);
else removeAttribute(~0, Attribute::NoReturn);
}
/// @brief Determine if the call cannot unwind.
bool doesNotThrow() const { return fnHasNoUnwindAttr(); }
bool doesNotThrow() const { return hasFnAttr(Attributes::NoUnwind); }
void setDoesNotThrow(bool DoesNotThrow = true) {
if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind);
else removeAttribute(~0, Attribute::NoUnwind);

View File

@ -185,29 +185,8 @@ public:
}
/// \brief Return true if this function has the given attribute.
bool fnHasNoAliasAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasNoAliasAttr());
}
bool fnHasNoInlineAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasNoInlineAttr());
}
bool fnHasNoReturnAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasNoReturnAttr());
}
bool fnHasNoUnwindAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasNoUnwindAttr());
}
bool fnHasReadNoneAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasReadNoneAttr());
}
bool fnHasReadOnlyAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasReadOnlyAttr());
}
bool fnHasReturnsTwiceAttr() const {
CALLSITE_DELEGATE_GETTER(fnHasReturnsTwiceAttr());
}
bool hasFnAttr(Attributes N) const {
CALLSITE_DELEGATE_GETTER(hasFnAttr(N));
bool hasFnAttr(Attributes::AttrVal A) const {
CALLSITE_DELEGATE_GETTER(hasFnAttr(A));
}
/// \brief Return true if the call or the callee has the given attribute.

View File

@ -132,7 +132,7 @@ static const AllocFnsTy *getAllocationData(const Value *V, AllocType AllocTy,
static bool hasNoAliasAttr(const Value *V, bool LookThroughBitCast) {
ImmutableCallSite CS(LookThroughBitCast ? V->stripPointerCasts() : V);
return CS && CS.fnHasNoAliasAttr();
return CS && CS.hasFnAttr(Attributes::NoAlias);
}

View File

@ -342,54 +342,11 @@ void CallInst::removeAttribute(unsigned i, Attributes attr) {
setAttributes(PAL);
}
bool CallInst::fnHasNoAliasAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoAlias))
bool CallInst::hasFnAttr(Attributes::AttrVal A) const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(A))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoAlias);
return false;
}
bool CallInst::fnHasNoInlineAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoInline))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoInline);
return false;
}
bool CallInst::fnHasNoReturnAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoReturn))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoReturn);
return false;
}
bool CallInst::fnHasNoUnwindAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind);
return false;
}
bool CallInst::fnHasReadNoneAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadNone))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadNone);
return false;
}
bool CallInst::fnHasReadOnlyAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly);
return false;
}
bool CallInst::fnHasReturnsTwiceAttr() const {
if (AttributeList.getParamAttributes(~0U).
hasAttribute(Attributes::ReturnsTwice))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::ReturnsTwice);
return F->getParamAttributes(~0U).hasAttribute(A);
return false;
}
@ -613,54 +570,11 @@ void InvokeInst::setSuccessorV(unsigned idx, BasicBlock *B) {
return setSuccessor(idx, B);
}
bool InvokeInst::fnHasNoAliasAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoAlias))
bool InvokeInst::hasFnAttr(Attributes::AttrVal A) const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(A))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoAlias);
return false;
}
bool InvokeInst::fnHasNoInlineAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoInline))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoInline);
return false;
}
bool InvokeInst::fnHasNoReturnAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoReturn))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoReturn);
return false;
}
bool InvokeInst::fnHasNoUnwindAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind);
return false;
}
bool InvokeInst::fnHasReadNoneAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadNone))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadNone);
return false;
}
bool InvokeInst::fnHasReadOnlyAttr() const {
if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly);
return false;
}
bool InvokeInst::fnHasReturnsTwiceAttr() const {
if (AttributeList.getParamAttributes(~0U).
hasAttribute(Attributes::ReturnsTwice))
return true;
if (const Function *F = getCalledFunction())
return F->getParamAttributes(~0U).hasAttribute(Attributes::ReturnsTwice);
return F->getParamAttributes(~0U).hasAttribute(A);
return false;
}