static StringRef getNameFromAttrKind(Attribute::AttrKind AttrKind);
- /// Return true if and only if the attribute has an Argument.
- static bool doesAttrKindHaveArgument(Attribute::AttrKind AttrKind);
-
/// Return true if the provided string matches the IR name of an attribute.
/// example: "noalias" return true but not "NoAlias"
static bool isExistingAttribute(StringRef Name);
AttrBuilder &addAttribute(Attribute::AttrKind Val) {
assert((unsigned)Val < Attribute::EndAttrKinds &&
"Attribute out of range!");
- assert(!Attribute::doesAttrKindHaveArgument(Val) &&
+ // TODO: This should really assert isEnumAttrKind().
+ assert(!Attribute::isIntAttrKind(Val) &&
"Adding integer attribute without adding a value!");
Attrs[Val] = true;
return *this;
StringRef AttrName, uint64_t *ArgVal) {
assert(Attribute::isExistingAttribute(AttrName) &&
"this attribute doesn't exist");
- assert((ArgVal == nullptr || Attribute::doesAttrKindHaveArgument(
+ assert((ArgVal == nullptr || Attribute::isIntAttrKind(
Attribute::getAttrKindFromName(AttrName))) &&
"requested value for an attribute that has no argument");
if (Assume.bundle_op_infos().empty())
public:
IntAttributeImpl(Attribute::AttrKind Kind, uint64_t Val)
: EnumAttributeImpl(IntAttrEntry, Kind), Val(Val) {
- assert(Attribute::doesAttrKindHaveArgument(Kind) &&
+ assert(Attribute::isIntAttrKind(Kind) &&
"Wrong kind for int attribute!");
}
}
}
-bool Attribute::doesAttrKindHaveArgument(Attribute::AttrKind AttrKind) {
- return AttrKind == Attribute::Alignment ||
- AttrKind == Attribute::StackAlignment ||
- AttrKind == Attribute::Dereferenceable ||
- AttrKind == Attribute::AllocSize ||
- AttrKind == Attribute::DereferenceableOrNull ||
- AttrKind == Attribute::VScaleRange;
-}
-
bool Attribute::isExistingAttribute(StringRef Name) {
return StringSwitch<bool>(Name)
#define GET_ATTR_NAMES
continue;
}
- if (A.isIntAttribute() !=
- Attribute::doesAttrKindHaveArgument(A.getKindAsEnum())) {
+ if (A.isIntAttribute() != Attribute::isIntAttrKind(A.getKindAsEnum())) {
CheckFailed("Attribute '" + A.getAsString() + "' should have an Argument",
V);
return;
Assert(ArgCount <= 2, "to many arguments");
if (Kind == Attribute::None)
break;
- if (Attribute::doesAttrKindHaveArgument(Kind)) {
+ if (Attribute::isIntAttrKind(Kind)) {
Assert(ArgCount == 2, "this attribute should have 2 arguments");
Assert(isa<ConstantInt>(Call.getOperand(Elem.Begin + 1)),
"the second argument should be a constant integral value");
}
if (auto *Arg = dyn_cast<Argument>(RK.WasOn)) {
if (Arg->hasAttribute(RK.AttrKind) &&
- (!Attribute::doesAttrKindHaveArgument(RK.AttrKind) ||
+ (!Attribute::isIntAttrKind(RK.AttrKind) ||
Arg->getAttribute(RK.AttrKind).getValueAsInt() >= RK.ArgValue))
return false;
return true;
if (auto *Arg = dyn_cast_or_null<Argument>(RK.WasOn)) {
bool HasSameKindAttr = Arg->hasAttribute(RK.AttrKind);
if (HasSameKindAttr)
- if (!Attribute::doesAttrKindHaveArgument(RK.AttrKind) ||
+ if (!Attribute::isIntAttrKind(RK.AttrKind) ||
Arg->getAttribute(RK.AttrKind).getValueAsInt() >=
RK.ArgValue) {
RemoveFromAssume();
return success();
}
- if (llvm::Attribute::doesAttrKindHaveArgument(kind)) {
+ if (llvm::Attribute::isIntAttrKind(kind)) {
if (value.empty())
return emitError(loc) << "LLVM attribute '" << key << "' expects a value";