summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorEgor Churaev <egor.churaev@gmail.com>2016-12-13 14:02:35 +0000
committerEgor Churaev <egor.churaev@gmail.com>2016-12-13 14:02:35 +0000
commit24939d479e4a9bc76c4bfa85053067a7e426c287 (patch)
tree89987d9f27b7c16104a4188717edd7a10ea0aacd /clang
parent9dc67c0101072a84391935f5e8e3d1cf23076031 (diff)
downloadbcm5719-llvm-24939d479e4a9bc76c4bfa85053067a7e426c287.tar.gz
bcm5719-llvm-24939d479e4a9bc76c4bfa85053067a7e426c287.zip
[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
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaStmtAttr.cpp10
-rw-r--r--clang/test/CodeGenOpenCL/unroll-hint.cl1
-rw-r--r--clang/test/SemaOpenCL/unroll-hint.cl15
3 files changed, 5 insertions, 21 deletions
diff --git a/clang/lib/Sema/SemaStmtAttr.cpp b/clang/lib/Sema/SemaStmtAttr.cpp
index 87fd8893957..01fa856132d 100644
--- a/clang/lib/Sema/SemaStmtAttr.cpp
+++ b/clang/lib/Sema/SemaStmtAttr.cpp
@@ -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) {
diff --git a/clang/test/CodeGenOpenCL/unroll-hint.cl b/clang/test/CodeGenOpenCL/unroll-hint.cl
index a86762e02b5..6a9ba87a5eb 100644
--- a/clang/test/CodeGenOpenCL/unroll-hint.cl
+++ b/clang/test/CodeGenOpenCL/unroll-hint.cl
@@ -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()
diff --git a/clang/test/SemaOpenCL/unroll-hint.cl b/clang/test/SemaOpenCL/unroll-hint.cl
index 99698660369..41385c1177c 100644
--- a/clang/test/SemaOpenCL/unroll-hint.cl
+++ b/clang/test/SemaOpenCL/unroll-hint.cl
@@ -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
OpenPOWER on IntegriCloud