1 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only |
2 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-std=CL1.1 |
3 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-std=CL1.2 -DFP64 |
4 | |
5 | // Test with a target not supporting fp64. |
6 | // RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 -verify -pedantic -fsyntax-only -DNOFP64 -DNOFP16 |
7 | |
8 | // Test with some extensions enabled or disabled by cmd-line args |
9 | // |
10 | // Target does not support fp64 and fp16 - override it |
11 | // RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 -verify -pedantic -fsyntax-only -cl-ext=+cl_khr_fp64,+cl_khr_fp16 |
12 | // |
13 | // Disable or enable all extensions |
14 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-ext=-all -DNOFP64 -DNOFP16 |
15 | // RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 -verify -pedantic -fsyntax-only -cl-ext=+all |
16 | // RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 -verify -pedantic -fsyntax-only -cl-ext=+all,-cl_khr_fp64 -DNOFP64 |
17 | // RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 -verify -pedantic -fsyntax-only -cl-ext=-all,+cl_khr_fp64 -DNOFP16 |
18 | // |
19 | // Concatenating |
20 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-ext=-cl_khr_fp64 -cl-ext=+cl_khr_fp64 |
21 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-ext=-cl_khr_fp64,+cl_khr_fp64 |
22 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-ext=-all -cl-ext=+cl_khr_fp64 -cl-ext=+cl_khr_fp16 -cl-ext=-cl_khr_fp64 -DNOFP64 |
23 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-ext=-all -cl-ext=+cl_khr_fp64,-cl_khr_fp64,+cl_khr_fp16 -DNOFP64 |
24 | |
25 | // Test with -finclude-default-header, which includes opencl-c.h. opencl-c.h |
26 | // disables all extensions by default, but supported core extensions for a |
27 | // particular OpenCL version must be re-enabled (for example, cl_khr_fp64 is |
28 | // enabled by default with -cl-std=CL2.0). |
29 | // |
30 | // RUN: %clang_cc1 %s -triple amdgcn-unknown-unknown -verify -pedantic -fsyntax-only -cl-std=CL2.0 -finclude-default-header |
31 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-std=c++ |
32 | |
33 | #ifdef _OPENCL_H_ |
34 | // expected-no-diagnostics |
35 | #endif |
36 | |
37 | #ifdef FP64 |
38 | // expected-no-diagnostics |
39 | #endif |
40 | |
41 | #ifdef __OPENCL_CPP_VERSION__ |
42 | // expected-no-diagnostics |
43 | #endif |
44 | |
45 | #if (defined(__OPENCL_C_VERSION__) && __OPENCL_C_VERSION__ < 120) |
46 | void f1(double da) { // expected-error {{type 'double' requires cl_khr_fp64 extension}} |
47 | double d; // expected-error {{type 'double' requires cl_khr_fp64 extension}} |
48 | (void) 1.0; // expected-warning {{double precision constant requires cl_khr_fp64}} |
49 | } |
50 | #endif |
51 | |
52 | #ifndef _OPENCL_H_ |
53 | int isnan(float x) { |
54 | return __builtin_isnan(x); |
55 | } |
56 | |
57 | int isfinite(float x) { |
58 | return __builtin_isfinite(x); |
59 | } |
60 | #endif |
61 | |
62 | #pragma OPENCL EXTENSION cl_khr_fp64 : enable |
63 | #ifdef NOFP64 |
64 | // expected-warning@-2{{unsupported OpenCL extension 'cl_khr_fp64' - ignoring}} |
65 | #endif |
66 | |
67 | #pragma OPENCL EXTENSION cl_khr_fp16 : enable |
68 | #ifdef NOFP16 |
69 | // expected-warning@-2{{unsupported OpenCL extension 'cl_khr_fp16' - ignoring}} |
70 | #endif |
71 | |
72 | void f2(void) { |
73 | double d; |
74 | #ifdef NOFP64 |
75 | // expected-error@-2{{use of type 'double' requires cl_khr_fp64 extension to be enabled}} |
76 | #endif |
77 | |
78 | typedef double double4 __attribute__((ext_vector_type(4))); |
79 | double4 d4 = {0.0f, 2.0f, 3.0f, 1.0f}; |
80 | #ifdef NOFP64 |
81 | // expected-error@-3 {{use of type 'double' requires cl_khr_fp64 extension to be enabled}} |
82 | // expected-error@-3 {{use of type 'double4' (vector of 4 'double' values) requires cl_khr_fp64 extension to be enabled}} |
83 | #endif |
84 | |
85 | (void) 1.0; |
86 | |
87 | #ifdef NOFP64 |
88 | // expected-warning@-3{{double precision constant requires cl_khr_fp64, casting to single precision}} |
89 | #endif |
90 | } |
91 | |
92 | #pragma OPENCL EXTENSION cl_khr_fp64 : disable |
93 | #ifdef NOFP64 |
94 | // expected-warning@-2{{unsupported OpenCL extension 'cl_khr_fp64' - ignoring}} |
95 | #endif |
96 | |
97 | #if (defined(__OPENCL_C_VERSION__) && __OPENCL_C_VERSION__ < 120) |
98 | void f3(void) { |
99 | double d; // expected-error {{type 'double' requires cl_khr_fp64 extension}} |
100 | } |
101 | #endif |
102 | |