[PATCH] D27453: [OpenCL] Enable unroll hint for OpenCL 1.x.
This revision was automatically updated to reflect the committed changes. Closed by commit rL289535: [OpenCL] Enable unroll hint for OpenCL 1.x. (authored by echuraev). Changed prior to commit: https://reviews.llvm.org/D27453?vs=80547=81223#toc Repository: rL LLVM https://reviews.llvm.org/D27453 Files: cfe/trunk/lib/Sema/SemaStmtAttr.cpp cfe/trunk/test/CodeGenOpenCL/unroll-hint.cl cfe/trunk/test/SemaOpenCL/unroll-hint.cl Index: cfe/trunk/test/CodeGenOpenCL/unroll-hint.cl === --- cfe/trunk/test/CodeGenOpenCL/unroll-hint.cl +++ cfe/trunk/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() Index: cfe/trunk/test/SemaOpenCL/unroll-hint.cl === --- cfe/trunk/test/SemaOpenCL/unroll-hint.cl +++ cfe/trunk/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 @@ __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 Index: cfe/trunk/lib/Sema/SemaStmtAttr.cpp === --- cfe/trunk/lib/Sema/SemaStmtAttr.cpp +++ cfe/trunk/lib/Sema/SemaStmtAttr.cpp @@ -225,16 +225,12 @@ static Attr *handleOpenCLUnrollHint(Sema , Stmt *St, const AttributeList , 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: cfe/trunk/test/CodeGenOpenCL/unroll-hint.cl === --- cfe/trunk/test/CodeGenOpenCL/unroll-hint.cl +++ cfe/trunk/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() Index: cfe/trunk/test/SemaOpenCL/unroll-hint.cl === --- cfe/trunk/test/SemaOpenCL/unroll-hint.cl +++ cfe/trunk/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 @@ __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 Index: cfe/trunk/lib/Sema/SemaStmtAttr.cpp === --- cfe/trunk/lib/Sema/SemaStmtAttr.cpp +++ cfe/trunk/lib/Sema/SemaStmtAttr.cpp @@ -225,16 +225,12 @@ static Attr *handleOpenCLUnrollHint(Sema , Stmt *St, const AttributeList , 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
[PATCH] D27453: [OpenCL] Enable unroll hint for OpenCL 1.x.
Anastasia accepted this revision. Anastasia added a comment. This revision is now accepted and ready to land. LGTM! Thanks! https://reviews.llvm.org/D27453 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D27453: [OpenCL] Enable unroll hint for OpenCL 1.x.
echuraev updated this revision to Diff 80547. echuraev marked an inline comment as done. https://reviews.llvm.org/D27453 Files: lib/Sema/SemaStmtAttr.cpp test/CodeGenOpenCL/unroll-hint.cl test/SemaOpenCL/unroll-hint.cl Index: test/SemaOpenCL/unroll-hint.cl === --- test/SemaOpenCL/unroll-hint.cl +++ 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 @@ __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 Index: test/CodeGenOpenCL/unroll-hint.cl === --- test/CodeGenOpenCL/unroll-hint.cl +++ 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() Index: lib/Sema/SemaStmtAttr.cpp === --- lib/Sema/SemaStmtAttr.cpp +++ lib/Sema/SemaStmtAttr.cpp @@ -225,16 +225,12 @@ static Attr *handleOpenCLUnrollHint(Sema , Stmt *St, const AttributeList , 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: test/SemaOpenCL/unroll-hint.cl === --- test/SemaOpenCL/unroll-hint.cl +++ 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 @@ __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 Index: test/CodeGenOpenCL/unroll-hint.cl === --- test/CodeGenOpenCL/unroll-hint.cl +++ 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() Index: lib/Sema/SemaStmtAttr.cpp === --- lib/Sema/SemaStmtAttr.cpp +++ lib/Sema/SemaStmtAttr.cpp @@ -225,16 +225,12 @@ static Attr *handleOpenCLUnrollHint(Sema , Stmt *St, const AttributeList , 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) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org
[PATCH] D27453: [OpenCL] Enable unroll hint for OpenCL 1.x.
Anastasia added inline comments. Comment at: lib/Sema/SemaStmtAttr.cpp:232 - if (S.getLangOpts().OpenCLVersion < 200) { -S.Diag(A.getLoc(), diag::err_attribute_requires_opencl_version) The comment above refers to v2.0, could we update it reflecting the fact that we now allow the feature in all OpenCL versions. https://reviews.llvm.org/D27453 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D27453: [OpenCL] Enable unroll hint for OpenCL 1.x.
echuraev created this revision. echuraev added a reviewer: Anastasia. echuraev added subscribers: bader, cfe-commits, yaxunl. 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. https://reviews.llvm.org/D27453 Files: lib/Sema/SemaStmtAttr.cpp test/CodeGenOpenCL/unroll-hint.cl test/SemaOpenCL/unroll-hint.cl Index: test/SemaOpenCL/unroll-hint.cl === --- test/SemaOpenCL/unroll-hint.cl +++ 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 @@ __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 Index: test/CodeGenOpenCL/unroll-hint.cl === --- test/CodeGenOpenCL/unroll-hint.cl +++ 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() Index: lib/Sema/SemaStmtAttr.cpp === --- lib/Sema/SemaStmtAttr.cpp +++ lib/Sema/SemaStmtAttr.cpp @@ -229,12 +229,6 @@ // 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: test/SemaOpenCL/unroll-hint.cl === --- test/SemaOpenCL/unroll-hint.cl +++ 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 @@ __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 Index: test/CodeGenOpenCL/unroll-hint.cl === --- test/CodeGenOpenCL/unroll-hint.cl +++ 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() Index: lib/Sema/SemaStmtAttr.cpp === --- lib/Sema/SemaStmtAttr.cpp +++ lib/Sema/SemaStmtAttr.cpp @@ -229,12 +229,6 @@ // 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) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits