[llvm] 363e12a - [Attributes] Simplify attribute sorting (NFCI)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 12 12:12:18 PDT 2021
Author: Nikita Popov
Date: 2021-07-12T21:11:59+02:00
New Revision: 363e12ae6fceea3870898bc230841c8b0b00925a
URL: https://github.com/llvm/llvm-project/commit/363e12ae6fceea3870898bc230841c8b0b00925a
DIFF: https://github.com/llvm/llvm-project/commit/363e12ae6fceea3870898bc230841c8b0b00925a.diff
LOG: [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.
Added:
Modified:
llvm/lib/IR/Attributes.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/Attributes.cpp b/llvm/lib/IR/Attributes.cpp
index 3c3ffeabdbb4..916aa8648000 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();
More information about the llvm-commits
mailing list