Skip to content

Commit c705c68

Browse files
authored
[RISCV] Generate profiles from RISCVProfiles.td
So we can only mantain one place. Reviewers: preames, yetingk, topperc Reviewed By: topperc Pull Request: #90187
1 parent f86d264 commit c705c68

File tree

3 files changed

+51
-46
lines changed

3 files changed

+51
-46
lines changed

llvm/lib/TargetParser/RISCVISAInfo.cpp

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -50,41 +50,8 @@ static const char *RISCVGImplications[] = {
5050
#define GET_SUPPORTED_EXTENSIONS
5151
#include "llvm/TargetParser/RISCVTargetParserDef.inc"
5252

53-
static constexpr RISCVProfile SupportedProfiles[] = {
54-
{"rvi20u32", "rv32i"},
55-
{"rvi20u64", "rv64i"},
56-
{"rva20u64", "rv64imafdc_ziccamoa_ziccif_zicclsm_ziccrse_zicntr_za128rs"},
57-
{"rva20s64", "rv64imafdc_ziccamoa_ziccif_zicclsm_ziccrse_zicntr_zifencei_"
58-
"za128rs_ssccptr_sstvala_sstvecd_svade_svbare"},
59-
{"rva22u64",
60-
"rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_ziccrse_"
61-
"zicntr_zihintpause_zihpm_za64rs_zfhmin_zba_zbb_zbs_zkt"},
62-
{"rva22s64",
63-
"rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_ziccrse_"
64-
"zicntr_zifencei_zihintpause_zihpm_za64rs_zfhmin_zba_zbb_zbs_zkt_ssccptr_"
65-
"sscounterenw_sstvala_sstvecd_svade_svbare_svinval_svpbmt"},
66-
{"rva23u64",
67-
"rv64imafdcv_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_ziccrse_"
68-
"zicntr_zicond_zihintntl_zihintpause_zihpm_zimop_za64rs_zawrs_zfa_zfhmin_"
69-
"zcb_zcmop_zba_zbb_zbs_zkt_zvbb_zvfhmin_zvkt"},
70-
{"rva23s64",
71-
"rv64imafdcvh_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_ziccrse_"
72-
"zicntr_zicond_zifencei_zihintntl_zihintpause_zihpm_zimop_za64rs_zawrs_"
73-
"zfa_zfhmin_zcb_zcmop_zba_zbb_zbs_zkt_zvbb_zvfhmin_zvkt_shcounterenw_"
74-
"shgatpa_shtvala_shvsatpa_shvstvala_shvstvecd_ssccptr_sscofpmf_"
75-
"sscounterenw_ssnpm0p8_ssstateen_sstc_sstvala_sstvecd_ssu64xl_svade_"
76-
"svbare_svinval_svnapot_svpbmt"},
77-
{"rvb23u64", "rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_"
78-
"zicclsm_ziccrse_zicntr_zicond_zihintntl_zihintpause_zihpm_"
79-
"zimop_za64rs_zawrs_zfa_zcb_zcmop_zba_zbb_zbs_zkt"},
80-
{"rvb23s64",
81-
"rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_ziccrse_"
82-
"zicntr_zicond_zifencei_zihintntl_zihintpause_zihpm_zimop_za64rs_zawrs_"
83-
"zfa_zcb_zcmop_zba_zbb_zbs_zkt_ssccptr_sscofpmf_sscounterenw_sstc_sstvala_"
84-
"sstvecd_ssu64xl_svade_svbare_svinval_svnapot_svpbmt"},
85-
{"rvm23u32", "rv32im_zicbop_zicond_zicsr_zihintntl_zihintpause_zimop_zca_"
86-
"zcb_zce_zcmop_zcmp_zcmt_zba_zbb_zbs"},
87-
};
53+
#define GET_SUPPORTED_PROFILES
54+
#include "llvm/TargetParser/RISCVTargetParserDef.inc"
8855

8956
static void verifyTables() {
9057
#ifndef NDEBUG

llvm/test/TableGen/riscv-target-def.td

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ def Feature64Bit
5151
def FeatureDummy
5252
: SubtargetFeature<"dummy", "Dummy", "true", "Dummy">;
5353

54+
class RISCVProfile<string name, list<SubtargetFeature> features>
55+
: SubtargetFeature<name, "Is" # NAME, "true",
56+
"RISC-V " # name # " profile", features>;
57+
58+
def RVI20U32 : RISCVProfile<"rvi20u32", [Feature32Bit, FeatureStdExtI]>;
59+
def RVI20U64 : RISCVProfile<"rvi20u64", [Feature64Bit, FeatureStdExtI]>;
60+
def ProfileDummy : RISCVProfile<"dummy", [Feature64Bit, FeatureStdExtI,
61+
FeatureStdExtF, FeatureStdExtZidummy]>;
62+
5463
class RISCVProcessorModel<string n,
5564
SchedMachineModel m,
5665
list<SubtargetFeature> f,
@@ -121,6 +130,17 @@ def ROCKET : RISCVTuneProcessorModel<"rocket",
121130

122131
// CHECK: #endif // GET_IMPLIED_EXTENSIONS
123132

133+
// CHECK: #ifdef GET_SUPPORTED_PROFILES
134+
// CHECK-NEXT: #undef GET_SUPPORTED_PROFILES
135+
136+
// CHECK: static constexpr RISCVProfile SupportedProfiles[] = {
137+
// CHECK-NEXT: {"dummy","rv64i2p1_f2p2_zidummy0p1"},
138+
// CHECK-NEXT: {"rvi20u32","rv32i2p1"},
139+
// CHECK-NEXT: {"rvi20u64","rv64i2p1"},
140+
// CHECK-NEXT: };
141+
142+
// CHECK: #endif // GET_SUPPORTED_PROFILES
143+
124144
// CHECK: #ifndef PROC
125145
// CHECK-NEXT: #define PROC(ENUM, NAME, DEFAULT_MARCH, FAST_UNALIGNED_ACCESS)
126146
// CHECK-NEXT: #endif

llvm/utils/TableGen/RISCVTargetDefEmitter.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ static void emitRISCVExtensions(RecordKeeper &Records, raw_ostream &OS) {
8989
//
9090
// This is almost the same as RISCVFeatures::parseFeatureBits, except that we
9191
// get feature name from feature records instead of feature bits.
92-
static void printMArch(raw_ostream &OS, const Record &Rec) {
92+
static void printMArch(raw_ostream &OS, const std::vector<Record *> &Features) {
9393
RISCVISAUtils::OrderedExtensionMap Extensions;
9494
unsigned XLen = 0;
9595

9696
// Convert features to FeatureVector.
97-
for (auto *Feature : Rec.getValueAsListOfDefs("Features")) {
97+
for (auto *Feature : Features) {
9898
StringRef FeatureName = getExtensionName(Feature);
9999
if (Feature->isSubClassOf("RISCVExtension")) {
100100
unsigned Major = Feature->getValueAsInt("MajorVersion");
@@ -118,22 +118,39 @@ static void printMArch(raw_ostream &OS, const Record &Rec) {
118118
OS << LS << Ext.first << Ext.second.Major << 'p' << Ext.second.Minor;
119119
}
120120

121+
static void emitRISCVProfiles(RecordKeeper &Records, raw_ostream &OS) {
122+
OS << "#ifdef GET_SUPPORTED_PROFILES\n";
123+
OS << "#undef GET_SUPPORTED_PROFILES\n\n";
124+
125+
OS << "static constexpr RISCVProfile SupportedProfiles[] = {\n";
126+
127+
for (const Record *Rec : Records.getAllDerivedDefinitions("RISCVProfile")) {
128+
OS.indent(4) << "{\"" << Rec->getValueAsString("Name") << "\",\"";
129+
printMArch(OS, Rec->getValueAsListOfDefs("Implies"));
130+
OS << "\"},\n";
131+
}
132+
133+
OS << "};\n\n";
134+
135+
OS << "#endif // GET_SUPPORTED_PROFILES\n\n";
136+
}
137+
121138
static void emitRISCVProcs(RecordKeeper &RK, raw_ostream &OS) {
122139
OS << "#ifndef PROC\n"
123140
<< "#define PROC(ENUM, NAME, DEFAULT_MARCH, FAST_UNALIGNED_ACCESS)\n"
124141
<< "#endif\n\n";
125142

126143
// Iterate on all definition records.
127144
for (const Record *Rec : RK.getAllDerivedDefinitions("RISCVProcessorModel")) {
128-
bool FastScalarUnalignedAccess =
129-
any_of(Rec->getValueAsListOfDefs("Features"), [&](auto &Feature) {
130-
return Feature->getValueAsString("Name") == "unaligned-scalar-mem";
131-
});
145+
const std::vector<Record *> &Features =
146+
Rec->getValueAsListOfDefs("Features");
147+
bool FastScalarUnalignedAccess = any_of(Features, [&](auto &Feature) {
148+
return Feature->getValueAsString("Name") == "unaligned-scalar-mem";
149+
});
132150

133-
bool FastVectorUnalignedAccess =
134-
any_of(Rec->getValueAsListOfDefs("Features"), [&](auto &Feature) {
135-
return Feature->getValueAsString("Name") == "unaligned-vector-mem";
136-
});
151+
bool FastVectorUnalignedAccess = any_of(Features, [&](auto &Feature) {
152+
return Feature->getValueAsString("Name") == "unaligned-vector-mem";
153+
});
137154

138155
bool FastUnalignedAccess =
139156
FastScalarUnalignedAccess && FastVectorUnalignedAccess;
@@ -145,7 +162,7 @@ static void emitRISCVProcs(RecordKeeper &RK, raw_ostream &OS) {
145162

146163
// Compute MArch from features if we don't specify it.
147164
if (MArch.empty())
148-
printMArch(OS, *Rec);
165+
printMArch(OS, Features);
149166
else
150167
OS << MArch;
151168
OS << "\"}, " << FastUnalignedAccess << ")\n";
@@ -167,6 +184,7 @@ static void emitRISCVProcs(RecordKeeper &RK, raw_ostream &OS) {
167184

168185
static void EmitRISCVTargetDef(RecordKeeper &RK, raw_ostream &OS) {
169186
emitRISCVExtensions(RK, OS);
187+
emitRISCVProfiles(RK, OS);
170188
emitRISCVProcs(RK, OS);
171189
}
172190

0 commit comments

Comments
 (0)