llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: Hardik Kumar (hardikxk)

<details>
<summary>Changes</summary>

Previously when using `-cl-fast-relaxed-math` flag along with `fhonor-nans` or 
`fhonor-infinities` the honor flags did not override the relaxed math flag. 
This behaviour is something that is not seen in case of ffast-math for general 
targets.

This patch makes adjustments to how the driver and cc1 handles the relaxed math 
flag for opencl. The flag was in the path of `fast-math` so when someone used 
the `-cl-fast-relaxed-math` flag they were ultimately overriding everything 
with fast-math. This was the main reason why honor flags were not overriding 
relaxed math (atleast that's what I have understood from my time working on 
this).

I have added tests for this as well and modified CodeGen cc1 tests according to 
the changes in the patch.

I have personally not tested this on any AMD targets myself yet. So I am unsure 
about this breaking anything (hopefully it should rather fix).

closes #<!-- -->178514

---
Full diff: https://github.com/llvm/llvm-project/pull/208709.diff


5 Files Affected:

- (modified) clang/include/clang/Options/Options.td (+1-2) 
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (+4) 
- (modified) clang/test/CodeGenOpenCL/amdgpu-ieee.cl (+1-1) 
- (modified) clang/test/CodeGenOpenCL/relaxed-fpmath.cl (+2-2) 
- (modified) clang/test/Driver/opencl.cl (+4) 


``````````diff
diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index dedbab4869997..9994b890413ad 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -2454,8 +2454,7 @@ def ffp_exception_behavior_EQ : Joined<["-"], 
"ffp-exception-behavior=">, Group<
 defm fast_math : BoolFOption<"fast-math",
   LangOpts<"FastMath">, Default<hlsl.KeyPath>,
   PosFlag<SetTrue, [], [ClangOption, CC1Option, FC1Option, FlangOption],
