Skip to content

Commit 24711fd

Browse files
committed
Addressed review comments.
1 parent fcc4786 commit 24711fd

File tree

2 files changed

+161
-16
lines changed

2 files changed

+161
-16
lines changed

clang/lib/CodeGen/CGCall.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,21 +1891,21 @@ void CodeGenModule::getDefaultFunctionFPAccuracyAttributes(
18911891
}
18921892
}
18931893
if (FuncAttrs.attrs().size() == 0) {
1894-
StringRef FPAccuracyVal;
1895-
if (!getLangOpts().FPAccuracyVal.empty()) {
1896-
FPAccuracyVal = llvm::fp::getAccuracyForFPBuiltin(
1897-
ID, FuncType, convertFPAccuracy(getLangOpts().FPAccuracyVal));
1898-
assert(!FPAccuracyVal.empty() && "A valid accuracy value is expected");
1899-
FuncAttrs.addAttribute("fpbuiltin-max-error", FPAccuracyVal);
1900-
MD = llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
1901-
Int32Ty, convertFPAccuracyToAspect(getLangOpts().FPAccuracyVal)));
1894+
StringRef FPAccuracyVal =
1895+
llvm::StringSwitch<StringRef>(Name)
1896+
.Case("sqrt", getLangOpts().OffloadFP32PrecSqrt ? "" : "3.0")
1897+
.Case("fdiv", getLangOpts().OffloadFP32PrecDiv ? "" : "2.5")
1898+
.Default("");
1899+
if (FPAccuracyVal.empty()) {
1900+
if (!getLangOpts().FPAccuracyVal.empty()) {
1901+
FPAccuracyVal = llvm::fp::getAccuracyForFPBuiltin(
1902+
ID, FuncType, convertFPAccuracy(getLangOpts().FPAccuracyVal));
1903+
assert(!FPAccuracyVal.empty() && "A valid accuracy value is expected");
1904+
MD = llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
1905+
Int32Ty, convertFPAccuracyToAspect(getLangOpts().FPAccuracyVal)));
1906+
}
19021907
}
1903-
if (Name == "sqrt" && !getLangOpts().OffloadFP32PrecSqrt)
1904-
FPAccuracyVal = "3.0";
1905-
if (Name == "fdiv" && !getLangOpts().OffloadFP32PrecDiv)
1906-
FPAccuracyVal = "2.5";
1907-
if (!FPAccuracyVal.empty())
1908-
FuncAttrs.addAttribute("fpbuiltin-max-error", FPAccuracyVal);
1908+
FuncAttrs.addAttribute("fpbuiltin-max-error", FPAccuracyVal);
19091909
}
19101910
}
19111911

clang/test/CodeGenSYCL/offload-fp32-div-sqrt.cpp

Lines changed: 147 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
// DEFINE: -fsycl-is-device -emit-llvm -triple spirv64-unknown-unknown
66

77
// DEFINE: %{common_opts_spir} = -internal-isystem %S/Inputs \
8-
// DEFINE: -fsycl-is-device -emit-llvm -triple spirv-unknown-unknown
8+
// DEFINE: -fsycl-is-device -emit-llvm -triple spir-unknown-unknown
99

1010
// DEFINE: %{common_opts_spir64} = -internal-isystem %S/Inputs \
11-
// DEFINE: -fsycl-is-device -emit-llvm -triple spirv64-unknown-unknown
11+
// DEFINE: -fsycl-is-device -emit-llvm -triple spir64-unknown-unknown
1212

1313
// RUN: %clang_cc1 %{common_opts_spirv32} %s -o - \
1414
// RUN: | FileCheck --check-prefix PREC-SQRT %s
@@ -155,6 +155,151 @@
155155
// RUN: -ffp-builtin-accuracy=high:sin %s -o - \
156156
// RUN: | FileCheck --check-prefix ROUNDED-SQRT %s
157157

