Skip to content

Commit 4ea3650

Browse files
committed
HIP: Link correct denormal mode library
This wasn't respecting the flush mode based on the default, and also wasn't correctly handling the explicit -fno-cuda-flush-denormals-to-zero overriding the mode.
1 parent 6593360 commit 4ea3650

File tree

2 files changed

+83
-9
lines changed

2 files changed

+83
-9
lines changed

clang/lib/Driver/ToolChains/HIP.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ void HIPToolChain::addClangTargetOptions(
285285
(void) GpuArch;
286286
assert(DeviceOffloadingKind == Action::OFK_HIP &&
287287
"Only HIP offloading kinds are supported for GPUs.");
288+
auto Kind = llvm::AMDGPU::parseArchAMDGCN(GpuArch);
288289

289290
CC1Args.push_back("-target-cpu");
290291
CC1Args.push_back(DriverArgs.MakeArgStringRef(GpuArch));
@@ -345,11 +346,14 @@ void HIPToolChain::addClangTargetOptions(
345346
std::string GFXVersion = GpuArch.drop_front(3).str();
346347
std::string ISAVerBC = "oclc_isa_version_" + GFXVersion + ".amdgcn.bc";
347348

348-
llvm::StringRef FlushDenormalControlBC;
349-
if (DriverArgs.hasArg(options::OPT_fcuda_flush_denormals_to_zero))
350-
FlushDenormalControlBC = "oclc_daz_opt_on.amdgcn.bc";
351-
else
352-
FlushDenormalControlBC = "oclc_daz_opt_off.amdgcn.bc";
349+
bool FTZDAZ = DriverArgs.hasFlag(
350+
options::OPT_fcuda_flush_denormals_to_zero,
351+
options::OPT_fno_cuda_flush_denormals_to_zero,
352+
getDefaultDenormsAreZeroForTarget(Kind));
353+
354+
std::string FlushDenormalControlBC = FTZDAZ ?
355+
"oclc_daz_opt_on.amdgcn.bc" :
356+
"oclc_daz_opt_off.amdgcn.bc";
353357

354358
llvm::StringRef WaveFrontSizeBC;
355359
if (stoi(GFXVersion) < 1000)
@@ -359,7 +363,7 @@ void HIPToolChain::addClangTargetOptions(
359363

360364
BCLibs.append({"hip.amdgcn.bc", "ocml.amdgcn.bc", "ockl.amdgcn.bc",
361365
"oclc_finite_only_off.amdgcn.bc",
362-
std::string(FlushDenormalControlBC),
366+
FlushDenormalControlBC,
363367
"oclc_correctly_rounded_sqrt_on.amdgcn.bc",
364368
"oclc_unsafe_math_off.amdgcn.bc", ISAVerBC,
365369
std::string(WaveFrontSizeBC)});

clang/test/Driver/hip-device-libs.hip

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,94 @@
22
// REQUIRES: x86-registered-target
33
// REQUIRES: amdgpu-registered-target
44

5-
// Test flush-denormals-to-zero enabled uses oclc_daz_opt_on
5+
// Test if oclc_daz_opt_on or if oclc_daz_opt_off is linked depending on
6+
// expected denormal mode.
67

8+
// Test subtarget with flushing on by default.
9+
// RUN: %clang -### -target x86_64-linux-gnu \
10+
// RUN: --cuda-gpu-arch=gfx803 \
11+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
12+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
13+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,FLUSHD
14+
15+
16+
// Test subtarget with flushing off by ddefault.
717
// RUN: %clang -### -target x86_64-linux-gnu \
818
// RUN: --cuda-gpu-arch=gfx900 \
919
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
20+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
21+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,NOFLUSHD
22+
23+
24+
// Test explicit flag, opposite of target default.
25+
// RUN: %clang -### -target x86_64-linux-gnu \
26+
// RUN: --cuda-gpu-arch=gfx900 \
1027
// RUN: -fcuda-flush-denormals-to-zero \
28+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
1129
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
1230
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,FLUSHD
1331

14-
// Test flush-denormals-to-zero disabled uses oclc_daz_opt_off
1532

33+
// Test explicit flag, opposite of target default.
34+
// RUN: %clang -### -target x86_64-linux-gnu \
35+
// RUN: --cuda-gpu-arch=gfx803 \
36+
// RUN: -fno-cuda-flush-denormals-to-zero \
37+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
38+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
39+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,NOFLUSHD
40+
41+
42+
// Test explicit flag, same as target default.
1643
// RUN: %clang -### -target x86_64-linux-gnu \
1744
// RUN: --cuda-gpu-arch=gfx900 \
45+
// RUN: -fno-cuda-flush-denormals-to-zero \
1846
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
1947
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
2048
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,NOFLUSHD
2149

50+
51+
// Test explicit flag, same as target default.
52+
// RUN: %clang -### -target x86_64-linux-gnu \
53+
// RUN: --cuda-gpu-arch=gfx803 \
54+
// RUN: -fcuda-flush-denormals-to-zero \
55+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
56+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
57+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,FLUSHD
58+
59+
60+
// Test last flag wins, not flushing
61+
// RUN: %clang -### -target x86_64-linux-gnu \
62+
// RUN: --cuda-gpu-arch=gfx803 \
63+
// RUN: -fcuda-flush-denormals-to-zero -fno-cuda-flush-denormals-to-zero \
64+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
65+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
66+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,NOFLUSHD
67+
68+
69+
// RUN: %clang -### -target x86_64-linux-gnu \
70+
// RUN: --cuda-gpu-arch=gfx900 \
71+
// RUN: -fcuda-flush-denormals-to-zero -fno-cuda-flush-denormals-to-zero \
72+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
73+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
74+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,NOFLUSHD
75+
76+
77+
// RUN: %clang -### -target x86_64-linux-gnu \
78+
// RUN: --cuda-gpu-arch=gfx900 \
79+
// RUN: -fno-cuda-flush-denormals-to-zero -fcuda-flush-denormals-to-zero \
80+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
81+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
82+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,FLUSHD
83+
84+
85+
// RUN: %clang -### -target x86_64-linux-gnu \
86+
// RUN: --cuda-gpu-arch=gfx803 \
87+
// RUN: -fno-cuda-flush-denormals-to-zero -fcuda-flush-denormals-to-zero \
88+
// RUN: --hip-device-lib-path=%S/Inputs/hip_dev_lib \
89+
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
90+
// RUN: 2>&1 | FileCheck %s --check-prefixes=COM,FLUSHD
91+
92+
2293
// Test environment variable HIP_DEVICE_LIB_PATH
2394

2495
// RUN: env HIP_DEVICE_LIB_PATH=%S/Inputs/hip_dev_lib \
@@ -33,4 +104,3 @@
33104
// COM-SAME: "-mlink-builtin-bitcode" "{{.*}}ockl.amdgcn.bc"
34105
// FLUSHD-SAME: "-mlink-builtin-bitcode" "{{.*}}oclc_daz_opt_on.amdgcn.bc"
35106
// NOFLUSHD-SAME: "-mlink-builtin-bitcode" "{{.*}}oclc_daz_opt_off.amdgcn.bc"
36-

0 commit comments

Comments
 (0)