diff options
| author | Egor Churaev <egor.churaev@gmail.com> | 2016-12-13 14:02:35 +0000 |
|---|---|---|
| committer | Egor Churaev <egor.churaev@gmail.com> | 2016-12-13 14:02:35 +0000 |
| commit | 24939d479e4a9bc76c4bfa85053067a7e426c287 (patch) | |
| tree | 89987d9f27b7c16104a4188717edd7a10ea0aacd /clang | |
| parent | 9dc67c0101072a84391935f5e8e3d1cf23076031 (diff) | |
| download | bcm5719-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.cpp | 10 | ||||
| -rw-r--r-- | clang/test/CodeGenOpenCL/unroll-hint.cl | 1 | ||||
| -rw-r--r-- | clang/test/SemaOpenCL/unroll-hint.cl | 15 |
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 |

