[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

llvm-svn: 289535
This commit is contained in:
Egor Churaev 2016-12-13 14:02:35 +00:00
parent 9dc67c0101
commit 24939d479e
3 changed files with 5 additions and 21 deletions

View File

@ -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) {

View File

@ -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()

View File

@ -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