diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp --- a/llvm/lib/Support/Host.cpp +++ b/llvm/lib/Support/Host.cpp @@ -43,6 +43,9 @@ #include #include #endif +#ifdef _AIX +#include +#endif #define DEBUG_TYPE "host-detection" @@ -1217,6 +1220,38 @@ return "generic"; } +#elif defined(_AIX) +StringRef sys::getHostCPUName() { + switch (_system_configuration.implementation) { + case POWER_4: + if (_system_configuration.version == PV_4_3) + return "970"; + return "pwr4"; + case POWER_5: + if (_system_configuration.version == PV_5) + return "pwr5"; + return "pwr5x"; + case POWER_6: + if (_system_configuration.version == PV_6_Compat) + return "pwr6"; + return "pwr6x"; + case POWER_7: + return "pwr7"; + case POWER_8: + return "pwr8"; + case POWER_9: + return "pwr9"; +// TODO: simplify this once the macro is available in all OS levels. +#ifdef POWER_10 + case POWER_10: +#else + case 0x40000: +#endif + return "pwr10"; + default: + return "generic"; + } +} #else StringRef sys::getHostCPUName() { return "generic"; } #endif diff --git a/llvm/unittests/Support/Host.cpp b/llvm/unittests/Support/Host.cpp --- a/llvm/unittests/Support/Host.cpp +++ b/llvm/unittests/Support/Host.cpp @@ -431,4 +431,33 @@ ASSERT_EQ(std::tie(SystemMajor, SystemMinor), std::tie(TargetMajor, TargetMinor)); } + +TEST_F(HostTest, AIXHostCPUDetect) { + // Return a value based on the current processor implementation mode. + const char *ExePath = "/usr/sbin/getsystype"; + StringRef argv[] = {ExePath, "-i"}; + std::unique_ptr Buffer; + off_t Size; + ASSERT_EQ(runAndGetCommandOutput(ExePath, argv, Buffer, Size), true); + StringRef CPU(Buffer.get(), Size); + StringRef MCPU = StringSwitch(CPU) + .Case("POWER 4\n", "pwr4") + .Case("POWER 5\n", "pwr5") + .Case("POWER 6\n", "pwr6") + .Case("POWER 7\n", "pwr7") + .Case("POWER 8\n", "pwr8") + .Case("POWER 9\n", "pwr9") + .Case("POWER 10\n", "pwr10") + .Default("unknown"); + + StringRef HostCPU = sys::getHostCPUName(); + + // Just do the comparison on the base implementation mode. + if (HostCPU == "970") + HostCPU = StringRef("pwr4"); + else + HostCPU = HostCPU.rtrim('x'); + + EXPECT_EQ(HostCPU, MCPU); +} #endif