aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic
diff options
context:
space:
mode:
authorBrian Cain <brian.cain@oss.qualcomm.com>2025-06-27 22:13:36 -0600
committerGitHub <noreply@github.com>2025-06-27 23:13:36 -0500
commitc6bd0207141f8fbd4061495b238a70e833f51cb6 (patch)
tree1a76c33732ba57f184ad65567f19eb613b533937 /clang/lib/Basic
parent54a7d53227ae7413dcb731ce14c1adc612d12a95 (diff)
downloadllvm-c6bd0207141f8fbd4061495b238a70e833f51cb6.zip
llvm-c6bd0207141f8fbd4061495b238a70e833f51cb6.tar.gz
llvm-c6bd0207141f8fbd4061495b238a70e833f51cb6.tar.bz2
Revert "[Hexagon] NFC: Reduce the amount of version-specific code" (#146193)
Reverts llvm/llvm-project#145812
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r--clang/lib/Basic/Targets/Hexagon.cpp41
-rw-r--r--clang/lib/Basic/Targets/Hexagon.h5
2 files changed, 28 insertions, 18 deletions
diff --git a/clang/lib/Basic/Targets/Hexagon.cpp b/clang/lib/Basic/Targets/Hexagon.cpp
index 9fff20b..06dcac0 100644
--- a/clang/lib/Basic/Targets/Hexagon.cpp
+++ b/clang/lib/Basic/Targets/Hexagon.cpp
@@ -18,19 +18,6 @@
using namespace clang;
using namespace clang::targets;
-namespace {
-
-constexpr llvm::StringLiteral CpuValsTextArray[] = {
- "hexagonv5", "hexagonv55", "hexagonv60", "hexagonv62", "hexagonv65",
- "hexagonv66", "hexagonv67", "hexagonv67t", "hexagonv68", "hexagonv69",
- "hexagonv71", "hexagonv71t", "hexagonv73", "hexagonv75", "hexagonv79",
-};
-
-} // namespace
-
-const llvm::ArrayRef<llvm::StringLiteral>
- HexagonTargetInfo::CpuValsText(CpuValsTextArray);
-
void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
Builder.defineMacro("__qdsp6__", "1");
@@ -252,6 +239,22 @@ bool HexagonTargetInfo::hasFeature(StringRef Feature) const {
.Default(false);
}
+struct CPUSuffix {
+ llvm::StringLiteral Name;
+ llvm::StringLiteral Suffix;
+};
+
+static constexpr CPUSuffix Suffixes[] = {
+ {{"hexagonv5"}, {"5"}}, {{"hexagonv55"}, {"55"}},
+ {{"hexagonv60"}, {"60"}}, {{"hexagonv62"}, {"62"}},
+ {{"hexagonv65"}, {"65"}}, {{"hexagonv66"}, {"66"}},
+ {{"hexagonv67"}, {"67"}}, {{"hexagonv67t"}, {"67t"}},
+ {{"hexagonv68"}, {"68"}}, {{"hexagonv69"}, {"69"}},
+ {{"hexagonv71"}, {"71"}}, {{"hexagonv71t"}, {"71t"}},
+ {{"hexagonv73"}, {"73"}}, {{"hexagonv75"}, {"75"}},
+ {{"hexagonv79"}, {"79"}},
+};
+
std::optional<unsigned> HexagonTargetInfo::getHexagonCPURev(StringRef Name) {
StringRef Arch = Name;
Arch.consume_front("hexagonv");
@@ -264,10 +267,18 @@ std::optional<unsigned> HexagonTargetInfo::getHexagonCPURev(StringRef Name) {
return std::nullopt;
}
+const char *HexagonTargetInfo::getHexagonCPUSuffix(StringRef Name) {
+ const CPUSuffix *Item = llvm::find_if(
+ Suffixes, [Name](const CPUSuffix &S) { return S.Name == Name; });
+ if (Item == std::end(Suffixes))
+ return nullptr;
+ return Item->Suffix.data();
+}
+
void HexagonTargetInfo::fillValidCPUList(
SmallVectorImpl<StringRef> &Values) const {
- for (const llvm::StringLiteral &I : CpuValsText)
- Values.push_back(I);
+ for (const CPUSuffix &Suffix : Suffixes)
+ Values.push_back(Suffix.Name);
}
llvm::SmallVector<Builtin::InfosShard>
diff --git a/clang/lib/Basic/Targets/Hexagon.h b/clang/lib/Basic/Targets/Hexagon.h
index 8aebbe1..a65663c 100644
--- a/clang/lib/Basic/Targets/Hexagon.h
+++ b/clang/lib/Basic/Targets/Hexagon.h
@@ -25,7 +25,6 @@ namespace targets {
// Hexagon abstract base class
class LLVM_LIBRARY_VISIBILITY HexagonTargetInfo : public TargetInfo {
- static const llvm::ArrayRef<llvm::StringLiteral> CpuValsText;
static const char *const GCCRegNames[];
static const TargetInfo::GCCRegAlias GCCRegAliases[];
std::string CPU;
@@ -116,11 +115,11 @@ public:
std::string_view getClobbers() const override { return ""; }
+ static const char *getHexagonCPUSuffix(StringRef Name);
static std::optional<unsigned> getHexagonCPURev(StringRef Name);
bool isValidCPUName(StringRef Name) const override {
- return std::any_of(std::begin(CpuValsText), std::end(CpuValsText),
- [Name](StringRef V) { return V == Name; });
+ return getHexagonCPUSuffix(Name);
}
void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;