Skip to content

Commit be9fa9d

Browse files
authored
[flang][NVPTX] Add initial support to the NVPTX target (#71992)
This patch adds initial support to the NVPTX target, enabling `flang` to produce OpenMP offload code for NVPTX targets.
1 parent 009002a commit be9fa9d

15 files changed

+134
-18
lines changed

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,45 @@ getExplicitAndImplicitAMDGPUTargetFeatures(CompilerInstance &ci,
175175
return llvm::join(featuresVec, ",");
176176
}
177177

178+
// Get feature string which represents combined explicit target features
179+
// for NVPTX and the target features specified by the user/
180+
// TODO: Have a more robust target conf like `clang/lib/Basic/Targets/NVPTX.cpp`
181+
static std::string
182+
getExplicitAndImplicitNVPTXTargetFeatures(CompilerInstance &ci,
183+
const TargetOptions &targetOpts,
184+
const llvm::Triple triple) {
185+
llvm::StringRef cpu = targetOpts.cpu;
186+
llvm::StringMap<bool> implicitFeaturesMap;
187+
std::string errorMsg;
188+
bool ptxVer = false;
189+
190+
// Add target features specified by the user
191+
for (auto &userFeature : targetOpts.featuresAsWritten) {
192+
llvm::StringRef userKeyString(llvm::StringRef(userFeature).drop_front(1));
193+
implicitFeaturesMap[userKeyString.str()] = (userFeature[0] == '+');
194+
// Check if the user provided a PTX version
195+
if (userKeyString.startswith("ptx"))
196+
ptxVer = true;
197+
}
198+
199+
// Set the default PTX version to `ptx61` if none was provided.
200+
// TODO: set the default PTX version based on the chip.
201+
if (!ptxVer)
202+
implicitFeaturesMap["ptx61"] = true;
203+
204+
// Set the compute capability.
205+
implicitFeaturesMap[cpu.str()] = true;
206+
207+
llvm::SmallVector<std::string> featuresVec;
208+
for (auto &implicitFeatureItem : implicitFeaturesMap) {
209+
featuresVec.push_back((llvm::Twine(implicitFeatureItem.second ? "+" : "-") +
210+
implicitFeatureItem.first().str())
211+
.str());
212+
}
213+
llvm::sort(featuresVec);
214+
return llvm::join(featuresVec, ",");
215+
}
216+
178217
// Produces the string which represents target feature
179218
static std::string getTargetFeatures(CompilerInstance &ci) {
180219
const TargetOptions &targetOpts = ci.getInvocation().getTargetOpts();
@@ -188,6 +227,8 @@ static std::string getTargetFeatures(CompilerInstance &ci) {
188227
// them to the target features specified by the user
189228
if (triple.isAMDGPU()) {
190229
return getExplicitAndImplicitAMDGPUTargetFeatures(ci, targetOpts, triple);
230+
} else if (triple.isNVPTX()) {
231+
return getExplicitAndImplicitNVPTXTargetFeatures(ci, targetOpts, triple);
191232
}
192233
return llvm::join(targetOpts.featuresAsWritten.begin(),
193234
targetOpts.featuresAsWritten.end(), ",");

flang/lib/Optimizer/CodeGen/Target.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,33 @@ struct TargetAMDGPU : public GenericTarget<TargetAMDGPU> {
621621
};
622622
} // namespace
623623

624+
//===----------------------------------------------------------------------===//
625+
// NVPTX linux target specifics.
626+
//===----------------------------------------------------------------------===//
627+
628+
namespace {
629+
struct TargetNVPTX : public GenericTarget<TargetNVPTX> {
630+
using GenericTarget::GenericTarget;
631+
632+
// Default size (in bits) of the index type for strings.
633+
static constexpr int defaultWidth = 64;
634+
635+
CodeGenSpecifics::Marshalling
636+
complexArgumentType(mlir::Location loc, mlir::Type eleTy) const override {
637+
CodeGenSpecifics::Marshalling marshal;
638+
TODO(loc, "handle complex argument types");
639+
return marshal;
640+
}
641+
642+
CodeGenSpecifics::Marshalling
643+
complexReturnType(mlir::Location loc, mlir::Type eleTy) const override {
644+
CodeGenSpecifics::Marshalling marshal;
645+
TODO(loc, "handle complex return types");
646+
return marshal;
647+
}
648+
};
649+
} // namespace
650+
624651
//===----------------------------------------------------------------------===//
625652
// LoongArch64 linux target specifics.
626653
//===----------------------------------------------------------------------===//
@@ -708,6 +735,9 @@ fir::CodeGenSpecifics::get(mlir::MLIRContext *ctx, llvm::Triple &&trp,
708735
case llvm::Triple::ArchType::amdgcn:
709736
return std::make_unique<TargetAMDGPU>(ctx, std::move(trp),
710737
std::move(kindMap));
738+
case llvm::Triple::ArchType::nvptx64:
739+
return std::make_unique<TargetNVPTX>(ctx, std::move(trp),
740+
std::move(kindMap));
711741
case llvm::Triple::ArchType::loongarch64:
712742
return std::make_unique<TargetLoongArch64>(ctx, std::move(trp),
713743
std::move(kindMap));

flang/test/Driver/omp-driver-offload.f90

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,41 +67,71 @@
6767
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
6868
! RUN: -fopenmp-assume-threads-oversubscription \
6969
! RUN: | FileCheck %s --check-prefixes=CHECK-THREADS-OVS
70+
! RUN: %flang -### %s -o %t 2>&1 \
71+
! RUN: -fopenmp --offload-arch=sm_70 \
72+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
73+
! RUN: -fopenmp-assume-threads-oversubscription \
74+
! RUN: | FileCheck %s --check-prefixes=CHECK-THREADS-OVS
7075
! CHECK-THREADS-OVS: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-assume-threads-oversubscription" {{.*}}.f90"
7176

7277
! RUN: %flang -### %s -o %t 2>&1 \
7378
! RUN: -fopenmp --offload-arch=gfx90a \
7479
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
7580
! RUN: -fopenmp-assume-teams-oversubscription \
7681
! RUN: | FileCheck %s --check-prefixes=CHECK-TEAMS-OVS
82+
! RUN: %flang -### %s -o %t 2>&1 \
83+
! RUN: -fopenmp --offload-arch=sm_70 \
84+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
85+
! RUN: -fopenmp-assume-teams-oversubscription \
86+
! RUN: | FileCheck %s --check-prefixes=CHECK-TEAMS-OVS
7787
! CHECK-TEAMS-OVS: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-assume-teams-oversubscription" {{.*}}.f90"
7888

7989
! RUN: %flang -### %s -o %t 2>&1 \
8090
! RUN: -fopenmp --offload-arch=gfx90a \
8191
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
8292
! RUN: -fopenmp-assume-no-nested-parallelism \
8393
! RUN: | FileCheck %s --check-prefixes=CHECK-NEST-PAR
94+
! RUN: %flang -### %s -o %t 2>&1 \
95+
! RUN: -fopenmp --offload-arch=sm_70 \
96+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
97+
! RUN: -fopenmp-assume-no-nested-parallelism \
98+
! RUN: | FileCheck %s --check-prefixes=CHECK-NEST-PAR
8499
! CHECK-NEST-PAR: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-assume-no-nested-parallelism" {{.*}}.f90"
85100

86101
! RUN: %flang -### %s -o %t 2>&1 \
87102
! RUN: -fopenmp --offload-arch=gfx90a \
88103
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
89104
! RUN: -fopenmp-assume-no-thread-state \
90105
! RUN: | FileCheck %s --check-prefixes=CHECK-THREAD-STATE
106+
! RUN: %flang -### %s -o %t 2>&1 \
107+
! RUN: -fopenmp --offload-arch=sm_70 \
108+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
109+
! RUN: -fopenmp-assume-no-thread-state \
110+
! RUN: | FileCheck %s --check-prefixes=CHECK-THREAD-STATE
91111
! CHECK-THREAD-STATE: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-assume-no-thread-state" {{.*}}.f90"
92112

93113
! RUN: %flang -### %s -o %t 2>&1 \
94114
! RUN: -fopenmp --offload-arch=gfx90a \
95115
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
96116
! RUN: -fopenmp-target-debug \
97117
! RUN: | FileCheck %s --check-prefixes=CHECK-TARGET-DEBUG
118+
! RUN: %flang -### %s -o %t 2>&1 \
119+
! RUN: -fopenmp --offload-arch=sm_70 \
120+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
121+
! RUN: -fopenmp-target-debug \
122+
! RUN: | FileCheck %s --check-prefixes=CHECK-TARGET-DEBUG
98123
! CHECK-TARGET-DEBUG: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-target-debug" {{.*}}.f90"
99124

100125
! RUN: %flang -### %s -o %t 2>&1 \
101126
! RUN: -fopenmp --offload-arch=gfx90a \
102127
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
103128
! RUN: -fopenmp-target-debug \
104129
! RUN: | FileCheck %s --check-prefixes=CHECK-TARGET-DEBUG
130+
! RUN: %flang -### %s -o %t 2>&1 \
131+
! RUN: -fopenmp --offload-arch=sm_70 \
132+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
133+
! RUN: -fopenmp-target-debug \
134+
! RUN: | FileCheck %s --check-prefixes=CHECK-TARGET-DEBUG
105135
! CHECK-TARGET-DEBUG-EQ: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-target-debug=111" {{.*}}.f90"
106136

107137
! RUN: %flang -S -### %s -o %t 2>&1 \
@@ -111,6 +141,13 @@
111141
! RUN: -fopenmp-assume-teams-oversubscription -fopenmp-assume-no-nested-parallelism \
112142
! RUN: -fopenmp-assume-no-thread-state \
113143
! RUN: | FileCheck %s --check-prefixes=CHECK-RTL-ALL
144+
! RUN: %flang -S -### %s -o %t 2>&1 \
145+
! RUN: -fopenmp --offload-arch=sm_70 \
146+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
147+
! RUN: -fopenmp-target-debug -fopenmp-assume-threads-oversubscription \
148+
! RUN: -fopenmp-assume-teams-oversubscription -fopenmp-assume-no-nested-parallelism \
149+
! RUN: -fopenmp-assume-no-thread-state \
150+
! RUN: | FileCheck %s --check-prefixes=CHECK-RTL-ALL
114151
! CHECK-RTL-ALL: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" {{.*}} "-fopenmp-is-target-device" "-fopenmp-target-debug" "-fopenmp-assume-teams-oversubscription"
115152
! CHECK-RTL-ALL: "-fopenmp-assume-threads-oversubscription" "-fopenmp-assume-no-thread-state" "-fopenmp-assume-no-nested-parallelism"
116153
! CHECK-RTL-ALL: {{.*}}.f90"
@@ -120,6 +157,11 @@
120157
! RUN: -fopenmp-targets=amdgcn-amd-amdhsa \
121158
! RUN: -fopenmp-version=45 \
122159
! RUN: | FileCheck %s --check-prefixes=CHECK-OPENMP-VERSION
160+
! RUN: %flang -### %s -o %t 2>&1 \
161+
! RUN: -fopenmp --offload-arch=sm_70 \
162+
! RUN: -fopenmp-targets=nvptx64-nvidia-cuda \
163+
! RUN: -fopenmp-version=45 \
164+
! RUN: | FileCheck %s --check-prefixes=CHECK-OPENMP-VERSION
123165
! CHECK-OPENMP-VERSION: "{{[^"]*}}flang-new" "-fc1" {{.*}} "-fopenmp" "-fopenmp-version=45" {{.*}}.f90"
124166

