From f694255ce6536aed18487916ecc57d66e202bbdb Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Sat, 10 Aug 2024 16:39:16 +0200 Subject: [PATCH 1/2] [llvm-exegesis][unittests] Disable SubprocessMemoryTest on big-endian hosts Three `llvm-exegesis` tests ``` LLVM-Unit :: tools/llvm-exegesis/./LLVMExegesisTests/SubprocessMemoryTest/DefinitionFillsCompletely LLVM-Unit :: tools/llvm-exegesis/./LLVMExegesisTests/SubprocessMemoryTest/MultipleDefinitions LLVM-Unit :: tools/llvm-exegesis/./LLVMExegesisTests/SubprocessMemoryTest/OneDefinition ``` `FAIL` on Linux/sparc64 like ``` llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp:68: Failure Expected equality of these values: SharedMemoryMapping[I] Which is: '\0' ExpectedValue[I] Which is: '\xAA' (170) ``` It seems like this test only works on little-endian hosts: three sub-tests are already disabled on powerpc and s390x (both big-endian), and the fourth is additionaly guarded against big-endian hosts (making the other guards unnecessary). Rather than add big-endian hosts (like sparc) one by one to every sub-test, it seems better to disable the whole test on big-endian. Tested on `sparc64-unknown-linux-gnu` and `x86_64-pc-linux-gnu`. --- .../X86/SubprocessMemoryTest.cpp | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp b/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp index 7c23e7b7e9c5a5..b6dfca2da6c625 100644 --- a/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp +++ b/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp @@ -24,7 +24,9 @@ namespace llvm { namespace exegesis { -#if defined(__linux__) && !defined(__ANDROID__) +// The tests are only supported on little endian systems. +#if defined(__linux__) && !defined(__ANDROID__) && \ + __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ // This needs to be updated anytime a test is added or removed from the test // suite. @@ -77,20 +79,12 @@ class SubprocessMemoryTest : public X86TestBase { // memory calls not working in some cases, so they have been disabled. // TODO(boomanaiden154): Investigate and fix this issue on PPC. -#if defined(__powerpc__) || defined(__s390x__) -TEST_F(SubprocessMemoryTest, DISABLED_OneDefinition) { -#else TEST_F(SubprocessMemoryTest, OneDefinition) { -#endif testCommon({{"test1", {APInt(8, 0xff), 4096, 0}}}, 0); checkSharedMemoryDefinition(getSharedMemoryName(0, 0), 4096, {0xff}); } -#if defined(__powerpc__) || defined(__s390x__) -TEST_F(SubprocessMemoryTest, DISABLED_MultipleDefinitions) { -#else TEST_F(SubprocessMemoryTest, MultipleDefinitions) { -#endif testCommon({{"test1", {APInt(8, 0xaa), 4096, 0}}, {"test2", {APInt(8, 0xbb), 4096, 1}}, {"test3", {APInt(8, 0xcc), 4096, 2}}}, @@ -100,11 +94,7 @@ TEST_F(SubprocessMemoryTest, MultipleDefinitions) { checkSharedMemoryDefinition(getSharedMemoryName(1, 2), 4096, {0xcc}); } -#if defined(__powerpc__) || defined(__s390x__) -TEST_F(SubprocessMemoryTest, DISABLED_DefinitionFillsCompletely) { -#else TEST_F(SubprocessMemoryTest, DefinitionFillsCompletely) { -#endif testCommon({{"test1", {APInt(8, 0xaa), 4096, 0}}, {"test2", {APInt(16, 0xbbbb), 4096, 1}}, {"test3", {APInt(24, 0xcccccc), 4096, 2}}}, @@ -117,12 +107,7 @@ TEST_F(SubprocessMemoryTest, DefinitionFillsCompletely) { checkSharedMemoryDefinition(getSharedMemoryName(2, 2), 4096, Test3Expected); } -// The following test is only supported on little endian systems. -#if defined(__powerpc__) || defined(__s390x__) || __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -TEST_F(SubprocessMemoryTest, DISABLED_DefinitionEndTruncation) { -#else TEST_F(SubprocessMemoryTest, DefinitionEndTruncation) { -#endif testCommon({{"test1", {APInt(48, 0xaabbccddeeff), 4096, 0}}}, 3); std::vector Test1Expected(512, 0); // order is reversed since we're assuming a little endian system. @@ -150,7 +135,8 @@ TEST_F(SubprocessMemoryTest, DefinitionEndTruncation) { checkSharedMemoryDefinition(getSharedMemoryName(3, 0), 4096, Test1Expected); } -#endif // defined(__linux__) && !defined(__ANDROID__) +#endif // defined(__linux__) && !defined(__ANDROID__) && __BYTE_ORDER__ == + // __ORDER_LITTLE_ENDIAN__ } // namespace exegesis } // namespace llvm From a5fdb02069ceef10a747df1a878a64a464ad854b Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Sat, 10 Aug 2024 22:20:18 +0200 Subject: [PATCH 2/2] Only disable on powerpc, s390x, and sparc. --- .../tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp b/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp index b6dfca2da6c625..f61254ac74e140 100644 --- a/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp +++ b/llvm/unittests/tools/llvm-exegesis/X86/SubprocessMemoryTest.cpp @@ -24,9 +24,8 @@ namespace llvm { namespace exegesis { -// The tests are only supported on little endian systems. #if defined(__linux__) && !defined(__ANDROID__) && \ - __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + !(defined(__powerpc__) || defined(__s390x__) || defined(__sparc__)) // This needs to be updated anytime a test is added or removed from the test // suite. @@ -107,7 +106,12 @@ TEST_F(SubprocessMemoryTest, DefinitionFillsCompletely) { checkSharedMemoryDefinition(getSharedMemoryName(2, 2), 4096, Test3Expected); } +// The following test is only supported on little endian systems. +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +TEST_F(SubprocessMemoryTest, DISABLED_DefinitionEndTruncation) { +#else TEST_F(SubprocessMemoryTest, DefinitionEndTruncation) { +#endif testCommon({{"test1", {APInt(48, 0xaabbccddeeff), 4096, 0}}}, 3); std::vector Test1Expected(512, 0); // order is reversed since we're assuming a little endian system. @@ -135,8 +139,7 @@ TEST_F(SubprocessMemoryTest, DefinitionEndTruncation) { checkSharedMemoryDefinition(getSharedMemoryName(3, 0), 4096, Test1Expected); } -#endif // defined(__linux__) && !defined(__ANDROID__) && __BYTE_ORDER__ == - // __ORDER_LITTLE_ENDIAN__ +#endif // __linux__ && !__ANDROID__ && !(__powerpc__ || __s390x__ || __sparc__) } // namespace exegesis } // namespace llvm