Add supported OpenCL extensions to target info. It serves as default values to save the users of the burden setting each supported extensions and optional core features in command line. Re-commit after fixing build error due to missing override attribute. Differential Revision: http://reviews.llvm.org/D19484 llvm-svn: 269670
47 lines
1.5 KiB
Common Lisp
47 lines
1.5 KiB
Common Lisp
// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -Wno-unused-value -triple spir-unknown-unknown
|
|
|
|
#pragma OPENCL EXTENSION cl_khr_fp16 : disable
|
|
constant float f = 1.0h; // expected-error{{half precision constant requires cl_khr_fp16}}
|
|
|
|
half half_disabled(half *p, // expected-error{{declaring function return value of type 'half' is not allowed}}
|
|
half h) // expected-error{{declaring function parameter of type 'half' is not allowed}}
|
|
{
|
|
half a[2]; // expected-error{{declaring variable of type 'half [2]' is not allowed}}
|
|
half b; // expected-error{{declaring variable of type 'half' is not allowed}}
|
|
*p; // expected-error{{loading directly from pointer to type 'half' is not allowed}}
|
|
p[1]; // expected-error{{loading directly from pointer to type 'half' is not allowed}}
|
|
|
|
float c = 1.0f;
|
|
b = (half) c; // expected-error{{casting to type 'half' is not allowed}}
|
|
c = (float) 1.0h; // expected-error{{half precision constant requires cl_khr_fp16}}
|
|
b = 1.0h; // expected-error{{half precision constant requires cl_khr_fp16}}
|
|
|
|
half *allowed = &p[1];
|
|
half *allowed2 = &*p;
|
|
half *allowed3 = p + 1;
|
|
|
|
return h;
|
|
}
|
|
|
|
// Exactly the same as above but with the cl_khr_fp16 extension enabled.
|
|
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
|
|
constant half a = 1.0h;
|
|
half half_enabled(half *p, half h)
|
|
{
|
|
half a[2];
|
|
half b;
|
|
*p;
|
|
p[1];
|
|
|
|
float c = 1.0f;
|
|
b = (half) c;
|
|
c = (float) 1.0h;
|
|
b = 1.0h;
|
|
|
|
half *allowed = &p[1];
|
|
half *allowed2 = &*p;
|
|
half *allowed3 = p + 1;
|
|
|
|
return h;
|
|
}
|