125167
! Test diagnostic error when host IR file is non-existent

flang/test/Fir/target-rewrite-boxchar.fir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// RUN: fir-opt --target-rewrite="target=aarch64-unknown-linux-gnu" %s | FileCheck %s --check-prefix=INT64
44
// RUN: fir-opt --target-rewrite="target=powerpc64le-unknown-linux-gnu" %s | FileCheck %s --check-prefix=INT64
55
// RUN: fir-opt --target-rewrite="target=amdgcn-amd-amdhsa" %s | FileCheck %s --check-prefix=INT64
6+
// RUN: fir-opt --target-rewrite="target=nvptx64-nvidia-cuda" %s | FileCheck %s --check-prefix=INT64
67
// RUN: fir-opt --target-rewrite="target=loongarch64-unknown-linux-gnu" %s | FileCheck %s --check-prefix=INT64
78

89
// Test that we rewrite the signatures and bodies of functions that take boxchar

flang/test/Lower/OpenMP/FIR/omp-is-gpu.f90

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
!REQUIRES: amdgpu-registered-target
1+
!REQUIRES: amdgpu-registered-target, nvptx-registered-target
22

33
!RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -emit-fir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s
4+
!RUN: %flang_fc1 -triple nvptx64-nvidia-cuda -emit-fir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s
45
!RUN: bbc -fopenmp -fopenmp-is-target-device -fopenmp-is-gpu -emit-fir -o - %s | FileCheck %s
56

