Skip to content

Commit ee1389a

Browse files
committed
[llvm][AArch64][TableGen] Create a ProcessorAlias record. NFC
... and use it to organize all of the Apple CPU aliases.
1 parent 1ba2768 commit ee1389a

File tree

2 files changed

+38
-22
lines changed

2 files changed

+38
-22
lines changed

llvm/lib/Target/AArch64/AArch64Processors.td

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,12 @@ def ProcessorFeatures {
930930
list<SubtargetFeature> Generic = [FeatureFPARMv8, FeatureNEON, FeatureETE];
931931
}
932932

933+
// Define an alternative name for a given Processor.
934+
class ProcessorAlias<string n, string alias> {
935+
string Name = n;
936+
string Alias = alias;
937+
}
938+
933939
// FeatureFuseAdrpAdd is enabled under Generic to allow linker merging
934940
// optimizations.
935941
def : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic,
@@ -1050,15 +1056,12 @@ def : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110,
10501056

10511057
// Apple CPUs
10521058

1053-
// Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
1054-
def : ProcessorModel<"cyclone", CycloneModel, ProcessorFeatures.AppleA7,
1055-
[TuneAppleA7]>;
10561059
def : ProcessorModel<"apple-a7", CycloneModel, ProcessorFeatures.AppleA7,
10571060
[TuneAppleA7]>;
1058-
def : ProcessorModel<"apple-a8", CycloneModel, ProcessorFeatures.AppleA7,
1059-
[TuneAppleA7]>;
1060-
def : ProcessorModel<"apple-a9", CycloneModel, ProcessorFeatures.AppleA7,
1061-
[TuneAppleA7]>;
1061+
// Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
1062+
def : ProcessorAlias<"cyclone", "apple-a7">;
1063+
def : ProcessorAlias<"apple-a8", "apple-a7">;
1064+
def : ProcessorAlias<"apple-a9", "apple-a7">;
10621065

10631066
def : ProcessorModel<"apple-a10", CycloneModel, ProcessorFeatures.AppleA10,
10641067
[TuneAppleA10]>;
@@ -1068,28 +1071,23 @@ def : ProcessorModel<"apple-a11", CycloneModel, ProcessorFeatures.AppleA11,
10681071

10691072
def : ProcessorModel<"apple-a12", CycloneModel, ProcessorFeatures.AppleA12,
10701073
[TuneAppleA12]>;
1071-
def : ProcessorModel<"apple-s4", CycloneModel, ProcessorFeatures.AppleA12,
1072-
[TuneAppleA12]>;
1073-
def : ProcessorModel<"apple-s5", CycloneModel, ProcessorFeatures.AppleA12,
1074-
[TuneAppleA12]>;
1074+
def : ProcessorAlias<"apple-s4", "apple-a12">;
1075+
def : ProcessorAlias<"apple-s5", "apple-a12">;
10751076

10761077
def : ProcessorModel<"apple-a13", CycloneModel, ProcessorFeatures.AppleA13,
10771078
[TuneAppleA13]>;
10781079

10791080
def : ProcessorModel<"apple-a14", CycloneModel, ProcessorFeatures.AppleA14,
10801081
[TuneAppleA14]>;
1081-
def : ProcessorModel<"apple-m1", CycloneModel, ProcessorFeatures.AppleA14,
1082-
[TuneAppleA14]>;
1082+
def : ProcessorAlias<"apple-m1", "apple-a14">;
10831083

10841084
def : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15,
10851085
[TuneAppleA15]>;
1086-
def : ProcessorModel<"apple-m2", CycloneModel, ProcessorFeatures.AppleA15,
1087-
[TuneAppleA15]>;
1086+
def : ProcessorAlias<"apple-m2", "apple-a15">;
10881087

10891088
def : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16,
10901089
[TuneAppleA16]>;
1091-
def : ProcessorModel<"apple-m3", CycloneModel, ProcessorFeatures.AppleA16,
1092-
[TuneAppleA16]>;
1090+
def : ProcessorAlias<"apple-m3", "apple-a16">;
10931091

10941092
def : ProcessorModel<"apple-a17", CycloneModel, ProcessorFeatures.AppleA17,
10951093
[TuneAppleA17]>;
@@ -1098,8 +1096,7 @@ def : ProcessorModel<"apple-m4", CycloneModel, ProcessorFeatures.AppleM4,
10981096
[TuneAppleM4]>;
10991097

11001098
// Alias for the latest Apple processor model supported by LLVM.
1101-
def : ProcessorModel<"apple-latest", CycloneModel, ProcessorFeatures.AppleM4,
1102-
[TuneAppleM4]>;
1099+
def : ProcessorAlias<"apple-latest", "apple-m4">;
11031100

11041101

11051102
// Fujitsu A64FX

llvm/utils/TableGen/ARMTargetDefEmitter.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,28 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) {
221221
OS << "#ifdef EMIT_CPU_INFO\n"
222222
<< "inline constexpr CpuInfo CpuInfos[] = {\n";
223223

224+
std::map<std::string, std::pair<std::string, const Record *>> ProcessorModels;
224225
for (const Record *Rec : RK.getAllDerivedDefinitions("ProcessorModel")) {
225226
auto Name = Rec->getValueAsString("Name");
227+
ProcessorModels.insert(std::make_pair(Name, std::make_pair(Name, Rec)));
228+
}
229+
230+
for (const Record *Rec : RK.getAllDerivedDefinitions("ProcessorAlias")) {
231+
std::string Name = Rec->getValueAsString("Name").str();
232+
auto Alias = Rec->getValueAsString("Alias");
233+
auto It = ProcessorModels.find(Alias.str());
234+
if (!ProcessorModels
235+
.insert(
236+
std::make_pair(Name, std::make_pair(Alias, It->second.second)))
237+
.second)
238+
PrintFatalError(
239+
Rec, "Alias duplicates an existing ProcessorAlias or ProcessorModel");
240+
}
241+
242+
for (auto &[K, V] : ProcessorModels) {
243+
auto Name = K;
244+
auto Alias = V.first;
245+
auto *Rec = V.second;
226246
auto Features = Rec->getValueAsListOfDefs("Features");
227247

228248
// "apple-latest" is backend-only, should not be accepted by TargetParser.
@@ -253,9 +273,8 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) {
253273
auto Profile = Arch->getValueAsString("Profile");
254274
auto ArchInfo = ArchInfoName(Major, Minor, Profile);
255275

256-
// The apple-latest alias is backend only, do not expose it to -mcpu.
257-
if (Name == "apple-latest")
258-
continue;
276+
if (Name != Alias)
277+
OS << " // Alias: " << Name << " -> " << Alias << "\n";
259278

260279
OS << " {\n"
261280
<< " \"" << Name << "\",\n"

0 commit comments

Comments
 (0)