diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-07-12 21:08:41 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-07-12 21:11:59 +0200 |
commit | 363e12ae6fceea3870898bc230841c8b0b00925a (patch) | |
tree | 11f9fcf26ed8df5a871e406986227c249e458d5c /llvm/lib/IR/Attributes.cpp | |
parent | 3fb0621fafbb16ea157830b308c26a77ba0a04e3 (diff) | |
download | llvm-363e12ae6fceea3870898bc230841c8b0b00925a.zip llvm-363e12ae6fceea3870898bc230841c8b0b00925a.tar.gz llvm-363e12ae6fceea3870898bc230841c8b0b00925a.tar.bz2 |
[Attributes] Simplify attribute sorting (NFCI)
It's not necessary to explicitly sort by enum/int/type attribute,
as the attribute kinds are already sorted this way. We can directly
sort by kind.
Diffstat (limited to 'llvm/lib/IR/Attributes.cpp')
-rw-r--r-- | llvm/lib/IR/Attributes.cpp | 42 |
1 files changed, 12 insertions, 30 deletions
diff --git a/llvm/lib/IR/Attributes.cpp b/llvm/lib/IR/Attributes.cpp index 3c3ffea..916aa86 100644 --- a/llvm/lib/IR/Attributes.cpp +++ b/llvm/lib/IR/Attributes.cpp @@ -541,41 +541,23 @@ Type *AttributeImpl::getValueAsType() const { bool AttributeImpl::operator<(const AttributeImpl &AI) const { if (this == &AI) return false; + // This sorts the attributes with Attribute::AttrKinds coming first (sorted // relative to their enum value) and then strings. - if (isEnumAttribute()) { - if (AI.isEnumAttribute()) return getKindAsEnum() < AI.getKindAsEnum(); - if (AI.isIntAttribute()) return true; - if (AI.isStringAttribute()) return true; - if (AI.isTypeAttribute()) return true; - } - - if (isTypeAttribute()) { - if (AI.isEnumAttribute()) return false; - if (AI.isTypeAttribute()) { - assert(getKindAsEnum() != AI.getKindAsEnum() && - "Comparison of types would be unstable"); - return getKindAsEnum() < AI.getKindAsEnum(); - } - if (AI.isIntAttribute()) return true; - if (AI.isStringAttribute()) return true; - } - - if (isIntAttribute()) { - if (AI.isEnumAttribute()) return false; - if (AI.isTypeAttribute()) return false; - if (AI.isIntAttribute()) { - if (getKindAsEnum() == AI.getKindAsEnum()) - return getValueAsInt() < AI.getValueAsInt(); + if (!isStringAttribute()) { + if (AI.isStringAttribute()) + return true; + if (getKindAsEnum() != AI.getKindAsEnum()) return getKindAsEnum() < AI.getKindAsEnum(); - } - if (AI.isStringAttribute()) return true; + assert(!AI.isEnumAttribute() && "Non-unique attribute"); + assert(!AI.isTypeAttribute() && "Comparison of types would be unstable"); + // TODO: Is this actually needed? + assert(AI.isIntAttribute() && "Only possibility left"); + return getValueAsInt() < AI.getValueAsInt(); } - assert(isStringAttribute()); - if (AI.isEnumAttribute()) return false; - if (AI.isTypeAttribute()) return false; - if (AI.isIntAttribute()) return false; + if (!AI.isStringAttribute()) + return false; if (getKindAsString() == AI.getKindAsString()) return getValueAsString() < AI.getValueAsString(); return getKindAsString() < AI.getKindAsString(); |