From b1996667abf3c6e905a320166959603095975f52 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Wed, 2 Oct 2019 17:50:55 +0000 Subject: [PATCH 01/12] Fix missing defines in Power SPP files when building with CMake For legacy reasons, the assembly files for Power are run through the C preprocessor separately from when they are assembled. However, some defines (namely platform ones such as TR_HOST_64BIT) were not being correctly passed to the C preprocessor when running these assembly files through it when building with CMake. This has now been corrected. Signed-off-by: Ben Thomas --- cmake/modules/OmrCompilerSupport.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/modules/OmrCompilerSupport.cmake b/cmake/modules/OmrCompilerSupport.cmake index 6e01230c9f5..c2beddbe9c2 100644 --- a/cmake/modules/OmrCompilerSupport.cmake +++ b/cmake/modules/OmrCompilerSupport.cmake @@ -280,11 +280,15 @@ macro(set_tr_compile_options) # Prepend leading '-D' only if required if(def MATCHES "^-D") set(TR_ASM_FLAGS "${TR_ASM_FLAGS} ${def}") + list(APPEND SPP_FLAGS "${def}") else() set(TR_ASM_FLAGS "${TR_ASM_FLAGS} -D${def}") + list(APPEND SPP_FLAGS "-D${def}") endif() endforeach() + set(SPP_FLAGS ${SPP_FLAGS} PARENT_SCOPE) + # We need special handling on x86 because we could be gnu or NASM assembler if(OMR_ARCH_X86) make_gnu_asm_defines(gnu_defines ${TR_COMPILE_DEFINITIONS}) From e355f32138638a9fb8cab449b3dfa37558273b19 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Wed, 2 Oct 2019 17:54:37 +0000 Subject: [PATCH 02/12] Fix OMRMonitor.cpp failing to compile on AIX Previously, OMRMonitor.hpp contained a workaround for an XLC issue with private delete operators in it. However, this workaround was only used when compiling on z/OS, meaning that attempting to build the OMR compiler on AIX with XLC would fail with an error in OMRMonitor.cpp. This workaround has now been enabled on AIX. Signed-off-by: Ben Thomas --- compiler/infra/OMRMonitor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/infra/OMRMonitor.hpp b/compiler/infra/OMRMonitor.hpp index 5321f662fc5..062a0736e72 100644 --- a/compiler/infra/OMRMonitor.hpp +++ b/compiler/infra/OMRMonitor.hpp @@ -58,7 +58,7 @@ class Monitor char const *getName(); bool init(char *name); -#if defined(J9ZOS390) +#if defined(J9ZOS390) || defined(AIXPPC) // xlc cannot handle private delete operator public: #else From 107365cedff231d4baa33c61858403a7a0e310fe Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Thu, 3 Oct 2019 18:25:07 +0000 Subject: [PATCH 03/12] Enable Tril and test compiler hacks on AIX Previously, there were a number of hacks to work around xlc issues in Tril. However, these hacks were not being enabled on AIX since they were explicitly guarded by checking J9ZOS390, as z/OS was previously the only platform supported by Tril that used xlc. In order to allow Tril to compile on AIX, these hacks have now been enabled on AIX. Signed-off-by: Ben Thomas --- fvtest/compilertest/tests/OpCodesTest.hpp | 2 +- fvtest/compilertriltest/ArithmeticTest.cpp | 2 +- fvtest/compilertriltest/TypeConversionTest.cpp | 2 +- fvtest/omrGtestGlue/CMakeLists.txt | 2 +- fvtest/tril/tril/method_compiler.hpp | 3 ++- .../gtest-1.8.0/include/gtest/internal/gtest-port.h | 9 +++++---- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/fvtest/compilertest/tests/OpCodesTest.hpp b/fvtest/compilertest/tests/OpCodesTest.hpp index e1babc68f69..6ebfea92e8a 100644 --- a/fvtest/compilertest/tests/OpCodesTest.hpp +++ b/fvtest/compilertest/tests/OpCodesTest.hpp @@ -44,7 +44,7 @@ #include "tests/injectors/TernaryOpIlInjector.hpp" #include "tests/injectors/UnaryOpIlInjector.hpp" -#if defined(J9ZOS390) +#if defined(J9ZOS390) || defined(AIXPPC) namespace std { using ::isnan; diff --git a/fvtest/compilertriltest/ArithmeticTest.cpp b/fvtest/compilertriltest/ArithmeticTest.cpp index 3c7ad28ae65..4d23da1ed43 100644 --- a/fvtest/compilertriltest/ArithmeticTest.cpp +++ b/fvtest/compilertriltest/ArithmeticTest.cpp @@ -25,7 +25,7 @@ #include -#if defined(J9ZOS390) +#if defined(J9ZOS390) || defined(AIXPPC) namespace std { using ::isnan; diff --git a/fvtest/compilertriltest/TypeConversionTest.cpp b/fvtest/compilertriltest/TypeConversionTest.cpp index ba6c9e7dfe1..06314af2145 100644 --- a/fvtest/compilertriltest/TypeConversionTest.cpp +++ b/fvtest/compilertriltest/TypeConversionTest.cpp @@ -25,7 +25,7 @@ #include -#if defined(J9ZOS390) +#if defined(J9ZOS390) || defined(AIXPPC) namespace std { using ::isnan; diff --git a/fvtest/omrGtestGlue/CMakeLists.txt b/fvtest/omrGtestGlue/CMakeLists.txt index bf454151b06..83e17a541b0 100644 --- a/fvtest/omrGtestGlue/CMakeLists.txt +++ b/fvtest/omrGtestGlue/CMakeLists.txt @@ -60,7 +60,7 @@ if(NOT OMR_HOST_OS STREQUAL "win") endif() #target_link_libraries(omrGtest INTERFACE omrGtestGlue) -if(OMR_HOST_OS STREQUAL "zos") +if(OMR_HOST_OS STREQUAL "zos" OR OMR_HOST_OS STREQUAL "aix") list(APPEND OMR_GTEST_DEFINITIONS -DGTEST_ENV_HAS_STD_TUPLE_ -D__IBMCPP_TR1__ diff --git a/fvtest/tril/tril/method_compiler.hpp b/fvtest/tril/tril/method_compiler.hpp index ef859a25877..8945f9f74d5 100644 --- a/fvtest/tril/tril/method_compiler.hpp +++ b/fvtest/tril/tril/method_compiler.hpp @@ -77,11 +77,12 @@ class MethodCompiler { */ template T getEntryPoint() { -#if !defined(J9ZOS390) +#if !defined(J9ZOS390) && !defined(AIXPPC) static_assert( std::is_pointer::value && std::is_function::type>::value, "Attempted to get entry point using a non-function-pointer type."); #endif + return reinterpret_cast(_entry_point); } diff --git a/third_party/gtest-1.8.0/include/gtest/internal/gtest-port.h b/third_party/gtest-1.8.0/include/gtest/internal/gtest-port.h index e773091d517..79559f29b2e 100644 --- a/third_party/gtest-1.8.0/include/gtest/internal/gtest-port.h +++ b/third_party/gtest-1.8.0/include/gtest/internal/gtest-port.h @@ -690,10 +690,11 @@ struct _RTL_CRITICAL_SECTION; # elif GTEST_ENV_HAS_STD_TUPLE_ # include -#if defined(J9ZOS390) -// On z/OS tuple is defined in the ::std::tr1 namespace as it is an extension -// class since xlc does not support the full C++11 standard. As such we expose -// the tuple class in the ::std namespace such that code below will work. +#if defined(J9ZOS390) || defined(AIXPPC) +// On z/OS and AIX, tuple is defined in the ::std::tr1 namespace as it is an +// extension class since xlc does not support the full C++11 standard. As such, +// we expose the tuple class in the ::std namespace such that code below will +// work. namespace std { using ::std::tr1::get; From 675f519eb995a1d8ad72111a5d808038f078ddfb Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Mon, 28 Oct 2019 14:26:07 +0000 Subject: [PATCH 04/12] Fix mmap with MAP_ANONYMOUS not working on AIX It turns out that AIX's implementation of the mmap function requires that the file descriptor be set to -1 when using MAP_ANONYMOUS. Previously, there were a couple places that were trying to use MAP_ANONYMOUS without setting the file descriptor to -1, resulting in them erroring out. This has been corrected and they should now work correctly. Signed-off-by: Ben Thomas --- fvtest/compilertest/runtime/TestCodeCacheManager.cpp | 2 +- jitbuilder/runtime/JBCodeCacheManager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fvtest/compilertest/runtime/TestCodeCacheManager.cpp b/fvtest/compilertest/runtime/TestCodeCacheManager.cpp index 50c941cc81e..1b5a8f56c50 100644 --- a/fvtest/compilertest/runtime/TestCodeCacheManager.cpp +++ b/fvtest/compilertest/runtime/TestCodeCacheManager.cpp @@ -79,7 +79,7 @@ TestCompiler::CodeCacheManager::allocateCodeCacheSegment(size_t segmentSize, codeCacheSizeToAllocate, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE, - 0, + -1, 0)); #endif /* OMR_OS_WINDOWS */ TR::CodeCacheMemorySegment *memSegment = (TR::CodeCacheMemorySegment *) ((size_t)memorySlab + codeCacheSizeToAllocate - sizeof(TR::CodeCacheMemorySegment)); diff --git a/jitbuilder/runtime/JBCodeCacheManager.cpp b/jitbuilder/runtime/JBCodeCacheManager.cpp index e08df5492c8..499599fe082 100644 --- a/jitbuilder/runtime/JBCodeCacheManager.cpp +++ b/jitbuilder/runtime/JBCodeCacheManager.cpp @@ -99,7 +99,7 @@ JitBuilder::CodeCacheManager::allocateCodeCacheSegment(size_t segmentSize, codeCacheSizeToAllocate, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE, - 0, + -1, 0)); // keep the impact of this fix localized #if defined(NO_MAP_ANONYMOUS) From ca854e65e9e9fe27d0b646cab8c81200e77788a7 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Thu, 3 Oct 2019 18:29:45 +0000 Subject: [PATCH 05/12] Fix incorrect use of PRId64/PRIu64 in ShiftAndRotateTest Previously, a number of places in ShiftAndRotateTest were using PRId64 and PRIu64 directly in their format strings. However, this does not work correctly on AIX. These have been corrected to use OMR_PRId64 and OMR_PRIu64 instead. Signed-off-by: Ben Thomas --- fvtest/compilertriltest/ShiftAndRotateTest.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fvtest/compilertriltest/ShiftAndRotateTest.cpp b/fvtest/compilertriltest/ShiftAndRotateTest.cpp index 1ad08664918..09926be40a4 100644 --- a/fvtest/compilertriltest/ShiftAndRotateTest.cpp +++ b/fvtest/compilertriltest/ShiftAndRotateTest.cpp @@ -206,7 +206,7 @@ TEST_P(Int64ShiftAndRotate, UsingConst) { " (block" " (lreturn" " (%s" - " (lconst %" PRId64 ")" + " (lconst %" OMR_PRId64 ")" " (iconst %d)))))", param.opcode.c_str(), param.lhs, @@ -257,7 +257,7 @@ TEST_P(Int64ShiftAndRotate, UsingLhsConst) { " (block" " (lreturn" " (%s" - " (lconst %" PRId64 ")" + " (lconst %" OMR_PRId64 ")" " (iload parm=0)))))", param.opcode.c_str(), param.lhs); @@ -670,7 +670,7 @@ TEST_P(UInt64ShiftAndRotate, UsingConst) { " (block" " (lreturn" " (%s" - " (lconst %" PRIu64 ")" + " (lconst %" OMR_PRIu64 ")" " (iconst %d)))))", param.opcode.c_str(), param.lhs, @@ -721,7 +721,7 @@ TEST_P(UInt64ShiftAndRotate, UsingLhsConst) { " (block" " (lreturn" " (%s" - " (lconst %" PRIu64 ")" + " (lconst %" OMR_PRIu64 ")" " (iload parm=0)))))", param.opcode.c_str(), param.lhs); @@ -1196,7 +1196,7 @@ TEST_P(UInt64MaskThenShift, UsingLoadParam) { " (%s" " (land" " (lload parm=0)" - " (lconst %" PRIu64 "))" + " (lconst %" OMR_PRIu64 "))" " (iconst %d)))))", param.opcode.c_str(), param.mask, @@ -1231,7 +1231,7 @@ TEST_P(Int64MaskThenShift, UsingLoadParam) { " (%s" " (land" " (lload parm=0)" - " (lconst %" PRId64 "))" + " (lconst %" OMR_PRId64 "))" " (iconst %d)))))", param.opcode.c_str(), param.mask, From 9146ec1058f0acfa0fc3432f4844e6ceebb8693e Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Thu, 3 Oct 2019 18:31:43 +0000 Subject: [PATCH 06/12] Make Tril::SimpleCompiler return a function descriptor on AIX On most platforms, function pointers are simply pointers to the first instruction in the function. However, on AIX and z/OS this is not true: they are instead pointers to data structures that themselves contain such a pointer. Support for calling Tril-compiled functions has now been added on AIX by adding the ability for Tril::SimpleCompiler to create such a function descriptor on AIX. Signed-off-by: Ben Thomas --- fvtest/tril/tril/simple_compiler.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fvtest/tril/tril/simple_compiler.cpp b/fvtest/tril/tril/simple_compiler.cpp index 2b0b480b1ee..0fd642aeec7 100644 --- a/fvtest/tril/tril/simple_compiler.cpp +++ b/fvtest/tril/tril/simple_compiler.cpp @@ -33,6 +33,10 @@ #include "ilgen.hpp" #include "ilgen/IlGeneratorMethodDetails_inlines.hpp" +#if defined(AIXPPC) +#include "p/codegen/PPCTableOfConstants.hpp" +#endif + #include int32_t Tril::SimpleCompiler::compile() { @@ -86,6 +90,22 @@ int32_t Tril::SimpleCompiler::compileWithVerifier(TR::IlVerifier* verifier) { fd->environment = 0; fd->func = entry_point; + entry_point = (uint8_t*) fd; +#elif defined(AIXPPC) + struct FunctionDescriptor + { + void* func; + void* toc; + void* environment; + }; + + FunctionDescriptor* fd = new FunctionDescriptor(); + fd->func = entry_point; + // TODO: There should really be a better way to get this. Usually, we would use + // cg->getTOCBase(), but the code generator has already been destroyed by now... + fd->toc = toPPCTableOfConstants(TR_PersistentMemory::getNonThreadSafePersistentInfo()->getPersistentTOC())->getTOCBase(); + fd->environment = NULL; + entry_point = (uint8_t*) fd; #endif setEntryPoint(entry_point); From 5240cd3711a5c649291938c6b8c61be7320ab3fd Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Thu, 3 Oct 2019 18:34:21 +0000 Subject: [PATCH 07/12] Skip Tril tests affected by #3525 on Power BE A number of Tril tests are currently affected by #3525, in which the code generators spill sub-integer arguments to stack slots incorrectly. While this works correctly on little endian machines, it does not work on big endian machines. Previously, such tests were already being skipped on Z, but this issue also affects the Power codegen when run on a big-endian machine. In order to allow Tril tests to be run on AIX, such tests are now skipped when run on Power BE. Signed-off-by: Ben Thomas --- fvtest/compilertriltest/ArithmeticTest.cpp | 10 ++++-- fvtest/compilertriltest/BitPermuteTest.cpp | 12 +++++++ .../compilertriltest/ShiftAndRotateTest.cpp | 32 +++++++++++++++++++ fvtest/compilertriltest/TernaryTest.cpp | 2 ++ .../compilertriltest/TypeConversionTest.cpp | 16 ++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) diff --git a/fvtest/compilertriltest/ArithmeticTest.cpp b/fvtest/compilertriltest/ArithmeticTest.cpp index 4d23da1ed43..77e6d6034e6 100644 --- a/fvtest/compilertriltest/ArithmeticTest.cpp +++ b/fvtest/compilertriltest/ArithmeticTest.cpp @@ -320,6 +320,8 @@ TEST_P(Int16Arithmetic, UsingConst) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; SKIP_IF(OMRPORT_ARCH_X86 == arch || OMRPORT_ARCH_HAMMER == arch, MissingImplementation) << "smul/sdiv not yet implemented on x86 (see Issue #4408)"; @@ -356,6 +358,8 @@ TEST_P(Int16Arithmetic, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; SKIP_IF(OMRPORT_ARCH_X86 == arch || OMRPORT_ARCH_HAMMER == arch, MissingImplementation) << "smul/sdiv not yet implemented on x86 (see Issue #4408)"; @@ -388,6 +392,8 @@ TEST_P(Int8Arithmetic, UsingConst) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; SKIP_IF(OMRPORT_ARCH_X86 == arch || OMRPORT_ARCH_HAMMER == arch, MissingImplementation) << "bmul/bdiv not yet implemented on x86 (see Issue #4408)"; @@ -424,10 +430,10 @@ TEST_P(Int8Arithmetic, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; - + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; SKIP_IF(OMRPORT_ARCH_X86 == arch || OMRPORT_ARCH_HAMMER == arch, MissingImplementation) << "bmul/bdiv not yet implemented on x86 (see Issue #4408)"; - auto param = TRTest::to_struct(GetParam()); char inputTrees[1024] = {0}; diff --git a/fvtest/compilertriltest/BitPermuteTest.cpp b/fvtest/compilertriltest/BitPermuteTest.cpp index d074683bd9a..4fbb11855b8 100644 --- a/fvtest/compilertriltest/BitPermuteTest.cpp +++ b/fvtest/compilertriltest/BitPermuteTest.cpp @@ -343,6 +343,8 @@ TEST_P(sBitPermuteTest, ConstAddressLengthTest) std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); uint8_t maskedIndices[16]; @@ -383,6 +385,8 @@ TEST_P(sBitPermuteTest, ConstAddressTest) std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); uint8_t maskedIndices[16]; @@ -422,6 +426,8 @@ TEST_P(sBitPermuteTest, NoConstTest) std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); uint8_t maskedIndices[16]; @@ -462,6 +468,8 @@ TEST_P(bBitPermuteTest, ConstAddressLengthTest) std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); uint8_t maskedIndices[8]; @@ -502,6 +510,8 @@ TEST_P(bBitPermuteTest, ConstAddressTest) std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); uint8_t maskedIndices[8]; @@ -541,6 +551,8 @@ TEST_P(bBitPermuteTest, NoConstTest) std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); uint8_t maskedIndices[8]; diff --git a/fvtest/compilertriltest/ShiftAndRotateTest.cpp b/fvtest/compilertriltest/ShiftAndRotateTest.cpp index 09926be40a4..50b24ee26b5 100644 --- a/fvtest/compilertriltest/ShiftAndRotateTest.cpp +++ b/fvtest/compilertriltest/ShiftAndRotateTest.cpp @@ -339,6 +339,8 @@ TEST_P(Int8ShiftAndRotate, UsingRhsConst) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -369,6 +371,8 @@ TEST_P(Int8ShiftAndRotate, UsingLhsConst) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -399,6 +403,8 @@ TEST_P(Int8ShiftAndRotate, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -463,6 +469,8 @@ TEST_P(Int16ShiftAndRotate, UsingRhsConst) { SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -493,6 +501,8 @@ TEST_P(Int16ShiftAndRotate, UsingLhsConst) { SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -523,6 +533,8 @@ TEST_P(Int16ShiftAndRotate, UsingLoadParam) { SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -801,6 +813,8 @@ TEST_P(UInt8ShiftAndRotate, UsingRhsConst) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -831,6 +845,8 @@ TEST_P(UInt8ShiftAndRotate, UsingLhsConst) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -859,6 +875,8 @@ TEST_P(UInt8ShiftAndRotate, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -924,6 +942,8 @@ TEST_P(UInt16ShiftAndRotate, UsingRhsConst) { SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -954,6 +974,8 @@ TEST_P(UInt16ShiftAndRotate, UsingLhsConst) { SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -982,6 +1004,8 @@ TEST_P(UInt16ShiftAndRotate, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -1333,6 +1357,8 @@ TEST_P(UInt16MaskThenShift, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -1373,6 +1399,8 @@ TEST_P(Int16MaskThenShift, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -1413,6 +1441,8 @@ TEST_P(UInt8MaskThenShift, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), @@ -1453,6 +1483,8 @@ TEST_P(Int8MaskThenShift, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; char inputTrees[300] = {0}; std::snprintf(inputTrees, sizeof(inputTrees), diff --git a/fvtest/compilertriltest/TernaryTest.cpp b/fvtest/compilertriltest/TernaryTest.cpp index 1cddc1fe4b2..8a870f4fa2f 100644 --- a/fvtest/compilertriltest/TernaryTest.cpp +++ b/fvtest/compilertriltest/TernaryTest.cpp @@ -417,6 +417,8 @@ TEST_P(ShortTernaryDoubleCompareTest, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, MissingImplementation) << "The Z code generator implementation is missing currently (see issue #3796)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = to_struct(GetParam()); diff --git a/fvtest/compilertriltest/TypeConversionTest.cpp b/fvtest/compilertriltest/TypeConversionTest.cpp index 06314af2145..2a37474e9b3 100644 --- a/fvtest/compilertriltest/TypeConversionTest.cpp +++ b/fvtest/compilertriltest/TypeConversionTest.cpp @@ -103,6 +103,8 @@ TEST_P(Int8ToInt32, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -163,6 +165,8 @@ TEST_P(UInt8ToInt32, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -223,6 +227,8 @@ TEST_P(Int8ToInt64, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -283,6 +289,8 @@ TEST_P(UInt8ToInt64, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -343,6 +351,8 @@ TEST_P(Int16ToInt32, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -403,6 +413,8 @@ TEST_P(UInt16ToInt32, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -463,6 +475,8 @@ TEST_P(Int16ToInt64, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); @@ -523,6 +537,8 @@ TEST_P(UInt16ToInt64, UsingLoadParam) { std::string arch = omrsysinfo_get_CPU_architecture(); SKIP_IF(OMRPORT_ARCH_S390 == arch || OMRPORT_ARCH_S390X == arch, KnownBug) << "The Z code generator incorrectly spills sub-integer types arguments (see issue #3525)"; + SKIP_IF(OMRPORT_ARCH_PPC64 == arch || OMRPORT_ARCH_PPC == arch, KnownBug) + << "The Power code generator incorrectly spills sub-integer type arguments on big-endian machines (see issue #3525)"; auto param = TRTest::to_struct(GetParam()); From 7e7a800758f8a4b470cbb3dd59586b99507d5eb9 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Fri, 4 Oct 2019 05:12:14 +0000 Subject: [PATCH 08/12] Fix tril_compiler and tril_dumper failing to link on AIX Due to failing to link against libpthread, neither the tril_compiler nor tril_dumper executables would link correctly on AIX. This has been corrected by forcing the tril library itself to link against libpthread, which in turn forces tril_compiler and tril_dumper to link against it as well. Signed-off-by: Ben Thomas --- fvtest/tril/tril/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fvtest/tril/tril/CMakeLists.txt b/fvtest/tril/tril/CMakeLists.txt index cb35fb78f2e..87c1db5504c 100644 --- a/fvtest/tril/tril/CMakeLists.txt +++ b/fvtest/tril/tril/CMakeLists.txt @@ -61,6 +61,14 @@ target_link_libraries(tril PUBLIC ${CMAKE_DL_LIBS} ) +#TODO system thread library should be linked in a more generic way. +if(NOT OMR_HOST_OS STREQUAL "win") + if(NOT OMR_HOST_OS STREQUAL "zos") + target_link_libraries(tril PUBLIC pthread) + endif() +endif() + + add_executable(tril_dumper compiler.cpp) target_link_libraries(tril_dumper tril) From 24bad33231939adcc7ae6b48229f53fc8a77760b Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Fri, 4 Oct 2019 05:15:13 +0000 Subject: [PATCH 09/12] Add hacks for running JitBuilder on AIX Previously, JitBuilder did not work properly on AIX due to similar problems to what Tril was previously facing. Since enabling Tril tests also enables JitBuilder tests, it is necessary to ensure that JitBuilder works at least minimally on AIX before Tril tests can be run in pull request builds for AIX. Signed-off-by: Ben Thomas --- jitbuilder/control/Jit.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/jitbuilder/control/Jit.cpp b/jitbuilder/control/Jit.cpp index 85bd676eb83..a86c135cad5 100644 --- a/jitbuilder/control/Jit.cpp +++ b/jitbuilder/control/Jit.cpp @@ -36,6 +36,10 @@ #include "runtime/Runtime.hpp" #include "runtime/JBJitConfig.hpp" +#if defined(AIXPPC) +#include "p/codegen/PPCTableOfConstants.hpp" +#endif + extern TR_RuntimeHelperTable runtimeHelpers; extern void setupCodeCacheParameters(int32_t *, OMR::CodeCacheCodeGenCallbacks *callBacks, int32_t *numHelpers, int32_t *CCPreLoadedCodeSize); @@ -197,6 +201,22 @@ internal_compileMethodBuilder(TR::MethodBuilder *m, void **entry) fd->func = *entry; *entry = (void*) fd; +#elif defined(AIXPPC) + struct FunctionDescriptor + { + void* func; + void* toc; + void* environment; + }; + + FunctionDescriptor* fd = new FunctionDescriptor(); + fd->func = *entry; + // TODO: There should really be a better way to get this. Usually, we would use + // cg->getTOCBase(), but the code generator has already been destroyed by now... + fd->toc = toPPCTableOfConstants(TR_PersistentMemory::getNonThreadSafePersistentInfo()->getPersistentTOC())->getTOCBase(); + fd->environment = NULL; + + *entry = (uint8_t*) fd; #endif return rc; From f81669079bc16abbb75e6f43c54fcdc60cb9de37 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Fri, 4 Oct 2019 05:29:20 +0000 Subject: [PATCH 10/12] Disable Tril's IlGenTest on AIX The IlGenTest from Tril's internal tests is currently broken on AIX, since it is not valid on AIX to use the return value of compileMethodFromDetails as a function pointer. Until such a time as this test is fixed, it has been temporarily disabled on AIX. Signed-off-by: Ben Thomas --- fvtest/tril/test/IlGenTest.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fvtest/tril/test/IlGenTest.cpp b/fvtest/tril/test/IlGenTest.cpp index f4992ef8bd0..000d68b0c7d 100644 --- a/fvtest/tril/test/IlGenTest.cpp +++ b/fvtest/tril/test/IlGenTest.cpp @@ -40,6 +40,9 @@ class IlGenTest : public Tril::Test::JitTest {}; +// This test is currently broken on AIX, since it is not valid to use the return value of +// compileMethodFromDetails as a function pointer. +#if !defined(AIXPPC) TEST_F(IlGenTest, Return3) { auto trees = parseString("(block (ireturn (iconst 3)))"); @@ -59,3 +62,4 @@ TEST_F(IlGenTest, Return3) { auto entry = reinterpret_cast(entry_point); ASSERT_EQ(3, entry()) << "Compiled body did not return expected value"; } +#endif From c29da09d9ac2fbb2898f474b0d36f56fd1aca4b9 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Fri, 4 Oct 2019 06:05:48 +0000 Subject: [PATCH 11/12] Disable test compiler tests on AIX The test compiler tests make the assumption that function pointers can simply be called using the regular call opcodes in the IL. This is not true on AIX, since function pointers do not actually point to the address of the first instruction of the function on AIX. As a result, the test compiler tests will always segfault when run on AIX. However, since the test compiler tests are effectively deprecated and were never previously run on AIX in the first place, this is not considered to be something worth fixing. Thus, the test compiler tests will no longer be run on AIX when using ctest. Signed-off-by: Ben Thomas --- fvtest/compilertest/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fvtest/compilertest/CMakeLists.txt b/fvtest/compilertest/CMakeLists.txt index 8fbdd361c4a..493a86dbd8d 100644 --- a/fvtest/compilertest/CMakeLists.txt +++ b/fvtest/compilertest/CMakeLists.txt @@ -122,4 +122,6 @@ target_link_libraries(compilertest set_property(TARGET compilertest PROPERTY FOLDER fvtest) -add_test(NAME CompilerTest COMMAND compilertest --gtest_output=xml:${CMAKE_CURRENT_BINARY_DIR}/compilertest-results.xml) +if (NOT OMR_HOST_OS STREQUAL "aix") + add_test(NAME CompilerTest COMMAND compilertest --gtest_output=xml:${CMAKE_CURRENT_BINARY_DIR}/compilertest-results.xml) +endif() From 3a9a956a8b6c6eabc0b374779ae10e9ad362c7e6 Mon Sep 17 00:00:00 2001 From: "Benjamin Thomas (Aviansie Ben)" Date: Fri, 4 Oct 2019 06:14:34 +0000 Subject: [PATCH 12/12] Enable the JIT for AIX CI jobs Previously, the AIX pull request and build CI jobs explicitly disabled the JIT and all related components. However, recent work has now made it possible to compile the OMR JIT and run JitBuilder and Tril tests on AIX. Since this now works correctly, the JIT is no longer disabled in the AIX CI jobs. Signed-off-by: Ben Thomas --- buildenv/jenkins/jobs/builds/Build-aix_ppc-64 | 2 +- buildenv/jenkins/jobs/pull-requests/PullRequest-aix_ppc-64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/buildenv/jenkins/jobs/builds/Build-aix_ppc-64 b/buildenv/jenkins/jobs/builds/Build-aix_ppc-64 index aa121d50eff..6d98d2be20c 100644 --- a/buildenv/jenkins/jobs/builds/Build-aix_ppc-64 +++ b/buildenv/jenkins/jobs/builds/Build-aix_ppc-64 @@ -36,7 +36,7 @@ pipeline { dir('build') { echo 'Configure...' - sh '''cmake -Wdev -DCMAKE_XL_CreateExportList="/usr/vac/bin/CreateExportList -X64" -DOMR_JIT=OFF -DOMR_JITBUILDER=OFF -DOMR_TEST_COMPILER=OFF -DOMR_DDR=OFF -C../cmake/caches/Travis.cmake ..''' + sh '''cmake -Wdev -DCMAKE_XL_CreateExportList="/usr/vac/bin/CreateExportList -X64" -DOMR_DDR=OFF -C../cmake/caches/Travis.cmake ..''' echo 'Compile...' sh '''make -j8''' diff --git a/buildenv/jenkins/jobs/pull-requests/PullRequest-aix_ppc-64 b/buildenv/jenkins/jobs/pull-requests/PullRequest-aix_ppc-64 index 588aa088e24..377e677f146 100644 --- a/buildenv/jenkins/jobs/pull-requests/PullRequest-aix_ppc-64 +++ b/buildenv/jenkins/jobs/pull-requests/PullRequest-aix_ppc-64 @@ -22,7 +22,7 @@ pipeline { dir('build') { echo 'Configure...' - sh '''cmake -Wdev -DCMAKE_XL_CreateExportList="/usr/vac/bin/CreateExportList -X64" -DOMR_JIT=OFF -DOMR_JITBUILDER=OFF -DOMR_TEST_COMPILER=OFF -DOMR_DDR=OFF -C../cmake/caches/Travis.cmake ..''' + sh '''cmake -Wdev -DCMAKE_XL_CreateExportList="/usr/vac/bin/CreateExportList -X64" -DOMR_DDR=OFF -C../cmake/caches/Travis.cmake ..''' echo 'Compile...' sh '''make -j4'''