]> granicus.if.org Git - clang/commitdiff
[OpenCL] Enable unroll hint for OpenCL 1.x.
authorEgor Churaev <egor.churaev@gmail.com>
Tue, 13 Dec 2016 14:02:35 +0000 (14:02 +0000)
committerEgor Churaev <egor.churaev@gmail.com>
Tue, 13 Dec 2016 14:02:35 +0000 (14:02 +0000)
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

lib/Sema/SemaStmtAttr.cpp
test/CodeGenOpenCL/unroll-hint.cl
test/SemaOpenCL/unroll-hint.cl

index 87fd8893957231ebaf055ce0d3ba18b4f96b568a..01fa856132d7d4e5c5c94a7458125c4290acd01b 100644 (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) {
index a86762e02b548b176dc519e7a6ac697c863bd9e0..6a9ba87a5eb01e3991f27fcd8cefbbd860317643 100644 (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()
index 996986603695a007923c9c9443638dce7458e0f8..41385c1177ca04d452dad3431c1e93d0bc6dbaa1 100644 (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