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