Author: Dominik Adamski Date: 2024-07-29T11:21:40+02:00 New Revision: d86311f293ebc3867733d4453e0d6c929e620d8b
URL: https://github.com/llvm/llvm-project/commit/d86311f293ebc3867733d4453e0d6c929e620d8b DIFF: https://github.com/llvm/llvm-project/commit/d86311f293ebc3867733d4453e0d6c929e620d8b.diff LOG: [Flang-new][OpenMP] Add bitcode files for AMD GPU OpenMP (#96742) Flang-new needs to add `mlink-builtin-bitcode` objects to properly support offload code generation for AMD GPUs (for example, math functions). Both Flang-new and Clang rely on `mlink-builtin-bitcode` flags. These flags are added by the `AMDGPUOpenMPToolchain::addClangTargetOptions` function. Now, both compilers reuse the same function. Flang-new tests for AMDGPU were updated by adding the `-nogpulib` flag. This flag allows running AMDGPU tests on machines without the ROCm stack. Added: Modified: clang/lib/Driver/ToolChains/Flang.cpp flang/test/Driver/omp-driver-offload.f90 flang/test/Driver/target-cpu-features.f90 flang/test/Driver/target-gpu-features.f90 Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index c4f2375c64034..f5de5eb23e4be 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,9 @@ void Flang::AddAMDGPUTargetArgs(const ArgList &Args, StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + const ToolChain &TC = getToolChain(); + TC.addClangTargetOptions(Args, CmdArgs, Action::OffloadKind::OFK_OpenMP); } void Flang::addTargetOptions(const ArgList &Args, diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index c7cc3bffb43b5..f8876c96d76c9 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -14,12 +14,12 @@ ! Test regular -fopenmp with offload, and invocation filtering options ! RUN: %flang -S -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a --offload-arch=sm_70 \ -! RUN: --target=aarch64-unknown-linux-gnu \ +! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\ ! RUN: | FileCheck %s --check-prefix=OFFLOAD-HOST-AND-DEVICE ! RUN: %flang -S -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a --offload-arch=sm_70 --offload-host-device \ -! RUN: --target=aarch64-unknown-linux-gnu \ +! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\ ! RUN: | FileCheck %s --check-prefix=OFFLOAD-HOST-AND-DEVICE ! OFFLOAD-HOST-AND-DEVICE: "{{[^"]*}}flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" @@ -29,7 +29,7 @@ ! RUN: %flang -S -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a --offload-arch=sm_70 --offload-host-only \ -! RUN: --target=aarch64-unknown-linux-gnu \ +! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\ ! RUN: | FileCheck %s --check-prefix=OFFLOAD-HOST ! OFFLOAD-HOST: "{{[^"]*}}flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" @@ -39,7 +39,7 @@ ! RUN: %flang -S -### %s 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a --offload-arch=sm_70 --offload-device-only \ -! RUN: --target=aarch64-unknown-linux-gnu \ +! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\ ! RUN: | FileCheck %s --check-prefix=OFFLOAD-DEVICE ! OFFLOAD-DEVICE: "{{[^"]*}}flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" @@ -48,13 +48,13 @@ ! OFFLOAD-DEVICE-NOT: "{{[^"]*}}flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" ! Test regular -fopenmp with offload for basic fopenmp-is-target-device flag addition and correct fopenmp -! RUN: %flang -### -fopenmp --offload-arch=gfx90a -fopenmp-targets=amdgcn-amd-amdhsa %s 2>&1 | FileCheck --check-prefixes=CHECK-OPENMP-IS-TARGET-DEVICE %s +! RUN: %flang -### -fopenmp --offload-arch=gfx90a -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib %s 2>&1 | FileCheck --check-prefixes=CHECK-OPENMP-IS-TARGET-DEVICE %s ! CHECK-OPENMP-IS-TARGET-DEVICE: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" {{.*}}.f90" ! Testing appropriate flags are gnerated and appropriately assigned by the driver when offloading ! RUN: %flang -S -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ -! RUN: --target=aarch64-unknown-linux-gnu \ +! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\ ! RUN: | FileCheck %s --check-prefix=OPENMP-OFFLOAD-ARGS ! OPENMP-OFFLOAD-ARGS: "{{[^"]*}}flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" {{.*}} "-fopenmp" {{.*}}.f90" ! OPENMP-OFFLOAD-ARGS-NEXT: "{{[^"]*}}flang-new" "-fc1" "-triple" "amdgcn-amd-amdhsa" @@ -70,19 +70,19 @@ ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-assume-threads-oversubscription \ +! RUN: -fopenmp-assume-threads-oversubscription -nogpulib \ ! RUN: | FileCheck %s --check-prefixes=CHECK-THREADS-OVS ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ ! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \ -! RUN: -fopenmp-assume-threads-oversubscription \ +! RUN: -fopenmp-assume-threads-oversubscription \ ! RUN: | FileCheck %s --check-prefixes=CHECK-THREADS-OVS ! CHECK-THREADS-OVS: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-assume-threads-oversubscription" {{.*}}.f90" ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-assume-teams-oversubscription \ +! RUN: -fopenmp-assume-teams-oversubscription -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-TEAMS-OVS ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -94,7 +94,7 @@ ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-assume-no-nested-parallelism \ +! RUN: -fopenmp-assume-no-nested-parallelism -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-NEST-PAR ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -106,7 +106,7 @@ ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-assume-no-thread-state \ +! RUN: -fopenmp-assume-no-thread-state -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-THREAD-STATE ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -118,7 +118,7 @@ ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-target-debug \ +! RUN: -fopenmp-target-debug -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-TARGET-DEBUG ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -130,7 +130,7 @@ ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-target-debug \ +! RUN: -fopenmp-target-debug -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-TARGET-DEBUG ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -144,7 +144,7 @@ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ ! RUN: -fopenmp-target-debug -fopenmp-assume-threads-oversubscription \ ! RUN: -fopenmp-assume-teams-oversubscription -fopenmp-assume-no-nested-parallelism \ -! RUN: -fopenmp-assume-no-thread-state \ +! RUN: -fopenmp-assume-no-thread-state -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-RTL-ALL ! RUN: %flang -S -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -160,7 +160,7 @@ ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=gfx90a \ ! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \ -! RUN: -fopenmp-version=45 \ +! RUN: -fopenmp-version=45 -nogpulib\ ! RUN: | FileCheck %s --check-prefixes=CHECK-OPENMP-VERSION ! RUN: %flang -### %s -o %t 2>&1 \ ! RUN: -fopenmp --offload-arch=sm_70 \ @@ -193,10 +193,17 @@ ! Test -fopenmp-force-usm option with offload ! RUN: %flang -S -### %s -o %t 2>&1 \ ! RUN: -fopenmp -fopenmp-force-usm --offload-arch=gfx90a \ -! RUN: --target=aarch64-unknown-linux-gnu \ +! RUN: --target=aarch64-unknown-linux-gnu -nogpulib\ ! RUN: | FileCheck %s --check-prefix=FORCE-USM-OFFLOAD ! FORCE-USM-OFFLOAD: "{{[^"]*}}flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" ! FORCE-USM-OFFLOAD-SAME: "-fopenmp" "-fopenmp-force-usm" ! FORCE-USM-OFFLOAD-NEXT: "{{[^"]*}}flang-new" "-fc1" "-triple" "amdgcn-amd-amdhsa" ! FORCE-USM-OFFLOAD-SAME: "-fopenmp" "-fopenmp-force-usm" + +! RUN: %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%S/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=MLINK-BUILTIN-BITCODE %s +! MLINK-BUILTIN-BITCODE: "{{[^"]*}}flang-new" "-fc1" "-triple" "amdgcn-amd-amdhsa" +! MLINK-BUILTIN-BITCODE-SAME: "-mlink-builtin-bitcode" {{.*Inputs.*rocm.*amdgcn.*bitcode.*}}oclc_isa_version_900.bc diff --git a/flang/test/Driver/target-cpu-features.f90 b/flang/test/Driver/target-cpu-features.f90 index 0f19e4ebff2a0..1c77d4ace5fbc 100644 --- a/flang/test/Driver/target-cpu-features.f90 +++ b/flang/test/Driver/target-cpu-features.f90 @@ -29,10 +29,10 @@ ! RUN: %flang --target=riscv64-linux-gnu -c %s -### 2>&1 \ ! RUN: | FileCheck %s -check-prefix=CHECK-RV64 -! RUN: %flang --target=amdgcn-amd-amdhsa -mcpu=gfx908 -c %s -### 2>&1 \ +! RUN: %flang --target=amdgcn-amd-amdhsa -mcpu=gfx908 -nogpulib -c %s -### 2>&1 \ ! RUN: | FileCheck %s -check-prefix=CHECK-AMDGPU -! RUN: %flang --target=r600-unknown-unknown -mcpu=cayman -c %s -### 2>&1 \ +! RUN: %flang --target=r600-unknown-unknown -mcpu=cayman -nogpulib -c %s -### 2>&1 \ ! RUN: | FileCheck %s -check-prefix=CHECK-AMDGPU-R600 ! CHECK-A57: "-fc1" "-triple" "aarch64-unknown-linux-gnu" diff --git a/flang/test/Driver/target-gpu-features.f90 b/flang/test/Driver/target-gpu-features.f90 index 9cc9ce4baaf4d..b783574370a0f 100644 --- a/flang/test/Driver/target-gpu-features.f90 +++ b/flang/test/Driver/target-gpu-features.f90 @@ -3,7 +3,7 @@ ! Test that -mcpu are used and that the -target-cpu and -target-features ! are also added to the fc1 command. -! RUN: %flang --target=amdgcn-amd-amdhsa -mcpu=gfx902 -c %s -### 2>&1 \ +! RUN: %flang --target=amdgcn-amd-amdhsa -mcpu=gfx902 -nogpulib -c %s -### 2>&1 \ ! RUN: | FileCheck %s -check-prefix=CHECK-AMDGCN ! CHECK-AMDGCN: "-fc1" "-triple" "amdgcn-amd-amdhsa" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits