[libomptarget] Build plugins-nextgen for SystemZ (#83978)
The plugin was not getting built as the build_generic_elf64 macro assumes the LLVM triple processor name matches the CMake processor name, which is unfortunately not the case for SystemZ. Fix this by providing two separate arguments instead. Actually building the plugin exposed a number of other issues causing various test failures. Specifically, I've had to add the SystemZ target to - CompilerInvocation::ParseLangArgs - linkDevice in ClangLinuxWrapper.cpp - OMPContext::OMPContext (to set the device_kind_cpu trait) - LIBOMPTARGET_ALL_TARGETS in libomptarget/CMakeLists.txt - a check_plugin_target call in libomptarget/src/CMakeLists.txt Finally, I've had to set a number of test cases to UNSUPPORTED on s390x-ibm-linux-gnu; all these tests were already marked as UNSUPPORTED for x86_64-pc-linux-gnu and aarch64-unknown-linux-gnu and are failing on s390x for what seem to be the same reason. In addition, this also requires support for BE ELF files in plugins-nextgen: https://github.com/llvm/llvm-project/pull/83976
This commit is contained in:
@@ -4012,6 +4012,7 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
|
||||
|
||||
if (TT.getArch() == llvm::Triple::UnknownArch ||
|
||||
!(TT.getArch() == llvm::Triple::aarch64 || TT.isPPC() ||
|
||||
TT.getArch() == llvm::Triple::systemz ||
|
||||
TT.getArch() == llvm::Triple::nvptx ||
|
||||
TT.getArch() == llvm::Triple::nvptx64 ||
|
||||
TT.getArch() == llvm::Triple::amdgcn ||
|
||||
|
||||
@@ -552,6 +552,7 @@ Expected<StringRef> linkDevice(ArrayRef<StringRef> InputFiles,
|
||||
case Triple::aarch64_be:
|
||||
case Triple::ppc64:
|
||||
case Triple::ppc64le:
|
||||
case Triple::systemz:
|
||||
return generic::clang(InputFiles, Args);
|
||||
default:
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
|
||||
@@ -44,6 +44,7 @@ OMPContext::OMPContext(bool IsDeviceCompilation, Triple TargetTriple) {
|
||||
case Triple::ppcle:
|
||||
case Triple::ppc64:
|
||||
case Triple::ppc64le:
|
||||
case Triple::systemz:
|
||||
case Triple::x86:
|
||||
case Triple::x86_64:
|
||||
ActiveTraits.set(unsigned(TraitProperty::device_kind_cpu));
|
||||
|
||||
@@ -56,6 +56,8 @@ set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} x86_64-pc-linux-gnu-L
|
||||
set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} nvptx64-nvidia-cuda")
|
||||
set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} nvptx64-nvidia-cuda-LTO")
|
||||
set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} nvptx64-nvidia-cuda-JIT-LTO")
|
||||
set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} s390x-ibm-linux-gnu")
|
||||
set (LIBOMPTARGET_ALL_TARGETS "${LIBOMPTARGET_ALL_TARGETS} s390x-ibm-linux-gnu-LTO")
|
||||
|
||||
# Once the plugins for the different targets are validated, they will be added to
|
||||
# the list of supported targets in the current system.
|
||||
|
||||
@@ -12,12 +12,15 @@
|
||||
|
||||
add_subdirectory(common)
|
||||
|
||||
# void build_generic_elf64(string tmachine, string tmachine_name, string tmachine_libname, string elf_machine_id);
|
||||
# void build_generic_elf64(string tmachine, string tmachine_name, string tmachine_libname,
|
||||
# string tmachine_llvm, string tmachine_triple, string elf_machine_id);
|
||||
# - build a plugin for an ELF based generic 64-bit target based on libffi.
|
||||
# - tmachine: name of the machine processor as used in the cmake build system.
|
||||
# - tmachine_name: name of the machine to be printed with the debug messages.
|
||||
# - tmachine_libname: machine name to be appended to the plugin library name.
|
||||
macro(build_generic_elf64 tmachine tmachine_name tmachine_libname tmachine_triple elf_machine_id)
|
||||
# - tmachine_llvm: LLVM triple for the processor
|
||||
# - tmachine_triple: GNU target triple
|
||||
macro(build_generic_elf64 tmachine tmachine_name tmachine_libname tmachine_llvm tmachine_triple elf_machine_id)
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$")
|
||||
# Define macro to be used as prefix of the runtime messages for this target.
|
||||
add_definitions("-DTARGET_NAME=${tmachine_name}")
|
||||
@@ -30,7 +33,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$")
|
||||
add_definitions("-DTARGET_ELF_ID=${elf_machine_id}")
|
||||
|
||||
# Define target triple
|
||||
add_definitions("-DLIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE=${tmachine}")
|
||||
add_definitions("-DLIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE=${tmachine_llvm}")
|
||||
|
||||
add_llvm_library("omptarget.rtl.${tmachine_libname}"
|
||||
SHARED
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
build_generic_elf64("aarch64" "aarch64" "aarch64" "aarch64-unknown-linux-gnu" "183")
|
||||
build_generic_elf64("aarch64" "aarch64" "aarch64" "aarch64" "aarch64-unknown-linux-gnu" "183")
|
||||
else()
|
||||
libomptarget_say("Not building aarch64 NextGen offloading plugin: machine not found in the system.")
|
||||
endif()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
build_generic_elf64("ppc64" "PPC64" "ppc64" "powerpc64-ibm-linux-gnu" "21")
|
||||
build_generic_elf64("ppc64" "PPC64" "ppc64" "ppc64" "powerpc64-ibm-linux-gnu" "21")
|
||||
else()
|
||||
libomptarget_say("Not building ppc64 NextGen offloading plugin: machine not found in the system.")
|
||||
endif()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
build_generic_elf64("ppc64le" "PPC64le" "ppc64" "powerpc64le-ibm-linux-gnu" "21")
|
||||
build_generic_elf64("ppc64le" "PPC64le" "ppc64" "ppc64le" "powerpc64le-ibm-linux-gnu" "21")
|
||||
else()
|
||||
libomptarget_say("Not building ppc64le NextGen offloading plugin: machine not found in the system.")
|
||||
endif()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
build_generic_elf64("SystemZ" "S390X" "s390x" "s390x-ibm-linux-gnu" "22")
|
||||
build_generic_elf64("s390x" "S390X" "s390x" "systemz" "s390x-ibm-linux-gnu" "22")
|
||||
else()
|
||||
libomptarget_say("Not building s390x NextGen offloading plugin: machine not found in the system.")
|
||||
endif()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
build_generic_elf64("x86_64" "x86_64" "x86_64" "x86_64-pc-linux-gnu" "62")
|
||||
build_generic_elf64("x86_64" "x86_64" "x86_64" "x86_64" "x86_64-pc-linux-gnu" "62")
|
||||
else()
|
||||
libomptarget_say("Not building x86_64 NextGen offloading plugin: machine not found in the system.")
|
||||
endif()
|
||||
|
||||
@@ -73,6 +73,7 @@ if (NOT LIBOMPTARGET_PLUGINS_TO_LOAD)
|
||||
check_plugin_target(cuda)
|
||||
check_plugin_target(aarch64)
|
||||
check_plugin_target(amdgpu)
|
||||
check_plugin_target(s390x)
|
||||
endif()
|
||||
|
||||
list(TRANSFORM LIBOMPTARGET_PLUGINS_TO_LOAD PREPEND "\"libomptarget.rtl.")
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -32,5 +32,7 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include "empty_kernel.inc"
|
||||
|
||||
@@ -92,5 +92,7 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include "empty_kernel.inc"
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
// Ensure that there is only the kernel function left, not any outlined
|
||||
// parallel regions.
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
// REQUIRES: unified_shared_memory
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
// REQUIRES: unified_shared_memory
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
// UNSUPPORTED: amdgcn-amd-amdhsa
|
||||
// UNSUPPORTED: nvptx64-nvidia-cuda
|
||||
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
__attribute__((optnone)) int optnone() { return 1; }
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
// RUN: %libomptarget-compile-generic
|
||||
// RUN: env LIBOMPTARGET_INFO=63 %libomptarget-run-generic 2>&1 | %fcheck-generic
|
||||
// RUN: env LIBOMPTARGET_INFO=63 %libomptarget-run-generic 2>&1 | \
|
||||
// RUN: %fcheck-generic
|
||||
//
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <assert.h>
|
||||
#include <ompx.h>
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <omp.h>
|
||||
#include <ompx.h>
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <math.h>
|
||||
#include <omp.h>
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#define N 128
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
constexpr const int block_size = 256;
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
// UNSUPPORTED: amdgcn-amd-amdhsa
|
||||
|
||||
#include <omp.h>
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
int main() {
|
||||
int n = 1 << 20;
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Verify that for the target OpenMP APIs, the return address is non-null and
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Verify all three data transfer directions: H2D, D2D and D2H
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Example OpenMP program that registers non-EMI callbacks
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Example OpenMP program that registers EMI callbacks.
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Example OpenMP program that shows that both EMI and non-EMI
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Example OpenMP program that registers EMI callbacks
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Example OpenMP program that shows that map-EMI callbacks are not supported.
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu
|
||||
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu
|
||||
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
|
||||
|
||||
/*
|
||||
* Example OpenMP program that shows that map callbacks are not supported.
|
||||
|
||||
Reference in New Issue
Block a user