67
!RUN: not %flang_fc1 -triple amdgcn-amd-amdhsa -emit-fir -fopenmp %s -o - 2>&1 | FileCheck %s --check-prefix=FLANG-ERROR
8+
!RUN: not %flang_fc1 -triple nvptx64-nvidia-cuda -emit-fir -fopenmp %s -o - 2>&1 | FileCheck %s --check-prefix=FLANG-ERROR
79
!RUN: not bbc -fopenmp -fopenmp-is-gpu -emit-fir %s -o - 2>&1 | FileCheck %s --check-prefix=BBC-ERROR
810

911
!CHECK: module attributes {{{.*}}omp.is_gpu = true

flang/test/Lower/OpenMP/FIR/target_cpu_features.f90

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
!REQUIRES: amdgpu-registered-target
1+
!REQUIRES: amdgpu-registered-target, nvptx-registered-target
22
!RUN: %flang_fc1 -emit-fir -triple amdgcn-amd-amdhsa -target-cpu gfx908 -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s
3+
!RUN: %flang_fc1 -emit-hlfir -triple nvptx64-nvidia-cuda -target-cpu sm_80 -fopenmp -fopenmp-is-target-device %s -o - | FileCheck --check-prefix=NVPTX %s
4+
35

46
!===============================================================================
57
! Target_Enter Simple
@@ -10,6 +12,7 @@
1012
!CHECK-SAME: +dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,
1113
!CHECK-SAME: +gfx8-insts,+gfx9-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,
1214
!CHECK-SAME: +wavefrontsize64">
15+
!NVPTX: omp.target = #omp.target<target_cpu = "sm_80", target_features = "+ptx61,+sm_80">
1316
!CHECK-LABEL: func.func @_QPomp_target_simple()
1417
subroutine omp_target_simple
1518
! Directive needed to prevent subroutine from being filtered out when

flang/test/Lower/OpenMP/omp-is-gpu.f90

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
!REQUIRES: amdgpu-registered-target
1+
!REQUIRES: amdgpu-registered-target, nvptx-registered-target
22

33
!RUN: %flang_fc1 -triple amdgcn-amd-amdhsa -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s
4+
!RUN: %flang_fc1 -triple nvptx64-nvidia-cuda -emit-hlfir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s
45
!RUN: bbc -fopenmp -fopenmp-is-target-device -fopenmp-is-gpu -emit-hlfir -o - %s | FileCheck %s
56

67
!RUN: not %flang_fc1 -triple amdgcn-amd-amdhsa -emit-hlfir -fopenmp %s -o - 2>&1 | FileCheck %s --check-prefix=FLANG-ERROR
8+
!RUN: not %flang_fc1 -triple nvptx64-nvidia-cuda -emit-hlfir -fopenmp %s -o - 2>&1 | FileCheck %s --check-prefix=FLANG-ERROR
79
!RUN: not bbc -fopenmp -fopenmp-is-gpu -emit-hlfir %s -o - 2>&1 | FileCheck %s --check-prefix=BBC-ERROR
810

911
!CHECK: module attributes {{{.*}}omp.is_gpu = true

flang/test/Lower/OpenMP/target_cpu_features.f90

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
!REQUIRES: amdgpu-registered-target
1+
!REQUIRES: amdgpu-registered-target, nvptx-registered-target
22
!RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -target-cpu gfx908 -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s
3+
!RUN: %flang_fc1 -emit-hlfir -triple nvptx64-nvidia-cuda -target-cpu sm_80 -fopenmp -fopenmp-is-target-device %s -o - | FileCheck --check-prefix=NVPTX %s
34

45
!===============================================================================
56
! Target_Enter Simple
@@ -10,6 +11,7 @@
1011
!CHECK-SAME: +dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,
1112
!CHECK-SAME: +gfx8-insts,+gfx9-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,
1213
!CHECK-SAME: +wavefrontsize64">
14+
!NVPTX: omp.target = #omp.target<target_cpu = "sm_80", target_features = "+ptx61,+sm_80">
1315
!CHECK-LABEL: func.func @_QPomp_target_simple()
1416
subroutine omp_target_simple
1517
! Directive needed to prevent subroutine from being filtered out when

openmp/libomptarget/test/offloading/fortran/basic-target-region-1D-array-section.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
! Basic offloading test of arrays with provided lower
22
! and upper bounds as specified by OpenMP's sectioning
3-
! REQUIRES: flang, amdgcn-amd-amdhsa
4-
! UNSUPPORTED: nvptx64-nvidia-cuda
3+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
54
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
65
! UNSUPPORTED: aarch64-unknown-linux-gnu
76
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

openmp/libomptarget/test/offloading/fortran/basic-target-region-3D-array-section.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
! Basic offloading test of a regular array explicitly
22
! passed within a target region
3-
! REQUIRES: flang, amdgcn-amd-amdhsa
4-
! UNSUPPORTED: nvptx64-nvidia-cuda
3+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
54
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
65
! UNSUPPORTED: aarch64-unknown-linux-gnu
76
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

openmp/libomptarget/test/offloading/fortran/basic-target-region-3D-array.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
! Basic offloading test of a regular array explicitly
22
! passed within a target region
3-
! REQUIRES: flang, amdgcn-amd-amdhsa
4-
! UNSUPPORTED: nvptx64-nvidia-cuda
3+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
54
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
65
! UNSUPPORTED: aarch64-unknown-linux-gnu
76
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

openmp/libomptarget/test/offloading/fortran/basic-target-region-array.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
! Basic offloading test of a regular array explicitly
22
! passed within a target region
3-
! REQUIRES: flang, amdgcn-amd-amdhsa
4-
! UNSUPPORTED: nvptx64-nvidia-cuda
3+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
54
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
65
! UNSUPPORTED: aarch64-unknown-linux-gnu
76
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

openmp/libomptarget/test/offloading/fortran/basic_target_region.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
! Basic offloading test with a target region
2-
! REQUIRES: flang, amdgcn-amd-amdhsa
3-
! UNSUPPORTED: nvptx64-nvidia-cuda
2+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
43
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
54
! UNSUPPORTED: aarch64-unknown-linux-gnu
65
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

openmp/libomptarget/test/offloading/fortran/declare-target-array-in-target-region.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
! Offloading test with a target region mapping a declare target
22
! Fortran array writing some values to it and checking the host
33
! correctly receives the updates made on the device.
4-
! REQUIRES: flang, amdgcn-amd-amdhsa
5-
! UNSUPPORTED: nvptx64-nvidia-cuda
4+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
65
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
76
! UNSUPPORTED: aarch64-unknown-linux-gnu
87
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

openmp/libomptarget/test/offloading/fortran/double-target-call-with-declare-target.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
! declare target Fortran array and writing some values to
33
! it before checking the host correctly receives the
44
! correct updates made on the device.
5-
! REQUIRES: flang, amdgcn-amd-amdhsa
6-
! UNSUPPORTED: nvptx64-nvidia-cuda
5+
! REQUIRES: flang, amdgcn-amd-amdhsa, nvptx64-nvidia-cuda
76
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
87
! UNSUPPORTED: aarch64-unknown-linux-gnu
98
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO

0 commit comments

Comments
 (0)