1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL2.0 -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li/*** for ***/ 4*67e74705SXin Livoid for_count() 5*67e74705SXin Li{ 6*67e74705SXin Li// CHECK-LABEL: for_count 7*67e74705SXin Li __attribute__((opencl_unroll_hint(8))) 8*67e74705SXin Li for( int i = 0; i < 1000; ++i); 9*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_COUNT:.*]] 10*67e74705SXin Li} 11*67e74705SXin Li 12*67e74705SXin Livoid for_disable() 13*67e74705SXin Li{ 14*67e74705SXin Li// CHECK-LABEL: for_disable 15*67e74705SXin Li __attribute__((opencl_unroll_hint(1))) 16*67e74705SXin Li for( int i = 0; i < 1000; ++i); 17*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_DISABLE:.*]] 18*67e74705SXin Li} 19*67e74705SXin Li 20*67e74705SXin Livoid for_full() 21*67e74705SXin Li{ 22*67e74705SXin Li// CHECK-LABEL: for_full 23*67e74705SXin Li __attribute__((opencl_unroll_hint)) 24*67e74705SXin Li for( int i = 0; i < 1000; ++i); 25*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_FULL:.*]] 26*67e74705SXin Li} 27*67e74705SXin Li 28*67e74705SXin Li/*** while ***/ 29*67e74705SXin Livoid while_count() 30*67e74705SXin Li{ 31*67e74705SXin Li// CHECK-LABEL: while_count 32*67e74705SXin Li int i = 1000; 33*67e74705SXin Li __attribute__((opencl_unroll_hint(8))) 34*67e74705SXin Li while(i-->0); 35*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_COUNT:.*]] 36*67e74705SXin Li} 37*67e74705SXin Li 38*67e74705SXin Livoid while_disable() 39*67e74705SXin Li{ 40*67e74705SXin Li// CHECK-LABEL: while_disable 41*67e74705SXin Li int i = 1000; 42*67e74705SXin Li __attribute__((opencl_unroll_hint(1))) 43*67e74705SXin Li while(i-->0); 44*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_DISABLE:.*]] 45*67e74705SXin Li} 46*67e74705SXin Li 47*67e74705SXin Livoid while_full() 48*67e74705SXin Li{ 49*67e74705SXin Li// CHECK-LABEL: while_full 50*67e74705SXin Li int i = 1000; 51*67e74705SXin Li __attribute__((opencl_unroll_hint)) 52*67e74705SXin Li while(i-->0); 53*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_FULL:.*]] 54*67e74705SXin Li} 55*67e74705SXin Li 56*67e74705SXin Li/*** do ***/ 57*67e74705SXin Livoid do_count() 58*67e74705SXin Li{ 59*67e74705SXin Li// CHECK-LABEL: do_count 60*67e74705SXin Li int i = 1000; 61*67e74705SXin Li __attribute__((opencl_unroll_hint(8))) 62*67e74705SXin Li do {} while(i--> 0); 63*67e74705SXin Li// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_COUNT:.*]] 64*67e74705SXin Li} 65*67e74705SXin Li 66*67e74705SXin Livoid do_disable() 67*67e74705SXin Li{ 68*67e74705SXin Li// CHECK-LABEL: do_disable 69*67e74705SXin Li int i = 1000; 70*67e74705SXin Li __attribute__((opencl_unroll_hint(1))) 71*67e74705SXin Li do {} while(i--> 0); 72*67e74705SXin Li// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_DISABLE:.*]] 73*67e74705SXin Li} 74*67e74705SXin Li 75*67e74705SXin Livoid do_full() 76*67e74705SXin Li{ 77*67e74705SXin Li// CHECK-LABEL: do_full 78*67e74705SXin Li int i = 1000; 79*67e74705SXin Li __attribute__((opencl_unroll_hint)) 80*67e74705SXin Li do {} while(i--> 0); 81*67e74705SXin Li// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_FULL:.*]] 82*67e74705SXin Li} 83*67e74705SXin Li 84*67e74705SXin Li 85*67e74705SXin Li// CHECK: ![[FOR_COUNT]] = distinct !{![[FOR_COUNT]], ![[COUNT:.*]]} 86*67e74705SXin Li// CHECK: ![[COUNT]] = !{!"llvm.loop.unroll.count", i32 8} 87*67e74705SXin Li// CHECK: ![[FOR_DISABLE]] = distinct !{![[FOR_DISABLE]], ![[DISABLE:.*]]} 88*67e74705SXin Li// CHECK: ![[DISABLE]] = !{!"llvm.loop.unroll.disable"} 89*67e74705SXin Li// CHECK: ![[FOR_FULL]] = distinct !{![[FOR_FULL]], ![[FULL:.*]]} 90*67e74705SXin Li// CHECK: ![[FULL]] = !{!"llvm.loop.unroll.full"} 91*67e74705SXin Li// CHECK: ![[WHILE_COUNT]] = distinct !{![[WHILE_COUNT]], ![[COUNT]]} 92*67e74705SXin Li// CHECK: ![[WHILE_DISABLE]] = distinct !{![[WHILE_DISABLE]], ![[DISABLE]]} 93*67e74705SXin Li// CHECK: ![[WHILE_FULL]] = distinct !{![[WHILE_FULL]], ![[FULL]]} 94*67e74705SXin Li// CHECK: ![[DO_COUNT]] = distinct !{![[DO_COUNT]], ![[COUNT]]} 95*67e74705SXin Li// CHECK: ![[DO_DISABLE]] = distinct !{![[DO_DISABLE]], ![[DISABLE]]} 96*67e74705SXin Li// CHECK: ![[DO_FULL]] = distinct !{![[DO_FULL]], ![[FULL]]} 97