diff --git a/llvm/include/llvm/TargetParser/RISCVTargetParser.h b/llvm/include/llvm/TargetParser/RISCVTargetParser.h index c75778952e0f5..a365205ba2ecb 100644 --- a/llvm/include/llvm/TargetParser/RISCVTargetParser.h +++ b/llvm/include/llvm/TargetParser/RISCVTargetParser.h @@ -32,6 +32,21 @@ struct RISCVExtensionBitmask { }; } // namespace RISCVExtensionBitmaskTable +struct CPUModel { + uint32_t MVendorID; + uint64_t MArchID; + uint64_t MImpID; +}; + +struct CPUInfo { + StringLiteral Name; + StringLiteral DefaultMarch; + bool FastScalarUnalignedAccess; + bool FastVectorUnalignedAccess; + CPUModel CPUModel; + bool is64Bit() const { return DefaultMarch.starts_with("rv64"); } +}; + // We use 64 bits as the known part in the scalable vector types. static constexpr unsigned RVVBitsPerBlock = 64; diff --git a/llvm/lib/Target/RISCV/RISCVProcessors.td b/llvm/lib/Target/RISCV/RISCVProcessors.td index e96281bb46950..03a48ff3c1758 100644 --- a/llvm/lib/Target/RISCV/RISCVProcessors.td +++ b/llvm/lib/Target/RISCV/RISCVProcessors.td @@ -49,6 +49,9 @@ class RISCVProcessorModel : ProcessorModel { string DefaultMarch = default_march; + int MVendorID = 0; + int MArchID = 0; + int MImpID = 0; } class RISCVTuneProcessorModel; + TuneLDADDFusion]> { + let MVendorID = 0x61f; + let MArchID = 0x8000000000010000; + let MImpID = 0x111; +} def XIANGSHAN_NANHU : RISCVProcessorModel<"xiangshan-nanhu", XiangShanNanHuModel, @@ -503,7 +510,11 @@ def SPACEMIT_X60 : RISCVProcessorModel<"spacemit-x60", [TuneDLenFactor2, TuneOptimizedNF2SegmentLoadStore, TuneOptimizedNF3SegmentLoadStore, - TuneOptimizedNF4SegmentLoadStore]>; + TuneOptimizedNF4SegmentLoadStore]> { + let MVendorID = 0x710; + let MArchID = 0x8000000058000001; + let MImpID = 0x1000000049772200; +} def RP2350_HAZARD3 : RISCVProcessorModel<"rp2350-hazard3", NoSchedModel, diff --git a/llvm/lib/TargetParser/RISCVTargetParser.cpp b/llvm/lib/TargetParser/RISCVTargetParser.cpp index da3fbc04300e2..f4d09d1e30240 100644 --- a/llvm/lib/TargetParser/RISCVTargetParser.cpp +++ b/llvm/lib/TargetParser/RISCVTargetParser.cpp @@ -21,24 +21,22 @@ namespace RISCV { enum CPUKind : unsigned { #define PROC(ENUM, NAME, DEFAULT_MARCH, FAST_SCALAR_UNALIGN, \ - FAST_VECTOR_UNALIGN) \ + FAST_VECTOR_UNALIGN, MVENDORID, MARCHID, MIMPID) \ CK_##ENUM, #define TUNE_PROC(ENUM, NAME) CK_##ENUM, #include "llvm/TargetParser/RISCVTargetParserDef.inc" }; -struct CPUInfo { - StringLiteral Name; - StringLiteral DefaultMarch; - bool FastScalarUnalignedAccess; - bool FastVectorUnalignedAccess; - bool is64Bit() const { return DefaultMarch.starts_with("rv64"); } -}; - constexpr CPUInfo RISCVCPUInfo[] = { #define PROC(ENUM, NAME, DEFAULT_MARCH, FAST_SCALAR_UNALIGN, \ - FAST_VECTOR_UNALIGN) \ - {NAME, DEFAULT_MARCH, FAST_SCALAR_UNALIGN, FAST_VECTOR_UNALIGN}, + FAST_VECTOR_UNALIGN, MVENDORID, MARCHID, MIMPID) \ + { \ + NAME, \ + DEFAULT_MARCH, \ + FAST_SCALAR_UNALIGN, \ + FAST_VECTOR_UNALIGN, \ + {MVENDORID, MARCHID, MIMPID}, \ + }, #include "llvm/TargetParser/RISCVTargetParserDef.inc" }; diff --git a/llvm/test/TableGen/riscv-target-def.td b/llvm/test/TableGen/riscv-target-def.td index c071cfd731cb5..79178731f12a7 100644 --- a/llvm/test/TableGen/riscv-target-def.td +++ b/llvm/test/TableGen/riscv-target-def.td @@ -81,6 +81,9 @@ class RISCVProcessorModel : ProcessorModel { string DefaultMarch = default_march; + int MVendorID = 0; + int MArchID = 0; + int MImpID = 0; } class RISCVTuneProcessorModelgetValueAsInt("MVendorID"); + uint64_t MArchID = Rec->getValueAsInt("MArchID"); + uint64_t MImpID = Rec->getValueAsInt("MImpID"); + OS << "\"}, " << FastScalarUnalignedAccess << ", " - << FastVectorUnalignedAccess << ")\n"; + << FastVectorUnalignedAccess; + OS << ", " << format_hex(MVendorID, 10); + OS << ", " << format_hex(MArchID, 18); + OS << ", " << format_hex(MImpID, 18); + OS << ")\n"; } OS << "\n#undef PROC\n"; OS << "\n";