forked from OSchip/llvm-project
[RISCV] Support getHostCpuName for sifive-u74
Reviewed By: kito-cheng Differential Revision: https://reviews.llvm.org/D123978
This commit is contained in:
parent
9b519f416b
commit
63c81b23be
|
@ -64,6 +64,7 @@ namespace sys {
|
|||
StringRef getHostCPUNameForPowerPC(StringRef ProcCpuinfoContent);
|
||||
StringRef getHostCPUNameForARM(StringRef ProcCpuinfoContent);
|
||||
StringRef getHostCPUNameForS390x(StringRef ProcCpuinfoContent);
|
||||
StringRef getHostCPUNameForRISCV(StringRef ProcCpuinfoContent);
|
||||
StringRef getHostCPUNameForBPF();
|
||||
|
||||
/// Helper functions to extract CPU details from CPUID on x86.
|
||||
|
|
|
@ -386,6 +386,26 @@ StringRef sys::detail::getHostCPUNameForS390x(StringRef ProcCpuinfoContent) {
|
|||
return "generic";
|
||||
}
|
||||
|
||||
StringRef sys::detail::getHostCPUNameForRISCV(StringRef ProcCpuinfoContent) {
|
||||
// There are 24 lines in /proc/cpuinfo
|
||||
SmallVector<StringRef> Lines;
|
||||
ProcCpuinfoContent.split(Lines, "\n");
|
||||
|
||||
// Look for uarch line to determine cpu name
|
||||
StringRef UArch;
|
||||
for (unsigned I = 0, E = Lines.size(); I != E; ++I) {
|
||||
if (Lines[I].startswith("uarch")) {
|
||||
UArch = Lines[I].substr(5).ltrim("\t :");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return StringSwitch<const char *>(UArch)
|
||||
.Case("sifive,u74-mc", "sifive-u74")
|
||||
.Case("sifive,bullet0", "sifive-u74")
|
||||
.Default("generic");
|
||||
}
|
||||
|
||||
StringRef sys::detail::getHostCPUNameForBPF() {
|
||||
#if !defined(__linux__) || !defined(__x86_64__)
|
||||
return "generic";
|
||||
|
@ -1379,6 +1399,11 @@ StringRef sys::getHostCPUName() {
|
|||
}
|
||||
#elif defined(__riscv)
|
||||
StringRef sys::getHostCPUName() {
|
||||
#if defined(__linux__)
|
||||
std::unique_ptr<llvm::MemoryBuffer> P = getProcCpuinfoContent();
|
||||
StringRef Content = P ? P->getBuffer() : "";
|
||||
return detail::getHostCPUNameForRISCV(Content);
|
||||
#else
|
||||
#if __riscv_xlen == 64
|
||||
return "generic-rv64";
|
||||
#elif __riscv_xlen == 32
|
||||
|
@ -1386,6 +1411,7 @@ StringRef sys::getHostCPUName() {
|
|||
#else
|
||||
#error "Unhandled value of __riscv_xlen"
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
StringRef sys::getHostCPUName() { return "generic"; }
|
||||
|
|
|
@ -378,6 +378,21 @@ TEST(getLinuxHostCPUName, s390x) {
|
|||
}
|
||||
}
|
||||
|
||||
TEST(getLinuxHostCPUName, RISCV) {
|
||||
const StringRef SifiveU74MCProcCPUInfo = R"(
|
||||
processor : 0
|
||||
hart : 2
|
||||
isa : rv64imafdc
|
||||
mmu : sv39
|
||||
uarch : sifive,u74-mc
|
||||
)";
|
||||
EXPECT_EQ(sys::detail::getHostCPUNameForRISCV(SifiveU74MCProcCPUInfo),
|
||||
"sifive-u74");
|
||||
EXPECT_EQ(
|
||||
sys::detail::getHostCPUNameForRISCV("uarch : sifive,bullet0\n"),
|
||||
"sifive-u74");
|
||||
}
|
||||
|
||||
static bool runAndGetCommandOutput(
|
||||
const char *ExePath, ArrayRef<llvm::StringRef> argv,
|
||||
std::unique_ptr<char[]> &Buffer, off_t &Size) {
|
||||
|
|
Loading…
Reference in New Issue