158+
// RUN: %clang_cc1 %{common_opts_spir} %s -o - \
159+
// RUN: | FileCheck --check-prefix PREC-SQRT %s
160+
161+
// RUN: %clang_cc1 %{common_opts_spir} -foffload-fp32-prec-sqrt %s -o - \
162+
// RUN: | FileCheck --check-prefix PREC-SQRT %s
163+
164+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-sqrt %s -o - \
165+
// RUN: | FileCheck --check-prefix ROUNDED-SQRT %s
166+
167+
// RUN: %clang_cc1 %{common_opts_spir} -foffload-fp32-prec-div %s -o - \
168+
// RUN: | FileCheck --check-prefix PREC-DIV %s
169+
170+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-div %s -o - \
171+
// RUN: | FileCheck --check-prefix ROUNDED-DIV %s
172+
173+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-div \
174+
// RUN: -fno-offload-fp32-prec-sqrt %s -o - \
175+
// RUN: | FileCheck --check-prefix ROUNDED-DIV-ROUNDED-SQRT %s
176+
177+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math \
178+
// RUN:-fno-offload-fp32-prec-div -fno-offload-fp32-prec-sqrt %s -o - \
179+
// RUN: | FileCheck --check-prefix ROUNDED-SQRT-FAST %s
180+
181+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math \
182+
// RUN: -fno-offload-fp32-prec-div -fno-offload-fp32-prec-sqrt %s -o - \
183+
// RUN: | FileCheck --check-prefix ROUNDED-DIV-FAST %s
184+
185+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math -foffload-fp32-prec-div \
186+
// RUN: %s -o - | FileCheck --check-prefix PREC-FAST %s
187+
188+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math -foffload-fp32-prec-sqrt \
189+
// RUN: %s -o - | FileCheck --check-prefix PREC-FAST %s
190+
191+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math \
192+
// RUN: -fno-offload-fp32-prec-div -foffload-fp32-prec-sqrt %s -o - \
193+
// RUN: | FileCheck --check-prefix PREC-SQRT-FAST %s
194+
195+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math \
196+
// RUN: -fno-offload-fp32-prec-sqrt -foffload-fp32-prec-div \
197+
// RUN: %s -o - | FileCheck --check-prefix ROUNDED-SQRT-PREC-DIV %s
198+
199+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math \
200+
// RUN: -fno-offload-fp32-prec-div -foffload-fp32-prec-sqrt \
201+
// RUN: %s -o - | FileCheck --check-prefix ROUNDED-DIV-PREC-SQRT %s
202+
203+
// RUN: %clang_cc1 %{common_opts_spir} -ffast-math \
204+
// RUN: -fno-offload-fp32-prec-div -fno-offload-fp32-prec-sqrt \
205+
// RUN: %s -o - | FileCheck --check-prefix ROUNDED-DIV-ROUNDED-SQRT-FAST %s
206+
207+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-div \
208+
// RUN: -ffp-builtin-accuracy=high %s -o - \
209+
// RUN: | FileCheck --check-prefix LOW-PREC-DIV %s
210+
211+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-div \
212+
// RUN: -ffp-builtin-accuracy=high:fdiv %s -o - \
213+
// RUN: | FileCheck --check-prefix HIGH-PREC %s
214+
215+
// RUN: %clang_cc1 %{common_opts_spir} -ffp-builtin-accuracy=high:fdiv \
216+
// RUN: -fno-offload-fp32-prec-div %s -o - \
217+
// RUN: | FileCheck --check-prefix HIGH-PREC %s
218+
219+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-sqrt \
220+
// RUN: -ffp-builtin-accuracy=high %s -o - \
221+
// RUN: | FileCheck --check-prefix LOW-PREC-SQRT %s
222+
223+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-div \
224+
// RUN: -ffp-builtin-accuracy=high:sin %s -o - \
225+
// RUN: | FileCheck --check-prefix ROUNDED-DIV %s
226+
227+
// RUN: %clang_cc1 %{common_opts_spir} -fno-offload-fp32-prec-sqrt \
228+
// RUN: -ffp-builtin-accuracy=high:sin %s -o - \
229+
// RUN: | FileCheck --check-prefix ROUNDED-SQRT %s
230+
231+
//
232+
233+
// RUN: %clang_cc1 %{common_opts_spir64} %s -o - \
234+
// RUN: | FileCheck --check-prefix PREC-SQRT %s
235+
236+
// RUN: %clang_cc1 %{common_opts_spir64} -foffload-fp32-prec-sqrt %s -o - \
237+
// RUN: | FileCheck --check-prefix PREC-SQRT %s
238+
239+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-sqrt %s -o - \
240+
// RUN: | FileCheck --check-prefix ROUNDED-SQRT %s
241+
242+
// RUN: %clang_cc1 %{common_opts_spir64} -foffload-fp32-prec-div %s -o - \
243+
// RUN: | FileCheck --check-prefix PREC-DIV %s
244+
245+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-div %s -o - \
246+
// RUN: | FileCheck --check-prefix ROUNDED-DIV %s
247+
248+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-div \
249+
// RUN: -fno-offload-fp32-prec-sqrt %s -o - \
250+
// RUN: | FileCheck --check-prefix ROUNDED-DIV-ROUNDED-SQRT %s
251+
252+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math -fno-offload-fp32-prec-div \
253+
// RUN: -fno-offload-fp32-prec-sqrt %s -o - \
254+
// RUN: | FileCheck --check-prefix ROUNDED-SQRT-FAST %s
255+
256+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math -fno-offload-fp32-prec-div \
257+
// RUN: -fno-offload-fp32-prec-sqrt %s -o - \
258+
// RUN: | FileCheck --check-prefix ROUNDED-DIV-FAST %s
259+
260+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math -foffload-fp32-prec-div \
261+
// RUN: %s -o - | FileCheck --check-prefix PREC-FAST %s
262+
263+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math \
264+
// RUN: -fno-offload-fp32-prec-div -foffload-fp32-prec-sqrt %s -o - \
265+
// RUN: | FileCheck --check-prefix PREC-SQRT-FAST %s
266+
267+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math \
268+
// RUN: -fno-offload-fp32-prec-sqrt -foffload-fp32-prec-div \
269+
// RUN: %s -o - | FileCheck --check-prefix ROUNDED-SQRT-PREC-DIV %s
270+
271+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math \
272+
// RUN: -fno-offload-fp32-prec-div -foffload-fp32-prec-sqrt \
273+
// RUN: %s -o - | FileCheck --check-prefix ROUNDED-DIV-PREC-SQRT %s
274+
275+
// RUN: %clang_cc1 %{common_opts_spir64} -ffast-math \
276+
// RUN: -fno-offload-fp32-prec-div -fno-offload-fp32-prec-sqrt \
277+
// RUN: %s -o - | FileCheck --check-prefix ROUNDED-DIV-ROUNDED-SQRT-FAST %s
278+
279+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-div \
280+
// RUN: -ffp-builtin-accuracy=high %s -o - \
281+
// RUN: | FileCheck --check-prefix LOW-PREC-DIV %s
282+
283+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-div \
284+
// RUN: -ffp-builtin-accuracy=high:fdiv %s -o - \
285+
// RUN: | FileCheck --check-prefix HIGH-PREC %s
286+
287+
// RUN: %clang_cc1 %{common_opts_spir64} -ffp-builtin-accuracy=high:fdiv \
288+
// RUN: -fno-offload-fp32-prec-div %s -o - \
289+
// RUN: | FileCheck --check-prefix HIGH-PREC %s
290+
291+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-sqrt \
292+
// RUN: -ffp-builtin-accuracy=high %s -o - \
293+
// RUN: | FileCheck --check-prefix LOW-PREC-SQRT %s
294+
295+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-div \
296+
// RUN: -ffp-builtin-accuracy=high:sin %s -o - \
297+
// RUN: | FileCheck --check-prefix ROUNDED-DIV %s
298+
299+
// RUN: %clang_cc1 %{common_opts_spir64} -fno-offload-fp32-prec-sqrt \
300+
// RUN: -ffp-builtin-accuracy=high:sin %s -o - \
301+
// RUN: | FileCheck --check-prefix ROUNDED-SQRT %s
302+
158303
#include "sycl.hpp"
159304

160305
extern "C" SYCL_EXTERNAL float sqrt(float);

0 commit comments

Comments
 (0)