[llvm] 6647011 - [RISCV] Don't expose any constructors of RISCVISAInfo publicly. (#98249)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 9 19:35:28 PDT 2024
Author: Craig Topper
Date: 2024-07-09T19:35:25-07:00
New Revision: 66470112d6e00832cae2970fb56f491cd5f7b14a
URL: https://github.com/llvm/llvm-project/commit/66470112d6e00832cae2970fb56f491cd5f7b14a
DIFF: https://github.com/llvm/llvm-project/commit/66470112d6e00832cae2970fb56f491cd5f7b14a.diff
LOG: [RISCV] Don't expose any constructors of RISCVISAInfo publicly. (#98249)
lld was using RISCVISAInfo(unsigned XLen,
RISCVISAUtils::OrderedExtensionMap &Exts). This required a call to
RISCVISAInfo::postProcessAndChecking to validate the RISCVISAInfo that
was created. This exposes too much about RISCVISAInfo to lld.
Replace with a new RISCVISAInfo::createFromExtMap that is responsible
for creating the object and calling postProcessAndChecking.
Added:
Modified:
lld/ELF/Arch/RISCV.cpp
llvm/include/llvm/TargetParser/RISCVISAInfo.h
llvm/lib/TargetParser/RISCVISAInfo.cpp
Removed:
################################################################################
diff --git a/lld/ELF/Arch/RISCV.cpp b/lld/ELF/Arch/RISCV.cpp
index 07a1b63be8051..faacc8f834be7 100644
--- a/lld/ELF/Arch/RISCV.cpp
+++ b/lld/ELF/Arch/RISCV.cpp
@@ -1251,9 +1251,8 @@ mergeAttributesSection(const SmallVector<InputSectionBase *, 0> §ions) {
}
}
- if (hasArch) {
- if (auto result = RISCVISAInfo::postProcessAndChecking(
- std::make_unique<RISCVISAInfo>(xlen, exts))) {
+ if (hasArch && xlen != 0) {
+ if (auto result = RISCVISAInfo::createFromExtMap(xlen, exts)) {
merged.strAttr.try_emplace(RISCVAttrs::ARCH,
saver().save((*result)->toString()));
} else {
diff --git a/llvm/include/llvm/TargetParser/RISCVISAInfo.h b/llvm/include/llvm/TargetParser/RISCVISAInfo.h
index ba2965600decd..5d3f3e113e96d 100644
--- a/llvm/include/llvm/TargetParser/RISCVISAInfo.h
+++ b/llvm/include/llvm/TargetParser/RISCVISAInfo.h
@@ -26,9 +26,6 @@ class RISCVISAInfo {
RISCVISAInfo(const RISCVISAInfo &) = delete;
RISCVISAInfo &operator=(const RISCVISAInfo &) = delete;
- RISCVISAInfo(unsigned XLen, RISCVISAUtils::OrderedExtensionMap &Exts)
- : XLen(XLen), FLen(0), MinVLen(0), MaxELen(0), MaxELenFp(0), Exts(Exts) {}
-
/// Parse RISC-V ISA info from arch string.
/// If IgnoreUnknown is set, any unrecognised extension names or
/// extensions with unrecognised versions will be silently dropped, except
@@ -48,6 +45,10 @@ class RISCVISAInfo {
static llvm::Expected<std::unique_ptr<RISCVISAInfo>>
parseFeatures(unsigned XLen, const std::vector<std::string> &Features);
+ static llvm::Expected<std::unique_ptr<RISCVISAInfo>>
+ createFromExtMap(unsigned XLen,
+ const RISCVISAUtils::OrderedExtensionMap &Exts);
+
/// Convert RISC-V ISA info to a feature vector.
std::vector<std::string> toFeatures(bool AddAllExtensions = false,
bool IgnoreUnknown = true) const;
@@ -72,8 +73,6 @@ class RISCVISAInfo {
static bool isSupportedExtensionWithVersion(StringRef Ext);
static bool isSupportedExtension(StringRef Ext, unsigned MajorVersion,
unsigned MinorVersion);
- static llvm::Expected<std::unique_ptr<RISCVISAInfo>>
- postProcessAndChecking(std::unique_ptr<RISCVISAInfo> &&ISAInfo);
static std::string getTargetFeatureForExtension(StringRef Ext);
private:
@@ -93,6 +92,9 @@ class RISCVISAInfo {
/// Update FLen, MinVLen, MaxELen, and MaxELenFp.
void updateImpliedLengths();
+
+ static llvm::Expected<std::unique_ptr<RISCVISAInfo>>
+ postProcessAndChecking(std::unique_ptr<RISCVISAInfo> &&ISAInfo);
};
} // namespace llvm
diff --git a/llvm/lib/TargetParser/RISCVISAInfo.cpp b/llvm/lib/TargetParser/RISCVISAInfo.cpp
index 1d077326e4cf2..0229b5a140f91 100644
--- a/llvm/lib/TargetParser/RISCVISAInfo.cpp
+++ b/llvm/lib/TargetParser/RISCVISAInfo.cpp
@@ -395,6 +395,17 @@ static Error getExtensionVersion(StringRef Ext, StringRef In, unsigned &Major,
return getError(Error);
}
+llvm::Expected<std::unique_ptr<RISCVISAInfo>>
+RISCVISAInfo::createFromExtMap(unsigned XLen,
+ const RISCVISAUtils::OrderedExtensionMap &Exts) {
+ assert(XLen == 32 || XLen == 64);
+ std::unique_ptr<RISCVISAInfo> ISAInfo(new RISCVISAInfo(XLen));
+
+ ISAInfo->Exts = Exts;
+
+ return RISCVISAInfo::postProcessAndChecking(std::move(ISAInfo));
+}
+
llvm::Expected<std::unique_ptr<RISCVISAInfo>>
RISCVISAInfo::parseFeatures(unsigned XLen,
const std::vector<std::string> &Features) {
More information about the llvm-commits
mailing list