[llvm] 318ed90 - [AIX][llvm][support] Implement getHostCPUName
David Tenty via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 9 13:30:25 PST 2021
Author: David Tenty
Date: 2021-02-09T16:30:18-05:00
New Revision: 318ed901448203284a103b488a37cd92fbc82447
URL: https://github.com/llvm/llvm-project/commit/318ed901448203284a103b488a37cd92fbc82447
DIFF: https://github.com/llvm/llvm-project/commit/318ed901448203284a103b488a37cd92fbc82447.diff
LOG: [AIX][llvm][support] Implement getHostCPUName
We implement getHostCPUName() for AIX via systemcfg interfaces since access to the processor version register is a privileged operation. We return a value based on the current processor implementation mode.
This fixes the cpu detection used by clang for `-mcpu=native`.
Reviewed By: hubert.reinterpretcast
Differential Revision: https://reviews.llvm.org/D95966
Added:
Modified:
llvm/lib/Support/Host.cpp
llvm/unittests/Support/Host.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp
index a1bd3cc12f1d..d89518b74704 100644
--- a/llvm/lib/Support/Host.cpp
+++ b/llvm/lib/Support/Host.cpp
@@ -43,6 +43,9 @@
#include <mach/mach_host.h>
#include <mach/machine.h>
#endif
+#ifdef _AIX
+#include <sys/systemcfg.h>
+#endif
#define DEBUG_TYPE "host-detection"
@@ -1217,6 +1220,38 @@ StringRef sys::getHostCPUName() {
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
index c85fd996643b..5911f8065fe6 100644
--- a/llvm/unittests/Support/Host.cpp
+++ b/llvm/unittests/Support/Host.cpp
@@ -431,4 +431,33 @@ TEST_F(HostTest, AIXVersionDetect) {
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<char[]> Buffer;
+ off_t Size;
+ ASSERT_EQ(runAndGetCommandOutput(ExePath, argv, Buffer, Size), true);
+ StringRef CPU(Buffer.get(), Size);
+ StringRef MCPU = StringSwitch<const char *>(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
More information about the llvm-commits
mailing list