Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit 773b61e

Browse files
authored
[SYCL] Add --ffast-math tests (#919)
This patch adds tests for intel/llvm#5801
1 parent 258a40d commit 773b61e

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// RUN: %clangxx -fsycl -ffast-math -fsycl-targets=%sycl_triple %s -o %t.out
2+
// RUN: %HOST_RUN_PLACEHOLDER %t.out
3+
// RUN: %CPU_RUN_PLACEHOLDER %t.out
4+
// RUN: %GPU_RUN_PLACEHOLDER %t.out
5+
// RUN: %ACC_RUN_PLACEHOLDER %t.out
6+
7+
#include <CL/sycl.hpp>
8+
#include <cassert>
9+
10+
#define __TEST_FFMATH_BINARY(func) \
11+
int test_ffmath_##func() { \
12+
sycl::float4 r[2]; \
13+
sycl::float4 val[2] = {{1.0004f, 1e-4f, 1.4f, 14.0f}, \
14+
{1.0004f, 1e-4f, 1.4f, 14.0f}}; \
15+
{ \
16+
sycl::buffer<sycl::float4, 1> output(&r[0], sycl::range<1>(2)); \
17+
sycl::buffer<sycl::float4, 1> input(&val[0], sycl::range<1>(2)); \
18+
sycl::queue q; \
19+
q.submit([&](sycl::handler &cgh) { \
20+
auto AccO = \
21+
output.template get_access<sycl::access::mode::write>(cgh); \
22+
auto AccI = input.template get_access<sycl::access::mode::read>(cgh); \
23+
cgh.single_task([=]() { \
24+
AccO[0] = sycl::func(AccI[0], AccI[1]); \
25+
AccO[1] = sycl::native::func(AccI[0], AccI[1]); \
26+
}); \
27+
}); \
28+
} \
29+
return sycl::all(r[0] == r[1]); \
30+
}
31+
32+
#define __TEST_FFMATH_UNARY(func) \
33+
int test_ffmath_##func() { \
34+
sycl::float4 val = {1.0004f, 1e-4f, 1.4f, 14.0f}; \
35+
sycl::float4 r[2]; \
36+
{ \
37+
sycl::buffer<sycl::float4, 1> output(&r[0], sycl::range<1>(2)); \
38+
sycl::buffer<sycl::float4, 1> input(&val, sycl::range<1>(1)); \
39+
sycl::queue q; \
40+
q.submit([&](sycl::handler &cgh) { \
41+
auto AccO = \
42+
output.template get_access<sycl::access::mode::write>(cgh); \
43+
auto AccI = input.template get_access<sycl::access::mode::read>(cgh); \
44+
cgh.single_task([=]() { \
45+
AccO[0] = sycl::func(AccI[0]); \
46+
AccO[1] = sycl::native::func(AccI[0]); \
47+
}); \
48+
}); \
49+
} \
50+
return sycl::all(r[0] == r[1]); \
51+
}
52+
53+
__TEST_FFMATH_UNARY(cos)
54+
__TEST_FFMATH_UNARY(exp)
55+
__TEST_FFMATH_UNARY(exp2)
56+
__TEST_FFMATH_UNARY(exp10)
57+
__TEST_FFMATH_UNARY(log)
58+
__TEST_FFMATH_UNARY(log2)
59+
__TEST_FFMATH_UNARY(log10)
60+
__TEST_FFMATH_BINARY(powr)
61+
__TEST_FFMATH_UNARY(rsqrt)
62+
__TEST_FFMATH_UNARY(sin)
63+
__TEST_FFMATH_UNARY(sqrt)
64+
__TEST_FFMATH_UNARY(tan)
65+
66+
int main() {
67+
68+
assert(test_ffmath_cos());
69+
assert(test_ffmath_exp());
70+
assert(test_ffmath_exp2());
71+
assert(test_ffmath_exp10());
72+
assert(test_ffmath_log());
73+
assert(test_ffmath_log2());
74+
assert(test_ffmath_log10());
75+
assert(test_ffmath_powr());
76+
assert(test_ffmath_rsqrt());
77+
assert(test_ffmath_sin());
78+
assert(test_ffmath_sqrt());
79+
assert(test_ffmath_tan());
80+
81+
return 0;
82+
}

0 commit comments

Comments
 (0)