aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Attributes.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-07-12 21:08:41 +0200
committerNikita Popov <nikita.ppv@gmail.com>2021-07-12 21:11:59 +0200
commit363e12ae6fceea3870898bc230841c8b0b00925a (patch)
tree11f9fcf26ed8df5a871e406986227c249e458d5c /llvm/lib/IR/Attributes.cpp
parent3fb0621fafbb16ea157830b308c26a77ba0a04e3 (diff)
downloadllvm-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.cpp42
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();