mirror of https://github.com/microsoft/clang.git
[OpenCL] Enable unroll hint for OpenCL 1.x.
Summary: Although the feature was introduced only in OpenCL C v2.0 spec., it's useful for OpenCL 1.x too and doesn't require HW support. Reviewers: Anastasia Subscribers: yaxunl, cfe-commits, bader Differential Revision: https://reviews.llvm.org/D27453 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289535 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
350d26759e
commit
49b4f07b36
|
@ -225,16 +225,12 @@ CheckForIncompatibleAttributes(Sema &S,
|
|||
|
||||
static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const AttributeList &A,
|
||||
SourceRange Range) {
|
||||
// OpenCL v2.0 s6.11.5 - opencl_unroll_hint can have 0 arguments (compiler
|
||||
// Although the feature was introduced only in OpenCL C v2.0 s6.11.5, it's
|
||||
// useful for OpenCL 1.x too and doesn't require HW support.
|
||||
// opencl_unroll_hint can have 0 arguments (compiler
|
||||
// determines unrolling factor) or 1 argument (the unroll factor provided
|
||||
// by the user).
|
||||
|
||||
if (S.getLangOpts().OpenCLVersion < 200) {
|
||||
S.Diag(A.getLoc(), diag::err_attribute_requires_opencl_version)
|
||||
<< A.getName() << "2.0" << 1;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
unsigned NumArgs = A.getNumArgs();
|
||||
|
||||
if (NumArgs > 1) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL2.0 -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL1.2 -o - %s | FileCheck %s
|
||||
|
||||
/*** for ***/
|
||||
void for_count()
|
||||
|
|
|
@ -1,17 +1,5 @@
|
|||
//RUN: %clang_cc1 -O0 -fsyntax-only -verify %s
|
||||
//RUN: %clang_cc1 -O0 -cl-std=CL2.0 -fsyntax-only -verify -DCL20 %s
|
||||
//RUN: %clang_cc1 -O0 -cl-std=CL2.0 -fsyntax-only -verify %s
|
||||
|
||||
kernel void D (global int *x) {
|
||||
int i = 10;
|
||||
#ifndef CL20
|
||||
// expected-error@+2 {{'opencl_unroll_hint' attribute requires OpenCL version 2.0 or above}}
|
||||
#endif
|
||||
__attribute__((opencl_unroll_hint))
|
||||
do {
|
||||
} while(i--);
|
||||
}
|
||||
|
||||
#ifdef CL20
|
||||
kernel void C (global int *x) {
|
||||
int I = 3;
|
||||
__attribute__((opencl_unroll_hint(I))) // expected-error {{'opencl_unroll_hint' attribute requires an integer constant}}
|
||||
|
@ -27,4 +15,3 @@ kernel void F() {
|
|||
__attribute__((opencl_unroll_hint(-1))) // expected-error {{'opencl_unroll_hint' attribute requires a positive integral compile time constant expression}}
|
||||
for(int i=0; i<100; i++);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue