// 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() { // CHECK-LABEL: for_count __attribute__((opencl_unroll_hint(8))) for( int i = 0; i < 1000; ++i); // CHECK: br label %{{.*}}, !llvm.loop ![[FOR_COUNT:.*]] } void for_disable() { // CHECK-LABEL: for_disable __attribute__((opencl_unroll_hint(1))) for( int i = 0; i < 1000; ++i); // CHECK: br label %{{.*}}, !llvm.loop ![[FOR_DISABLE:.*]] } void for_full() { // CHECK-LABEL: for_full __attribute__((opencl_unroll_hint)) for( int i = 0; i < 1000; ++i); // CHECK: br label %{{.*}}, !llvm.loop ![[FOR_FULL:.*]] } /*** while ***/ void while_count() { // CHECK-LABEL: while_count int i = 1000; __attribute__((opencl_unroll_hint(8))) while(i-->0); // CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_COUNT:.*]] } void while_disable() { // CHECK-LABEL: while_disable int i = 1000; __attribute__((opencl_unroll_hint(1))) while(i-->0); // CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_DISABLE:.*]] } void while_full() { // CHECK-LABEL: while_full int i = 1000; __attribute__((opencl_unroll_hint)) while(i-->0); // CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_FULL:.*]] } /*** do ***/ void do_count() { // CHECK-LABEL: do_count int i = 1000; __attribute__((opencl_unroll_hint(8))) do {} while(i--> 0); // CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_COUNT:.*]] } void do_disable() { // CHECK-LABEL: do_disable int i = 1000; __attribute__((opencl_unroll_hint(1))) do {} while(i--> 0); // CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_DISABLE:.*]] } void do_full() { // CHECK-LABEL: do_full int i = 1000; __attribute__((opencl_unroll_hint)) do {} while(i--> 0); // CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_FULL:.*]] } // CHECK: ![[FOR_COUNT]] = distinct !{![[FOR_COUNT]], ![[COUNT:.*]]} // CHECK: ![[COUNT]] = !{!"llvm.loop.unroll.count", i32 8} // CHECK: ![[FOR_DISABLE]] = distinct !{![[FOR_DISABLE]], ![[DISABLE:.*]]} // CHECK: ![[DISABLE]] = !{!"llvm.loop.unroll.disable"} // CHECK: ![[FOR_FULL]] = distinct !{![[FOR_FULL]], ![[FULL:.*]]} // CHECK: ![[FULL]] = !{!"llvm.loop.unroll.full"} // CHECK: ![[WHILE_COUNT]] = distinct !{![[WHILE_COUNT]], ![[COUNT]]} // CHECK: ![[WHILE_DISABLE]] = distinct !{![[WHILE_DISABLE]], ![[DISABLE]]} // CHECK: ![[WHILE_FULL]] = distinct !{![[WHILE_FULL]], ![[FULL]]} // CHECK: ![[DO_COUNT]] = distinct !{![[DO_COUNT]], ![[COUNT]]} // CHECK: ![[DO_DISABLE]] = distinct !{![[DO_DISABLE]], ![[DISABLE]]} // CHECK: ![[DO_FULL]] = distinct !{![[DO_FULL]], ![[FULL]]}