Skip to content

Commit 038de66

Browse files
authored
Revert "[Hexagon] NFC: Reduce the amount of version-specific code (#145812)"
This reverts commit e9c9adc.
1 parent 163ad0b commit 038de66

File tree

7 files changed

+275
-169
lines changed

7 files changed

+275
-169
lines changed

clang/lib/Basic/Targets/Hexagon.cpp

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,6 @@
1818
using namespace clang;
1919
using namespace clang::targets;
2020

21-
namespace {
22-
23-
constexpr llvm::StringLiteral CpuValsTextArray[] = {
24-
"hexagonv5", "hexagonv55", "hexagonv60", "hexagonv62", "hexagonv65",
25-
"hexagonv66", "hexagonv67", "hexagonv67t", "hexagonv68", "hexagonv69",
26-
"hexagonv71", "hexagonv71t", "hexagonv73", "hexagonv75", "hexagonv79",
27-
};
28-
29-
} // namespace
30-
31-
const llvm::ArrayRef<llvm::StringLiteral>
32-
HexagonTargetInfo::CpuValsText(CpuValsTextArray);
33-
3421
void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts,
3522
MacroBuilder &Builder) const {
3623
Builder.defineMacro("__qdsp6__", "1");
@@ -252,6 +239,22 @@ bool HexagonTargetInfo::hasFeature(StringRef Feature) const {
252239
.Default(false);
253240
}
254241

242+
struct CPUSuffix {
243+
llvm::StringLiteral Name;
244+
llvm::StringLiteral Suffix;
245+
};
246+
247+
static constexpr CPUSuffix Suffixes[] = {
248+
{{"hexagonv5"}, {"5"}}, {{"hexagonv55"}, {"55"}},
249+
{{"hexagonv60"}, {"60"}}, {{"hexagonv62"}, {"62"}},
250+
{{"hexagonv65"}, {"65"}}, {{"hexagonv66"}, {"66"}},
251+
{{"hexagonv67"}, {"67"}}, {{"hexagonv67t"}, {"67t"}},
252+
{{"hexagonv68"}, {"68"}}, {{"hexagonv69"}, {"69"}},
253+
{{"hexagonv71"}, {"71"}}, {{"hexagonv71t"}, {"71t"}},
254+
{{"hexagonv73"}, {"73"}}, {{"hexagonv75"}, {"75"}},
255+
{{"hexagonv79"}, {"79"}},
256+
};
257+
255258
std::optional<unsigned> HexagonTargetInfo::getHexagonCPURev(StringRef Name) {
256259
StringRef Arch = Name;
257260
Arch.consume_front("hexagonv");
@@ -264,10 +267,18 @@ std::optional<unsigned> HexagonTargetInfo::getHexagonCPURev(StringRef Name) {
264267
return std::nullopt;
265268
}
266269

270+
const char *HexagonTargetInfo::getHexagonCPUSuffix(StringRef Name) {
271+
const CPUSuffix *Item = llvm::find_if(
272+
Suffixes, [Name](const CPUSuffix &S) { return S.Name == Name; });
273+
if (Item == std::end(Suffixes))
274+
return nullptr;
275+
return Item->Suffix.data();
276+
}
277+
267278
void HexagonTargetInfo::fillValidCPUList(
268279
SmallVectorImpl<StringRef> &Values) const {
269-
for (const llvm::StringLiteral &I : CpuValsText)
270-
Values.push_back(I);
280+
for (const CPUSuffix &Suffix : Suffixes)
281+
Values.push_back(Suffix.Name);
271282
}
272283

273284
llvm::SmallVector<Builtin::InfosShard>

clang/lib/Basic/Targets/Hexagon.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ namespace targets {
2525
// Hexagon abstract base class
2626
class LLVM_LIBRARY_VISIBILITY HexagonTargetInfo : public TargetInfo {
2727

28-
static const llvm::ArrayRef<llvm::StringLiteral> CpuValsText;
2928
static const char *const GCCRegNames[];
3029
static const TargetInfo::GCCRegAlias GCCRegAliases[];
3130
std::string CPU;
@@ -116,11 +115,11 @@ class LLVM_LIBRARY_VISIBILITY HexagonTargetInfo : public TargetInfo {
116115

117116
std::string_view getClobbers() const override { return ""; }
118117

118+
static const char *getHexagonCPUSuffix(StringRef Name);
119119
static std::optional<unsigned> getHexagonCPURev(StringRef Name);
120120

121121
bool isValidCPUName(StringRef Name) const override {
122-
return std::any_of(std::begin(CpuValsText), std::end(CpuValsText),
123-
[Name](StringRef V) { return V == Name; });
122+
return getHexagonCPUSuffix(Name);
124123
}
125124

126125
void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;

llvm/lib/Target/Hexagon/HexagonDepArch.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,26 @@ enum class ArchEnum {
3232
V79
3333
};
3434

35+
inline std::optional<Hexagon::ArchEnum> getCpu(StringRef CPU) {
36+
return StringSwitch<std::optional<Hexagon::ArchEnum>>(CPU)
37+
.Case("generic", Hexagon::ArchEnum::V5)
38+
.Case("hexagonv5", Hexagon::ArchEnum::V5)
39+
.Case("hexagonv55", Hexagon::ArchEnum::V55)
40+
.Case("hexagonv60", Hexagon::ArchEnum::V60)
41+
.Case("hexagonv62", Hexagon::ArchEnum::V62)
42+
.Case("hexagonv65", Hexagon::ArchEnum::V65)
43+
.Case("hexagonv66", Hexagon::ArchEnum::V66)
44+
.Case("hexagonv67", Hexagon::ArchEnum::V67)
45+
.Case("hexagonv67t", Hexagon::ArchEnum::V67)
46+
.Case("hexagonv68", Hexagon::ArchEnum::V68)
47+
.Case("hexagonv69", Hexagon::ArchEnum::V69)
48+
.Case("hexagonv71", Hexagon::ArchEnum::V71)
49+
.Case("hexagonv71t", Hexagon::ArchEnum::V71)
50+
.Case("hexagonv73", Hexagon::ArchEnum::V73)
51+
.Case("hexagonv75", Hexagon::ArchEnum::V75)
52+
.Case("hexagonv79", Hexagon::ArchEnum::V79)
53+
.Default(std::nullopt);
54+
}
3555
} // namespace Hexagon
3656
} // namespace llvm
3757

llvm/lib/Target/Hexagon/HexagonSubtarget.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ HexagonSubtarget::HexagonSubtarget(const Triple &TT, StringRef CPU,
8888

8989
HexagonSubtarget &
9090
HexagonSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS) {
91+
std::optional<Hexagon::ArchEnum> ArchVer = Hexagon::getCpu(CPUString);
92+
if (ArchVer)
93+
HexagonArchVersion = *ArchVer;
94+
else
95+
llvm_unreachable("Unrecognized Hexagon processor version");
96+
9197
UseHVX128BOps = false;
9298
UseHVX64BOps = false;
9399
UseAudioOps = false;
@@ -157,7 +163,7 @@ HexagonSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS) {
157163
FeatureBitset FeatureBits = getFeatureBits();
158164
if (HexagonDisableDuplex)
159165
setFeatureBits(FeatureBits.reset(Hexagon::FeatureDuplex));
160-
SetFeatureBitsTransitively(Hexagon_MC::completeHVXFeatures(FeatureBits));
166+
setFeatureBits(Hexagon_MC::completeHVXFeatures(FeatureBits));
161167

162168
return *this;
163169
}

llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,57 @@ void HexagonMCELFStreamer::HexagonMCEmitLocalCommonSymbol(MCSymbol *Symbol,
149149
HexagonMCEmitCommonSymbol(Symbol, Size, ByteAlignment, AccessSize);
150150
}
151151

152+
static unsigned featureToArchVersion(unsigned Feature) {
153+
switch (Feature) {
154+
case Hexagon::ArchV5:
155+
return 5;
156+
case Hexagon::ArchV55:
157+
return 55;
158+
case Hexagon::ArchV60:
159+
case Hexagon::ExtensionHVXV60:
160+
return 60;
161+
case Hexagon::ArchV62:
162+
case Hexagon::ExtensionHVXV62:
163+
return 62;
164+
case Hexagon::ArchV65:
165+
case Hexagon::ExtensionHVXV65:
166+
return 65;
167+
case Hexagon::ArchV66:
168+
case Hexagon::ExtensionHVXV66:
169+
return 66;
170+
case Hexagon::ArchV67:
171+
case Hexagon::ExtensionHVXV67:
172+
return 67;
173+
case Hexagon::ArchV68:
174+
case Hexagon::ExtensionHVXV68:
175+
return 68;
176+
case Hexagon::ArchV69:
177+
case Hexagon::ExtensionHVXV69:
178+
return 69;
179+
case Hexagon::ArchV71:
180+
case Hexagon::ExtensionHVXV71:
181+
return 71;
182+
case Hexagon::ArchV73:
183+
case Hexagon::ExtensionHVXV73:
184+
return 73;
185+
case Hexagon::ArchV75:
186+
case Hexagon::ExtensionHVXV75:
187+
return 75;
188+
case Hexagon::ArchV79:
189+
case Hexagon::ExtensionHVXV79:
190+
return 79;
191+
}
192+
llvm_unreachable("Expected valid arch feature");
193+
return 0;
194+
}
195+
152196
void HexagonTargetStreamer::emitTargetAttributes(const MCSubtargetInfo &STI) {
153197
auto Features = STI.getFeatureBits();
154-
unsigned Arch = Hexagon_MC::getArchVersionAttribute(Features).value_or(0);
155-
std::optional<unsigned> HVXArch =
156-
Hexagon_MC::getHVXVersionAttribute(Features);
198+
unsigned Arch = featureToArchVersion(Hexagon_MC::getArchVersion(Features));
199+
std::optional<unsigned> HVXArch = Hexagon_MC::getHVXVersion(Features);
157200
emitAttribute(HexagonAttrs::ARCH, Arch);
158201
if (HVXArch)
159-
emitAttribute(HexagonAttrs::HVXARCH, *HVXArch);
202+
emitAttribute(HexagonAttrs::HVXARCH, featureToArchVersion(*HVXArch));
160203
if (Features.test(Hexagon::ExtensionHVXIEEEFP))
161204
emitAttribute(HexagonAttrs::HVXIEEEFP, 1);
162205
if (Features.test(Hexagon::ExtensionHVXQFloat))

0 commit comments

Comments
 (0)