[llvm] cf3c714 - [RISCV] Merge RISCVISAInfo::updateFLen/MinVLen/MaxELen into a single function. (#90665)
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 1 10:44:14 PDT 2024
Author: Craig Topper
Date: 2024-05-01T10:44:10-07:00
New Revision: cf3c714e4bd7b8a68793f2827080fe3388ae8bb1
URL: https://github.com/llvm/llvm-project/commit/cf3c714e4bd7b8a68793f2827080fe3388ae8bb1
DIFF: https://github.com/llvm/llvm-project/commit/cf3c714e4bd7b8a68793f2827080fe3388ae8bb1.diff
LOG: [RISCV] Merge RISCVISAInfo::updateFLen/MinVLen/MaxELen into a single function. (#90665)
This simplifies the callers.
Added:
Modified:
llvm/include/llvm/TargetParser/RISCVISAInfo.h
llvm/lib/TargetParser/RISCVISAInfo.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/TargetParser/RISCVISAInfo.h b/llvm/include/llvm/TargetParser/RISCVISAInfo.h
index 0d5637155daa96..36617a9b625972 100644
--- a/llvm/include/llvm/TargetParser/RISCVISAInfo.h
+++ b/llvm/include/llvm/TargetParser/RISCVISAInfo.h
@@ -78,13 +78,12 @@ class RISCVISAInfo {
static std::string getTargetFeatureForExtension(StringRef Ext);
private:
- RISCVISAInfo(unsigned XLen)
- : XLen(XLen), FLen(0), MinVLen(0), MaxELen(0), MaxELenFp(0) {}
+ RISCVISAInfo(unsigned XLen) : XLen(XLen) {}
unsigned XLen;
- unsigned FLen;
- unsigned MinVLen;
- unsigned MaxELen, MaxELenFp;
+ unsigned FLen = 0;
+ unsigned MinVLen = 0;
+ unsigned MaxELen = 0, MaxELenFp = 0;
RISCVISAUtils::OrderedExtensionMap Exts;
@@ -94,9 +93,9 @@ class RISCVISAInfo {
void updateImplication();
void updateCombination();
- void updateFLen();
- void updateMinVLen();
- void updateMaxELen();
+
+ /// Update FLen, MinVLen, MaxELen, and MaxELenFp.
+ void updateImpliedLengths();
};
} // namespace llvm
diff --git a/llvm/lib/TargetParser/RISCVISAInfo.cpp b/llvm/lib/TargetParser/RISCVISAInfo.cpp
index d154c00a785927..64405ca8cb9ff1 100644
--- a/llvm/lib/TargetParser/RISCVISAInfo.cpp
+++ b/llvm/lib/TargetParser/RISCVISAInfo.cpp
@@ -478,9 +478,7 @@ RISCVISAInfo::parseNormalizedArchString(StringRef Arch) {
"failed to parse major version number");
ISAInfo->addExtension(ExtName, {MajorVersion, MinorVersion});
}
- ISAInfo->updateFLen();
- ISAInfo->updateMinVLen();
- ISAInfo->updateMaxELen();
+ ISAInfo->updateImpliedLengths();
return std::move(ISAInfo);
}
@@ -906,50 +904,51 @@ void RISCVISAInfo::updateCombination() {
} while (MadeChange);
}
-void RISCVISAInfo::updateFLen() {
- FLen = 0;
+void RISCVISAInfo::updateImpliedLengths() {
+ assert(FLen == 0 && MaxELenFp == 0 && MaxELen == 0 && MinVLen == 0 &&
+ "Expected lengths to be initialied to zero");
+
// TODO: Handle q extension.
if (Exts.count("d"))
FLen = 64;
else if (Exts.count("f"))
FLen = 32;
-}
-void RISCVISAInfo::updateMinVLen() {
- for (auto const &Ext : Exts) {
- StringRef ExtName = Ext.first;
- bool IsZvlExt = ExtName.consume_front("zvl") && ExtName.consume_back("b");
- if (IsZvlExt) {
- unsigned ZvlLen;
- if (!ExtName.getAsInteger(10, ZvlLen))
- MinVLen = std::max(MinVLen, ZvlLen);
- }
- }
-}
-
-void RISCVISAInfo::updateMaxELen() {
- assert(MaxELenFp == 0 && MaxELen == 0);
if (Exts.count("v")) {
MaxELenFp = std::max(MaxELenFp, 64u);
MaxELen = std::max(MaxELen, 64u);
}
- // handles EEW restriction by sub-extension zve
for (auto const &Ext : Exts) {
StringRef ExtName = Ext.first;
- bool IsZveExt = ExtName.consume_front("zve");
- if (IsZveExt) {
- if (ExtName.back() == 'f')
+ // Infer MaxELen and MaxELenFp from Zve(32/64)(x/f/d)
+ if (ExtName.consume_front("zve")) {
+ unsigned ZveELen;
+ if (ExtName.consumeInteger(10, ZveELen))
+ continue;
+
+ if (ExtName == "f")
MaxELenFp = std::max(MaxELenFp, 32u);
- else if (ExtName.back() == 'd')
+ else if (ExtName == "d")
MaxELenFp = std::max(MaxELenFp, 64u);
- else if (ExtName.back() != 'x')
+ else if (ExtName != "x")
continue;
- ExtName = ExtName.drop_back();
- unsigned ZveELen;
- if (!ExtName.getAsInteger(10, ZveELen))
- MaxELen = std::max(MaxELen, ZveELen);
+ MaxELen = std::max(MaxELen, ZveELen);
+ continue;
+ }
+
+ // Infer MinVLen from zvl*b.
+ if (ExtName.consume_front("zvl")) {
+ unsigned ZvlLen;
+ if (ExtName.consumeInteger(10, ZvlLen))
+ continue;
+
+ if (ExtName != "b")
+ continue;
+
+ MinVLen = std::max(MinVLen, ZvlLen);
+ continue;
}
}
}
@@ -975,9 +974,7 @@ llvm::Expected<std::unique_ptr<RISCVISAInfo>>
RISCVISAInfo::postProcessAndChecking(std::unique_ptr<RISCVISAInfo> &&ISAInfo) {
ISAInfo->updateImplication();
ISAInfo->updateCombination();
- ISAInfo->updateFLen();
- ISAInfo->updateMinVLen();
- ISAInfo->updateMaxELen();
+ ISAInfo->updateImpliedLengths();
if (Error Result = ISAInfo->checkDependency())
return std::move(Result);
More information about the llvm-commits
mailing list