diff options
| author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-04-14 05:33:57 +0000 |
|---|---|---|
| committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-04-14 05:33:57 +0000 |
| commit | e668b1cd1e78cb244b79d987aef725cc76c30e64 (patch) | |
| tree | 510f8d3c141eb77ccc443d179b4956720b4bc67d /clang/lib | |
| parent | c9a4fc07507007ea77241f4724a66d0054f5adb3 (diff) | |
| download | bcm5719-llvm-e668b1cd1e78cb244b79d987aef725cc76c30e64.tar.gz bcm5719-llvm-e668b1cd1e78cb244b79d987aef725cc76c30e64.zip | |
[AMDGPU][GFX9] Set +fp32-denormals for >=gfx900 unless -cl-denorms-are-zero is set
Differential Revision: https://reviews.llvm.org/D31482
llvm-svn: 300306
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index fb22d402989..18f503d091c 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -2112,9 +2112,12 @@ class AMDGPUTargetInfo final : public TargetInfo { bool hasFP64:1; bool hasFMAF:1; bool hasLDEXPF:1; - bool hasFullSpeedFP32Denorms:1; const AddrSpace AS; + static bool hasFullSpeedFMAF32(StringRef GPUName) { + return parseAMDGCNName(GPUName) >= GK_GFX9; + } + static bool isAMDGCN(const llvm::Triple &TT) { return TT.getArch() == llvm::Triple::amdgcn; } @@ -2130,7 +2133,6 @@ public: hasFP64(false), hasFMAF(false), hasLDEXPF(false), - hasFullSpeedFP32Denorms(false), AS(isGenericZero(Triple)){ if (getTriple().getArch() == llvm::Triple::amdgcn) { hasFP64 = true; @@ -2200,7 +2202,8 @@ public: hasFP64Denormals = true; } if (!hasFP32Denormals) - TargetOpts.Features.push_back((Twine(hasFullSpeedFP32Denorms && + TargetOpts.Features.push_back( + (Twine(hasFullSpeedFMAF32(TargetOpts.CPU) && !CGOpts.FlushDenorm ? '+' : '-') + Twine("fp32-denormals")).str()); // Always do not flush fp64 or fp16 denorms. if (!hasFP64Denormals && hasFP64) |