-          "Allow aggressive, lossy floating-point optimizations",
-          [cl_fast_relaxed_math.KeyPath]>,
+          "Allow aggressive, lossy floating-point optimizations">,
   NegFlag<SetFalse, [], [ClangOption, CC1Option, FC1Option, FlangOption]>>;
 defm math_errno : BoolFOption<"math-errno",
   LangOpts<"MathErrno">, DefaultFalse,
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index a30b01a675b99..941cbb3c5e067 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -3295,6 +3295,10 @@ static void RenderFloatingPointOptions(const ToolChain 
&TC, const Driver &D,
       restoreFPContractState();
       break;
 
+    case options::OPT_cl_fast_relaxed_math:
+      applyFastMath(true, A->getSpelling());
+      break;
+
     case options::OPT_Ofast:
       // If -Ofast is the optimization level, then -ffast-math should be 
enabled
       if (!OFastEnabled)
diff --git a/clang/test/CodeGenOpenCL/amdgpu-ieee.cl 
b/clang/test/CodeGenOpenCL/amdgpu-ieee.cl
index 35ddbcfb3d4bf..7f9b9f21047da 100644
--- a/clang/test/CodeGenOpenCL/amdgpu-ieee.cl
+++ b/clang/test/CodeGenOpenCL/amdgpu-ieee.cl
@@ -9,7 +9,7 @@
 // RUN:   | FileCheck -check-prefixes=COMMON,OFF %s
 // RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -O0 -emit-llvm -o - %s \
 // RUN:   -target-feature +dx10-clamp-and-ieee-mode \
-// RUN:   -mno-amdgpu-ieee -cl-fast-relaxed-math \
+// RUN:   -mno-amdgpu-ieee -cl-fast-relaxed-math -menable-no-nans \
 // RUN:   | FileCheck -check-prefixes=COMMON,OFF %s
 
 // Check AMDGCN ISA generation.
diff --git a/clang/test/CodeGenOpenCL/relaxed-fpmath.cl 
b/clang/test/CodeGenOpenCL/relaxed-fpmath.cl
index 9228e2b680f38..e875a6c9d1ad8 100644
--- a/clang/test/CodeGenOpenCL/relaxed-fpmath.cl
+++ b/clang/test/CodeGenOpenCL/relaxed-fpmath.cl
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s -check-prefix=NORMAL
-// RUN: %clang_cc1 %s -emit-llvm -cl-fast-relaxed-math -o - | FileCheck %s 
-check-prefix=FAST
+// RUN: %clang_cc1 %s -emit-llvm -cl-fast-relaxed-math -menable-no-nans 
-menable-no-infs -mreassociate -freciprocal-math -fapprox-func 
-fno-signed-zeros -o - | FileCheck %s -check-prefix=FAST
 // RUN: %clang_cc1 %s -emit-llvm -menable-no-infs -menable-no-nans 
-cl-finite-math-only -o - | FileCheck %s -check-prefix=FINITE
 // RUN: %clang_cc1 %s -emit-llvm -cl-unsafe-math-optimizations -o - | 
FileCheck %s -check-prefix=UNSAFE
 // RUN: %clang_cc1 %s -emit-llvm -cl-mad-enable -o - | FileCheck %s 
-check-prefix=MAD
@@ -8,7 +8,7 @@
 // Check the fp options are correct with PCH.
 // RUN: %clang_cc1 %s -DGEN_PCH=1 -finclude-default-header -triple 
spir-unknown-unknown -emit-pch -o %t.pch
 // RUN: %clang_cc1 %s -include-pch %t.pch -fno-validate-pch -emit-llvm -o - | 
FileCheck %s -check-prefix=NORMAL
-// RUN: %clang_cc1 %s -include-pch %t.pch -fno-validate-pch -emit-llvm 
-cl-fast-relaxed-math -o - | FileCheck %s -check-prefix=FAST
+// RUN: %clang_cc1 %s -include-pch %t.pch -fno-validate-pch -emit-llvm 
-cl-fast-relaxed-math -menable-no-nans -menable-no-infs -mreassociate 
-freciprocal-math -fapprox-func -fno-signed-zeros -o - | FileCheck %s 
-check-prefix=FAST
 // RUN: %clang_cc1 %s -include-pch %t.pch -fno-validate-pch -emit-llvm 
-menable-no-infs -menable-no-nans -cl-finite-math-only -o - | FileCheck %s 
-check-prefix=FINITE
 // RUN: %clang_cc1 %s -include-pch %t.pch -fno-validate-pch -emit-llvm 
-cl-unsafe-math-optimizations -o - | FileCheck %s -check-prefix=UNSAFE
 // RUN: %clang_cc1 %s -include-pch %t.pch -fno-validate-pch -emit-llvm 
-cl-mad-enable -o - | FileCheck %s -check-prefix=MAD
diff --git a/clang/test/Driver/opencl.cl b/clang/test/Driver/opencl.cl
index ba941d5f48feb..8024c27f69f69 100644
--- a/clang/test/Driver/opencl.cl
+++ b/clang/test/Driver/opencl.cl
@@ -13,6 +13,8 @@
 // RUN: %clang -S -### -cl-kernel-arg-info %s 2>&1 | FileCheck 
--check-prefix=CHECK-KERNEL-ARG-INFO %s
 // RUN: %clang -S -### -cl-unsafe-math-optimizations %s 2>&1 | FileCheck 
--check-prefix=CHECK-UNSAFE-MATH-OPT %s
 // RUN: %clang -S -### -cl-fast-relaxed-math %s 2>&1 | FileCheck 
--check-prefix=CHECK-FAST-RELAXED-MATH %s
+// RUN: %clang -S -### -cl-fast-relaxed-math -fhonor-nans %s 2>&1 | FileCheck 
--check-prefixes=CHECK-FAST-RELAXED-MATH,NO-NNAN %s
+// RUN: %clang -S -### -cl-fast-relaxed-math -fhonor-infinities %s 2>&1 | 
FileCheck --check-prefixes=CHECK-FAST-RELAXED-MATH,NO-NINF %s
 // RUN: %clang -S -### -cl-mad-enable %s 2>&1 | FileCheck 
--check-prefix=CHECK-MAD-ENABLE %s
 // RUN: %clang -S -### -cl-no-signed-zeros %s 2>&1 | FileCheck 
--check-prefix=CHECK-NO-SIGNED-ZEROS %s
 // RUN: %clang -S -### -cl-denorms-are-zero %s 2>&1 | FileCheck 
--check-prefix=CHECK-DENORMS-ARE-ZERO %s
@@ -43,6 +45,8 @@
 // CHECK-FAST-RELAXED-MATH: "-cc1" {{.*}} "-cl-fast-relaxed-math"
 // CHECK-MAD-ENABLE: "-cc1" {{.*}} "-cl-mad-enable"
 // CHECK-NO-SIGNED-ZEROS: "-cc1" {{.*}} "-cl-no-signed-zeros"
+// NO-NNAN-NOT: "menable-no-nans"
+// NO-NINF-NOT: "menable-no-infs"
 
 // This is not forwarded
 // CHECK-DENORMS-ARE-ZERO-NOT: "-cl-denorms-are-zero"

``````````

</details>


https://github.com/llvm/llvm-project/pull/208709
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to