mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
Inline the checks for mutually exclusive attributes since they're used in only one module.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b4e971f376
commit
28d1c60f89
@ -110,15 +110,6 @@ DECLARE_LLVM_ATTRIBUTE(AddressSafety,1ULL<<32) ///< Address safety checking is o
|
|||||||
/// an exception might pass by.
|
/// an exception might pass by.
|
||||||
/// uwtable + nounwind = Needs an entry because the ABI says so.
|
/// uwtable + nounwind = Needs an entry because the ABI says so.
|
||||||
|
|
||||||
/// @brief Attributes that are mutually incompatible.
|
|
||||||
const AttrConst MutuallyIncompatible[5] = {
|
|
||||||
{ByVal_i | Nest_i | StructRet_i},
|
|
||||||
{ByVal_i | Nest_i | InReg_i },
|
|
||||||
{ZExt_i | SExt_i},
|
|
||||||
{ReadNone_i | ReadOnly_i},
|
|
||||||
{NoInline_i | AlwaysInline_i}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace Attribute
|
} // namespace Attribute
|
||||||
|
|
||||||
/// AttributeImpl - The internal representation of the Attributes class. This is
|
/// AttributeImpl - The internal representation of the Attributes class. This is
|
||||||
|
@ -538,12 +538,34 @@ void Verifier::VerifyParameterAttrs(Attributes Attrs, Type *Ty,
|
|||||||
"Attributes 'byval', 'nest', 'sret', and 'nocapture' "
|
"Attributes 'byval', 'nest', 'sret', and 'nocapture' "
|
||||||
"do not apply to return values!", V);
|
"do not apply to return values!", V);
|
||||||
|
|
||||||
for (unsigned i = 0;
|
// Check for mutually incompatible attributes.
|
||||||
i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
|
Assert1(!((Attrs.hasAttribute(Attributes::ByVal) &&
|
||||||
Attributes MutI = Attrs & Attribute::MutuallyIncompatible[i];
|
Attrs.hasAttribute(Attributes::Nest)) ||
|
||||||
Assert1(MutI.isEmptyOrSingleton(), "Attributes '" +
|
(Attrs.hasAttribute(Attributes::ByVal) &&
|
||||||
MutI.getAsString() + "' are incompatible!", V);
|
Attrs.hasAttribute(Attributes::StructRet)) ||
|
||||||
}
|
(Attrs.hasAttribute(Attributes::Nest) &&
|
||||||
|
Attrs.hasAttribute(Attributes::StructRet))), "Attributes "
|
||||||
|
"'byval, nest, and sret' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!((Attrs.hasAttribute(Attributes::ByVal) &&
|
||||||
|
Attrs.hasAttribute(Attributes::Nest)) ||
|
||||||
|
(Attrs.hasAttribute(Attributes::ByVal) &&
|
||||||
|
Attrs.hasAttribute(Attributes::InReg)) ||
|
||||||
|
(Attrs.hasAttribute(Attributes::Nest) &&
|
||||||
|
Attrs.hasAttribute(Attributes::InReg))), "Attributes "
|
||||||
|
"'byval, nest, and inreg' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!(Attrs.hasAttribute(Attributes::ZExt) &&
|
||||||
|
Attrs.hasAttribute(Attributes::SExt)), "Attributes "
|
||||||
|
"'zeroext and signext' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!(Attrs.hasAttribute(Attributes::ReadNone) &&
|
||||||
|
Attrs.hasAttribute(Attributes::ReadOnly)), "Attributes "
|
||||||
|
"'readnone and readonly' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!(Attrs.hasAttribute(Attributes::NoInline) &&
|
||||||
|
Attrs.hasAttribute(Attributes::AlwaysInline)), "Attributes "
|
||||||
|
"'noinline and alwaysinline' are incompatible!", V);
|
||||||
|
|
||||||
Attributes TypeI = Attrs & Attributes::typeIncompatible(Ty);
|
Attributes TypeI = Attrs & Attributes::typeIncompatible(Ty);
|
||||||
Assert1(!TypeI, "Wrong type for attribute " +
|
Assert1(!TypeI, "Wrong type for attribute " +
|
||||||
@ -598,12 +620,34 @@ void Verifier::VerifyFunctionAttrs(FunctionType *FT,
|
|||||||
Attributes::get(NotFn).getAsString() +
|
Attributes::get(NotFn).getAsString() +
|
||||||
"' do not apply to the function!", V);
|
"' do not apply to the function!", V);
|
||||||
|
|
||||||
for (unsigned i = 0;
|
// Check for mutually incompatible attributes.
|
||||||
i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
|
Assert1(!((FAttrs.hasAttribute(Attributes::ByVal) &&
|
||||||
Attributes MutI = FAttrs & Attribute::MutuallyIncompatible[i];
|
FAttrs.hasAttribute(Attributes::Nest)) ||
|
||||||
Assert1(MutI.isEmptyOrSingleton(), "Attributes " +
|
(FAttrs.hasAttribute(Attributes::ByVal) &&
|
||||||
MutI.getAsString() + " are incompatible!", V);
|
FAttrs.hasAttribute(Attributes::StructRet)) ||
|
||||||
}
|
(FAttrs.hasAttribute(Attributes::Nest) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::StructRet))), "Attributes "
|
||||||
|
"'byval, nest, and sret' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!((FAttrs.hasAttribute(Attributes::ByVal) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::Nest)) ||
|
||||||
|
(FAttrs.hasAttribute(Attributes::ByVal) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::InReg)) ||
|
||||||
|
(FAttrs.hasAttribute(Attributes::Nest) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::InReg))), "Attributes "
|
||||||
|
"'byval, nest, and inreg' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!(FAttrs.hasAttribute(Attributes::ZExt) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::SExt)), "Attributes "
|
||||||
|
"'zeroext and signext' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!(FAttrs.hasAttribute(Attributes::ReadNone) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::ReadOnly)), "Attributes "
|
||||||
|
"'readnone and readonly' are incompatible!", V);
|
||||||
|
|
||||||
|
Assert1(!(FAttrs.hasAttribute(Attributes::NoInline) &&
|
||||||
|
FAttrs.hasAttribute(Attributes::AlwaysInline)), "Attributes "
|
||||||
|
"'noinline and alwaysinline' are incompatible!", V);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool VerifyAttributeCount(const AttrListPtr &Attrs, unsigned Params) {
|
static bool VerifyAttributeCount(const AttrListPtr &Attrs, unsigned Params) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Test function notes
|
; Test function notes
|
||||||
; RUN: not llvm-as %s -o /dev/null 2>&1 | grep "Attributes noinline alwaysinline are incompatible"
|
; RUN: not llvm-as %s -o /dev/null 2>&1 | grep "Attributes 'noinline and alwaysinline' are incompatible"
|
||||||
define void @fn1() alwaysinline noinline {
|
define void @fn1() alwaysinline noinline {
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user