Skip to content

[AArch64][TargetParser] Move ExtensionDependencies into tablegen [NFC] #93614

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 2 additions & 49 deletions llvm/include/llvm/TargetParser/AArch64TargetParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,55 +183,8 @@ struct ExtensionDependency {
ArchExtKind Later;
};

// clang-format off
// Each entry here is a link in the dependency chain starting from the
// extension that was added to the architecture first.
inline constexpr ExtensionDependency ExtensionDependencies[] = {
{AEK_FP, AEK_FP16},
{AEK_FP, AEK_SIMD},
{AEK_FP, AEK_JSCVT},
{AEK_FP, AEK_FP8},
{AEK_SIMD, AEK_CRYPTO},
{AEK_SIMD, AEK_AES},
{AEK_SIMD, AEK_SHA2},
{AEK_SIMD, AEK_SHA3},
{AEK_SIMD, AEK_SM4},
{AEK_SIMD, AEK_RDM},
{AEK_SIMD, AEK_DOTPROD},
{AEK_SIMD, AEK_FCMA},
{AEK_FP16, AEK_FP16FML},
{AEK_FP16, AEK_SVE},
{AEK_BF16, AEK_SME},
{AEK_BF16, AEK_B16B16},
{AEK_SVE, AEK_SVE2},
{AEK_SVE, AEK_F32MM},
{AEK_SVE, AEK_F64MM},
{AEK_SVE2, AEK_SVE2P1},
{AEK_SVE2, AEK_SVE2BITPERM},
{AEK_SVE2, AEK_SVE2AES},
{AEK_SVE2, AEK_SVE2SHA3},
{AEK_SVE2, AEK_SVE2SM4},
{AEK_SVE2, AEK_SMEFA64},
{AEK_SVE2, AEK_SMEFA64},
{AEK_SME, AEK_SME2},
{AEK_SME, AEK_SMEF16F16},
{AEK_SME, AEK_SMEF64F64},
{AEK_SME, AEK_SMEI16I64},
{AEK_SME, AEK_SMEFA64},
{AEK_SME2, AEK_SME2P1},
{AEK_SME2, AEK_SSVE_FP8FMA},
{AEK_SME2, AEK_SSVE_FP8DOT2},
{AEK_SME2, AEK_SSVE_FP8DOT4},
{AEK_SME2, AEK_SMEF8F16},
{AEK_SME2, AEK_SMEF8F32},
{AEK_FP8, AEK_SMEF8F16},
{AEK_FP8, AEK_SMEF8F32},
{AEK_LSE, AEK_LSE128},
{AEK_PREDRES, AEK_SPECRES2},
{AEK_RAS, AEK_RASV2},
{AEK_RCPC, AEK_RCPC3},
};
// clang-format on
#define EMIT_EXTENSION_DEPENDENCIES
#include "llvm/TargetParser/AArch64TargetParserDef.inc"

enum ArchProfile { AProfile = 'A', RProfile = 'R', InvalidProfile = '?' };

Expand Down
6 changes: 0 additions & 6 deletions llvm/lib/TargetParser/AArch64TargetParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,12 +181,6 @@ void AArch64::ExtensionSet::enable(ArchExtKind E) {
!BaseArch->is_superset(ARMV9A))
enable(AEK_FP16FML);

// For all architectures, +crypto enables +aes and +sha2.
if (E == AEK_CRYPTO) {
enable(AEK_AES);
enable(AEK_SHA2);
}

// For v8.4A+ and v9.0A+, +crypto also enables +sha3 and +sm4.
if (E == AEK_CRYPTO && BaseArch->is_superset(ARMV8_4A)) {
enable(AEK_SHA3);
Expand Down
18 changes: 18 additions & 0 deletions llvm/utils/TableGen/ARMTargetDefEmitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,24 @@ static void EmitARMTargetDef(RecordKeeper &RK, raw_ostream &OS) {
<< "#endif // EMIT_EXTENSIONS\n"
<< "\n";

// Emit extension dependencies
OS << "#ifdef EMIT_EXTENSION_DEPENDENCIES\n"
<< "inline constexpr ExtensionDependency ExtensionDependencies[] = {\n";
for (const Record *Rec : SortedExtensions) {
auto LaterAEK = Rec->getValueAsString("ArchExtKindSpelling").upper();
for (const Record *I : Rec->getValueAsListOfDefs("Implies"))
if (auto EarlierAEK = I->getValueAsOptionalString("ArchExtKindSpelling"))
OS << " {" << EarlierAEK->upper() << ", " << LaterAEK << "},\n";
}
// FIXME: Tablegen has the Subtarget Feature FeatureRCPC_IMMO which is implied
// by FeatureRCPC3 and in turn implies FeatureRCPC. The proper fix is to make
// FeatureRCPC_IMMO an Extension but that will expose it to the command line.
OS << " {AEK_RCPC, AEK_RCPC3},\n";
OS << "};\n"
<< "#undef EMIT_EXTENSION_DEPENDENCIES\n"
<< "#endif // EMIT_EXTENSION_DEPENDENCIES\n"
<< "\n";

// Emit architecture information
OS << "#ifdef EMIT_ARCHITECTURES\n";

Expand Down
Loading