diff options
Diffstat (limited to 'llvm/lib/TargetParser/RISCVTargetParser.cpp')
-rw-r--r-- | llvm/lib/TargetParser/RISCVTargetParser.cpp | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/llvm/lib/TargetParser/RISCVTargetParser.cpp b/llvm/lib/TargetParser/RISCVTargetParser.cpp index 49a35bf..2d407f6 100644 --- a/llvm/lib/TargetParser/RISCVTargetParser.cpp +++ b/llvm/lib/TargetParser/RISCVTargetParser.cpp @@ -22,24 +22,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" }; @@ -60,6 +58,19 @@ bool hasFastVectorUnalignedAccess(StringRef CPU) { return Info && Info->FastVectorUnalignedAccess; } +bool hasValidCPUModel(StringRef CPU) { + const CPUModel CPUModel = getCPUModel(CPU); + return CPUModel.MVendorID != 0 && CPUModel.MArchID != 0 && + CPUModel.MImpID != 0; +} + +CPUModel getCPUModel(StringRef CPU) { + const CPUInfo *Info = getCPUInfoByName(CPU); + if (!Info) + return {0, 0, 0}; + return Info->CPUModel; +} + bool parseCPU(StringRef CPU, bool IsRV64) { const CPUInfo *Info = getCPUInfoByName(CPU); |