forked from OSchip/llvm-project
[OpenCL] Adjust diagnostic for subgroup support.
OpenCL C 3.0 __opencl_c_subgroups feature is slightly different then other equivalent features and extensions (fp64 and 3d image writes): OpenCL C 3.0 device can support the extension but not the feature. cl_khr_subgroups requires subgroup independent forward progress. This patch adjusts the check which is used when translating language builtins to check either the extension or feature is supported. Reviewed By: Anastasia Differential Revision: https://reviews.llvm.org/D118999
This commit is contained in:
parent
8fee667d31
commit
bfb1a33bec
|
@ -1042,9 +1042,15 @@ static bool checkOpenCLBlockArgs(Sema &S, Expr *BlockArg) {
|
|||
}
|
||||
|
||||
static bool checkOpenCLSubgroupExt(Sema &S, CallExpr *Call) {
|
||||
if (!S.getOpenCLOptions().isSupported("cl_khr_subgroups", S.getLangOpts())) {
|
||||
// OpenCL device can support extension but not the feature as extension
|
||||
// requires subgroup independent forward progress, but subgroup independent
|
||||
// forward progress is optional in OpenCL C 3.0 __opencl_c_subgroups feature.
|
||||
if (!S.getOpenCLOptions().isSupported("cl_khr_subgroups", S.getLangOpts()) &&
|
||||
!S.getOpenCLOptions().isSupported("__opencl_c_subgroups",
|
||||
S.getLangOpts())) {
|
||||
S.Diag(Call->getBeginLoc(), diag::err_opencl_requires_extension)
|
||||
<< 1 << Call->getDirectCallee() << "cl_khr_subgroups";
|
||||
<< 1 << Call->getDirectCallee()
|
||||
<< "cl_khr_subgroups or __opencl_c_subgroups";
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -triple "spir64-unknown-unknown" -verify -pedantic -fsyntax-only -Wconversion -DWCONV -DQUALS=
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -triple "spir64-unknown-unknown" -verify -pedantic -fsyntax-only -Wconversion -DWCONV -DQUALS="const volatile"
|
||||
// RUN: %clang_cc1 %s -cl-std=CL3.0 -triple "spir-unknown-unknown" -verify -pedantic -fsyntax-only -DB32 -DQUALS=
|
||||
// RUN: %clang_cc1 %s -cl-std=CL3.0 -triple "spir-unknown-unknown" -verify -pedantic -fsyntax-only -DB32 -DQUALS= -cl-ext=-cl_khr_subgroups
|
||||
// RUN: %clang_cc1 %s -cl-std=CL3.0 -triple "spir-unknown-unknown" -verify -pedantic -fsyntax-only -DB32 -DQUALS= -cl-ext=-cl_khr_subgroups,-__opencl_c_subgroups
|
||||
// RUN: %clang_cc1 %s -cl-std=CL3.0 -triple "spir-unknown-unknown" -verify -pedantic -fsyntax-only -DB32 -DQUALS="const volatile"
|
||||
// RUN: %clang_cc1 %s -cl-std=CL3.0 -triple "spir64-unknown-unknown" -verify -pedantic -fsyntax-only -Wconversion -DWCONV -DQUALS=
|
||||
// RUN: %clang_cc1 %s -cl-std=CL3.0 -triple "spir64-unknown-unknown" -verify -pedantic -fsyntax-only -Wconversion -DWCONV -DQUALS="const volatile"
|
||||
|
@ -241,12 +241,12 @@ kernel void bar(global unsigned int *buf)
|
|||
kernel void foo1(global unsigned int *buf)
|
||||
{
|
||||
ndrange_t n;
|
||||
buf[0] = get_kernel_max_sub_group_size_for_ndrange(n, ^(){}); // expected-error {{use of declaration 'get_kernel_max_sub_group_size_for_ndrange' requires cl_khr_subgroups support}}
|
||||
buf[0] = get_kernel_max_sub_group_size_for_ndrange(n, ^(){}); // expected-error {{use of declaration 'get_kernel_max_sub_group_size_for_ndrange' requires cl_khr_subgroups or __opencl_c_subgroups support}}
|
||||
}
|
||||
|
||||
kernel void bar1(global unsigned int *buf)
|
||||
{
|
||||
ndrange_t n;
|
||||
buf[0] = get_kernel_sub_group_count_for_ndrange(n, ^(){}); // expected-error {{use of declaration 'get_kernel_sub_group_count_for_ndrange' requires cl_khr_subgroups support}}
|
||||
buf[0] = get_kernel_sub_group_count_for_ndrange(n, ^(){}); // expected-error {{use of declaration 'get_kernel_sub_group_count_for_ndrange' requires cl_khr_subgroups or __opencl_c_subgroups support}}
|
||||
}
|
||||
#endif // ifdef cl_khr_subgroups
|
||||
|
|
Loading…
Reference in New Issue