[OpenCL] Add 'denorms-are-zero' function attribute
Summary: Generate attribute 'denorms-are-zero'='true' if '-cl-denorms-are-zero' compile option was specified and 'denorms-are-zero'='false' otherwise. Patch by krisb Reviewers: Anastasia, yaxunl Reviewed By: yaxunl Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D45808 llvm-svn: 330404
This commit is contained in:
parent
79e4f7fadb
commit
3858e26f22
|
@ -1745,6 +1745,10 @@ void CodeGenModule::ConstructDefaultFnAttrList(StringRef Name, bool HasOptnone,
|
|||
"correctly-rounded-divide-sqrt-fp-math",
|
||||
llvm::toStringRef(CodeGenOpts.CorrectlyRoundedDivSqrt));
|
||||
|
||||
if (getLangOpts().OpenCL)
|
||||
FuncAttrs.addAttribute("denorms-are-zero",
|
||||
llvm::toStringRef(CodeGenOpts.FlushDenorm));
|
||||
|
||||
// TODO: Reciprocal estimate codegen options should apply to instructions?
|
||||
const std::vector<std::string> &Recips = CodeGenOpts.Reciprocals;
|
||||
if (!Recips.empty())
|
||||
|
|
|
@ -1,19 +1,25 @@
|
|||
// RUN: %clang_cc1 -S -cl-denorms-are-zero -o - %s 2>&1
|
||||
// RUN: %clang_cc1 -emit-llvm -cl-denorms-are-zero -o - -triple amdgcn--amdhsa -target-cpu fiji %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -triple amdgcn--amdhsa -target-cpu fiji %s | FileCheck %s --check-prefix=CHECK-DENORM
|
||||
// RUN: %clang_cc1 -emit-llvm -target-feature +fp32-denormals -target-feature -fp64-fp16-denormals -cl-denorms-are-zero -o - -triple amdgcn--amdhsa -target-cpu fiji %s | FileCheck --check-prefix=CHECK-FEATURE %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -cl-denorms-are-zero -o - %s | FileCheck %s --check-prefix=DENORM-ZERO
|
||||
// RUN: %clang_cc1 -emit-llvm -cl-denorms-are-zero -o - -triple amdgcn--amdhsa -target-cpu fiji %s | FileCheck %s --check-prefix=AMDGCN
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -triple amdgcn--amdhsa -target-cpu fiji %s | FileCheck %s --check-prefix=AMDGCN-DENORM
|
||||
// RUN: %clang_cc1 -emit-llvm -target-feature +fp32-denormals -target-feature -fp64-fp16-denormals -cl-denorms-are-zero -o - -triple amdgcn--amdhsa -target-cpu fiji %s | FileCheck --check-prefix=AMDGCN-FEATURE %s
|
||||
|
||||
// For non-amdgcn targets, this test just checks that the -cl-denorms-are-zero argument is accepted
|
||||
// by clang. This option is currently a no-op, which is allowed by the
|
||||
// OpenCL specification.
|
||||
// For all targets 'denorms-are-zero' attribute is set to 'true'
|
||||
// if '-cl-denorms-are-zero' was specified and to 'false' otherwise.
|
||||
|
||||
// CHECK-LABEL: define void @f()
|
||||
// CHECK: attributes #{{[0-9]*}} = {{{[^}]*}} "denorms-are-zero"="false"
|
||||
//
|
||||
// DENORM-ZERO-LABEL: define void @f()
|
||||
// DENORM-ZERO: attributes #{{[0-9]*}} = {{{[^}]*}} "denorms-are-zero"="true"
|
||||
|
||||
// For amdgcn target cpu fiji, fp32 should be flushed since fiji does not support fp32 denormals, unless +fp32-denormals is
|
||||
// explicitly set. amdgcn target always do not flush fp64 denormals. The control for fp64 and fp16 denormals is the same.
|
||||
|
||||
// CHECK-DENORM-LABEL: define void @f()
|
||||
// CHECK-DENORM: attributes #{{[0-9]*}} = {{{[^}]*}} "target-features"="{{[^"]*}}+fp64-fp16-denormals,{{[^"]*}}-fp32-denormals{{[^"]*}}"
|
||||
// CHECK-LABEL: define void @f()
|
||||
// CHECK: attributes #{{[0-9]*}} = {{{[^}]*}} "target-features"="{{[^"]*}}+fp64-fp16-denormals,{{[^"]*}}-fp32-denormals{{[^"]*}}"
|
||||
// CHECK-FEATURE-LABEL: define void @f()
|
||||
// CHECK-FEATURE: attributes #{{[0-9]*}} = {{{[^}]*}} "target-features"="{{[^"]*}}+fp32-denormals,{{[^"]*}}-fp64-fp16-denormals{{[^"]*}}"
|
||||
// AMDGCN-LABEL: define void @f()
|
||||
// AMDGCN: attributes #{{[0-9]*}} = {{{[^}]*}} "denorms-are-zero"="true" {{.*}} "target-features"="{{[^"]*}}+fp64-fp16-denormals,{{[^"]*}}-fp32-denormals{{[^"]*}}"
|
||||
// AMDGCN-DENORM-LABEL: define void @f()
|
||||
// AMDGCN-DENORM: attributes #{{[0-9]*}} = {{{[^}]*}} "denorms-are-zero"="false" {{.*}} "target-features"="{{[^"]*}}+fp64-fp16-denormals,{{[^"]*}}-fp32-denormals{{[^"]*}}"
|
||||
// AMDGCN-FEATURE-LABEL: define void @f()
|
||||
// AMDGCN-FEATURE: attributes #{{[0-9]*}} = {{{[^}]*}} "denorms-are-zero"="true" {{.*}} "target-features"="{{[^"]*}}+fp32-denormals,{{[^"]*}}-fp64-fp16-denormals{{[^"]*}}"
|
||||
void f() {}
|
||||
|
|
Loading…
Reference in New Issue