summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-04-14 05:33:57 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-04-14 05:33:57 +0000
commite668b1cd1e78cb244b79d987aef725cc76c30e64 (patch)
tree510f8d3c141eb77ccc443d179b4956720b4bc67d /clang/lib
parentc9a4fc07507007ea77241f4724a66d0054f5adb3 (diff)
downloadbcm5719-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.cpp9
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)
OpenPOWER on IntegriCloud